Acessando "objeto protegido" [RESOLVIDO]

1. Acessando "objeto protegido" [RESOLVIDO]

???
gokernel

(usa Linux Mint)

Enviado em 01/06/2013 - 12:05h


Olá estou fazendo uma "parada" aqui tentando acessar um valor direto de um "OBJETO PROTEGIDO" ...



#include <stdio.h>
#include <stdlib.h>

typedef struct OBJECT OBJECT;

struct OBJECT
{
int id;
int flags;
};

OBJECT *win;

void create (void)
{
win = (OBJECT*) malloc (sizeof(OBJECT));

if (!win)
{
printf ("xi, ferrou ... sem memoria ;)\n");
exit (-1);
}

win->id = 200;
win->flags = 300;
}

void change_id_flags (OBJECT *o)
{
int *p;

p = (int*)o; // get id
*p = 2222; // set id

p++; // change to flags ... get flags
*p = 3333; // set flags
}

int main (void)
{
create ();

// ORIG: 200, 300
//
printf ("\nORIG OBJECT->id: %d\n", win->id);
printf ("ORIG OBJECT->flags: %d\n\n", win->flags);

printf ("------- CHANGING -------\n\n");
change_id_flags (win);

// CHANGED: 2222, 3333
//
printf ("NOW OBJECT->id: %d\n", win->id);
printf ("NOW OBJECT->flags: %d\n", win->flags);

return 0;
}



Pergunta:
Alguém sabe como pegar direto o valor ( win->flags ) sem incrementar o ( p++; ) usando esse método ???

OBS: me refiro a "OBJETO PROTEGIDO" como uma struct declarada como "privada/escondida" no arquivo .c.

Usei esse exemplo ( struct publica ) apenas para demonstrar .

Grato !!!







  


2. Re: Acessando "objeto protegido" [RESOLVIDO]

???
gokernel

(usa Linux Mint)

Enviado em 01/06/2013 - 16:10h

Resolvido:

Para acessar ( win->flags ):

*(p + 1) = 12345;

Ou qualquer outro dado na struct é só passar o index.



3. Re: Acessando "objeto protegido" [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 03/06/2013 - 18:51h

É o tipo da coisa que um programa bem comportado não deveria fazer. Se o objeto realmente for privado de um módulo cujas declarações correspondentes você não conhece, você não saberá sequer o tamanho do objeto, incluindo detalhes de implementação, como alinhamenhtos e packing.

Se for para inspecionar o conteúdo de um objeto desses, seria mais prudente ir de byte em byte do que de inteiro em inteiro.


4. Re: Acessando "objeto protegido" [RESOLVIDO]

???
gokernel

(usa Linux Mint)

Enviado em 03/06/2013 - 19:42h


Neste caso conheço a struct ... e modifiquei o tipo ( int ) para (short ) para economizar memória, veja parte do codigo do core:



/*
**-------------------------------------------------------------------
**
** THANKS:
** The only GOD, creator of heaven and earth, in the name of JESUS CHRIST.
**
** DESCRIPTION:
** Campus Framework, a tiny portable GUI.
**
** FILE:
** campus_core.c - The Main Core.
**
** START: 09/05/2013 - 17:35
**
** BY: gokernel - gokernel@hotmail.com
**
**-------------------------------------------------------------------
*/

#include "campus.h"

//-------------------------------------------------------------------
// private struct:
//-------------------------------------------------------------------
struct OBJECT
{
short type; // TYPE_WINDOW, TYPE_CONTAINER, TYPE_BUTTON ...
short flags;
short id;
short key;
short x; // used to update ( rect )
short y; // used to update ( rect )
Rect rect; // real position and size in bitmap ... need update
Rect clip; // used for clipping ... need update

int (*proc) (OBJECT *o, int msg, int key);
int (*call) (OBJECT *o, int ev, int key);

OBJECT *parent;
OBJECT *first;
OBJECT *next;

void *data; // pointer to more object data
};

...




E este método é para "fuçar" os misteriosos ( HWND ) do windows ... DETONAR MESMO ;)







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts