Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    10

    [C]Mapping in memoria di funzione

    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.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Ma a che scopo?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    10
    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.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    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 ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    10
    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.

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    10
    Dimenticavo...In pratica mi considera l'indirizzo di 24 bit e non di 32..

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    1) non devi assolutamente usare strcat

    2) cosa e' "buffer" ?

    3) perche' il ciclo va da 0 a 4 ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    10
    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...

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Devi scrivere solamente

    codice:
      char *b=buffer;
      for(i=0; i<4; i++, b+=4)
          memcpy(b, stringa, 4);
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    10
    Ora provo se funziona!!!!

    Grazie mille per l'aiuto...


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.