PDA

Visualizza la versione completa : [C]Mapping in memoria di funzione


bongo
21-01-2008, 18:23
Salve a tutti..

Volevo chiedere se è posibile in C dire al compilatore di mappare una determinata funzione ad un inirizzo diverso. Mi spiego meglio. Nel mio programma è presente una funzione che stampa una stringa. Dopo aver compilato il tutto e fatto il disassemblato dell'eseguibile, vedo che la mia funzione viene chiamata all' indirizzo 004012D4.
Volevo chiedere quindi se si riesce a farla mappare ad esempio in 014012D4, in modo che la call venga eseguita appunto in 014012D4.

Spero di essermi spiegato. :)

Grazie mille anticipatamente per l'aiuto.

oregon
21-01-2008, 18:47
Ma a che scopo?

bongo
21-01-2008, 19:08
Semplicemente perchè vorrei richiamare la funzione tramite indirizzo di memoria. Mi serve per un progetto che sto facendo per l' università. L'indirizzo è a 32bit, quindi 00|40|12|D4.
Quando vado ad inserire in un array il valore hex 00 mi inserisce il valore null invece di 0. Quindi vorrei risolvere il problema alla radice se possibile mappando la funzione in un indirizzo diverso.
Evitando di dover inserire il valore 00.

oregon
21-01-2008, 19:10
Quello che hai scritto non l'ho capito interamente, ma ho capito che il tuo e' un problema risolvibile diversamente da come credi ...

NULL e 0 binario sono la stessa cosa, quindi non vedo il problema ...

Forse, se mostri il codice e indichi il problema, si fa prima a risolvere ...

bongo
21-01-2008, 19:19
Il pezzo di codice è questo:

char stringa[4];
stringa[0] = 0xD4;
stringa[1] = 0x12;
stringa[2] = 0x40;
stringa[3] = 0x00;

for(i=0;i<5;i++)
{
strcat(buffer,stringa);
}

Quando mi vado a creare un buffer in cui all' interno è contenuto l'indirizzo di memoria ripetuto, con 0x01 ottengo effettivamente la stringa di caratteri corrretta. Con 0x00, proprio perchè è null, mi vengono inseriti solamente i caratteri corrispondenti agli altri indirizzi. Per questo dicevo di mappare la funzione in un indirizzo diverso. Non mi veniva in mente altro modo di poter risolvere il problema.

bongo
21-01-2008, 19:21
Dimenticavo...In pratica mi considera l'indirizzo di 24 bit e non di 32..

oregon
21-01-2008, 19:22
1) non devi assolutamente usare strcat

2) cosa e' "buffer" ?

3) perche' il ciclo va da 0 a 4 ?

bongo
21-01-2008, 19:30
Si dimenticavo...
buffer è semplicemente un array.

char buffer[20];

volevo utilizzare il ciclo for con una strcat per copiare piu volte l' indirizzo nel buffer...
Quindi copiavo 4 volte l'indirizzo in buffer..

In effetti avevo pensato di fare anche cosi

for(i=0;i<20;i++)
{
if(i%4==0 && i!=0)
{
z=0;
}
buffer[i]=stringa[z];
z++;
}
Il problema rimane però..mi vede l'indirizzo sempre come un 24bit...

oregon
21-01-2008, 19:35
Devi scrivere solamente



char *b=buffer;
for(i=0; i<4; i++, b+=4)
memcpy(b, stringa, 4);

bongo
21-01-2008, 19:41
Ora provo se funziona!!!!

Grazie mille per l'aiuto...

:) :)

Loading