Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    127

    [C] "generare" codice binario di un programma

    Ciao a tutti,

    ho bisogno della vostra consulenza per risolvere un piccolo problemino.

    Ho un programma in assembly, scritto da me. Quindi ho i file .asm, .obj e .exe

    Dovrei scrivere una procedura C che "genera" (diciamo stampa), in formato esadecimale, il codice binario del primo programma.

    Ho fatto una prova aprendo il .exe con fopen (modalità rb), e a stampare a video il contenuto del file, ma i primi risultati non mi son sembrati troppo incoraggianti.

    Qualcuno saprebbe dirmi come procedere?

    Thanks

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [C] "generare" codice binario di un programma

    Originariamente inviato da Nov@lis
    Ciao a tutti,

    ho bisogno della vostra consulenza per risolvere un piccolo problemino.

    Ho un programma in assembly, scritto da me. Quindi ho i file .asm, .obj e .exe

    Dovrei scrivere una procedura C che "genera" (diciamo stampa), in formato esadecimale, il codice binario del primo programma.

    Ho fatto una prova aprendo il .exe con fopen (modalità rb), e a stampare a video il contenuto del file, ma i primi risultati non mi son sembrati troppo incoraggianti.

    Qualcuno saprebbe dirmi come procedere?

    Thanks
    Non devi stampare a video direttamente i caratteri del file (altrimenti rischi di stampare schifezze). Devi stampare il valore esadecimale. Con la printf usa lo specificatore di formato %02X e nota che devi fare la AND con 0xFF del valore. Il char è con segno, quindi se il byte fosse per esempio 0x8A, stamperesti FFFFFF8A!!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    127
    grazie per la risposta

    mi sto incasinando un pò tra fscanf, fgetc e compagnia cantante.

    In soldoni, cosa dovrei mettere al posto dei puntini?

    Codice PHP:

       
    if ((stream fopen("array.exe""rb")) == NULL)
       {
          
    printf("Non posso aprire il file.");
          exit(
    1);
       }
        else{
            while(!
    feof(stream))
            {
                ...............................
            }
        } 

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Guarda che, anche ammesso che tu inserisca il codice corretto per leggere il file .exe, non troveresti *soltanto* il codice binario del tuo programma, ma anche altri dati facenti parte della testata del file stessi.

    Vuoi visualizzare anche questi?

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    127
    so solo che devo generare il codice binario (è un esercitazione)...

    se non c'è altra soluzione, stamperò anche quelli, certo che se ci fosse la possibilità di stampare solo le istruzioni sarebbe decisamente meglio

    tra i tre file che ho a disposizione posso usare soltanto l'eseguibile o si riesce a tirar fuori qualcosa anche dal file oggetto?

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    No ... un attimo ...

    Che intendi per "tirare fuori le istruzioni"?

    Devi scrivere un disassembler?

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    127
    no no... nessun disassemblatore, mi sono espresso male

    devo stampare il codice binario (codice macchina, linguaggio macchina...chiamiamolo come vogliamo) di un programma assembler che ho scritto.

    come mi hai detto, nella stampa saranno comprese anche delle informazioni extra (header o simili). se c'è la possibilità di escluderli, ed isolare così la parte relativa al programma (cioè le istruzioni codificate in linguaggio macchina) ben venga... altrimenti stampiamo tutto e amen

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ma scusa, secondo te un disassemblatore che fa?

    Che intendi quindi con "codice macchina, linguaggio macchina" ...?

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    127
    il disassembler traduce dal linguaggio macchina all'assembly.

    io non devo recuperare le istruzioni che ho scritto (MOV, ADD eccetera), devo stampare direttamente il linguaggio macchina

    un esempio potrebbe essere questo :

    Codice PHP:
          55 8B EC 83 EC 04 56 57 1E B8 94 00 50 9A 
       0E 00 3C 17 59 59 16 8D 46 FC 50 1E B8 B1 00 50 
       9A 07 00 F0 17 83 C4 08 BE 01 00 EB 3B 1E B8 B4
       00 50 9A 0E 00 3C 17 59 59 16 8D 46 FE 50 1E B8
       C3 00 50 9A 07 00 F0 17 83 C4 08 FF 76 FE 9A 7C
       00 3B 16 59 8B F8 57 FF 76 FE 1E B8 C6 00 50 9A
       0E 00 3C 17 83 C4 08 46 3B 76 FC 7E C0 33 C0 50
       9A 0A 00 49 16 59 5F 5E 8B E5 5D CB 55 8B EC 56
       8B 76 06 83 FE 02 7E 1E 8B C6 48 50 0E E8 EC FF
       59 50 8B C6 05 FE FF 50 0E E8 E0 FF 59 8B D0 58
       03 C2 EB 07 EB 05 B8 01 00 EB 00 5E 5D CB 
    l'ho preso da http://www.itee.uq.edu.au/~cristina/dcc.html#example , quindi immagino che sia attendibile

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,318
    In pratica devi scrivere un visualizzatore esadecimale...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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 © 2025 vBulletin Solutions, Inc. All rights reserved.