Come ottenere informazioni da objdump
Domanda
ho incontrato un problema durante la lettura dati scaricati fuori da un file eseguibile in linux. L'informazione è il seguente:
804a0ea: 04 08 add $0x8, %al
...
804a0f4: a6 cmpsb %es:(%edi),%ds:(%esi)
Ho due domande:
- Che cosa significa il 804a0ea indirizzo e 804a0f4 significano? l'indirizzo virtuale nello spazio degli indirizzi del processo?
- Che cosa fa il ... significa? come posso ottenere istruzione a indirizzo 804a0f0?
Grazie in anticipo.
Maggiori informazioni intorno a questa parte di codice:
Disassembly of section .got.plt:
0804a0e8 <_GLOBAL_OFFSET_TABLE_>:
804a0e8: 14 a0 adc $0xa0,%al
804a0ea: 04 08 add $0x8,%al
...
804a0f4: a6 cmpsb %es:(%edi),%ds:(%esi)
804a0f5: 87 04 08 xchg %eax,(%eax,%ecx,1)
804a0f8: b6 87 mov $0x87,%dh
804a0fa: 04 08 add $0x8,%al
804a0fc: c6 87 04 08 d6 87 04 movb $0x4,-0x7829f7fc(%edi)
804a103: 08 e6 or %ah,%dh
804a105: 87 04 08 xchg %eax,(%eax,%ecx,1)
804a108: f6 87 04 08 06 88 04 testb $0x4,-0x77f9f7fc(%edi)
804a10f: 08 16 or %dl,(%esi)
804a111: 88 04 08 mov %al,(%eax,%ecx,1)
804a114: 26 88 04 08 mov %al,%es:(%eax,%ecx,1)
804a118: 36 88 04 08 mov %al,%ss:(%eax,%ecx,1)
804a11c: 46 inc %esi
La speranza qualcuno può darmi una mano: -).
Soluzione
Il tabella correzioni globale non è orientata al codice, è indicando i dati (HRM ... offset, in realtà). Quindi, cercare di smontarlo non darà codice molto significativo. (Si può effettivamente trovare che compensa, guardando i valori di codice. 0804a014, ... 080487a6).
Il ... di solito significa un mucchio di 0 sono nel flusso.
Altri suggerimenti
- Copia solo il codice assembly per l'editor di testo
- Al primo tipo linea principale: (assemblaggio per main ())
- e salvare il file come un .s *
- Apri terminale e digitare gcc -o -s per compilare o digitare terminale gdb e quindi digitare il layout asm e digitare quindi stampare
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow