Frage zu gdb: x/4x $eip (Intel-Syntax)
-
Hallo,
ich verstehe eine Ausgabe von gdb nicht.
Das ist das Programm. Simples Hello World.section .text global _start ;must be declared for using gcc _start: ;tell linker entry point mov edx, len ;message length mov ecx, msg ;message to write mov ebx, 1 ;file descriptor (stdout) mov eax, 4 ;system call number (sys_write) int 0x80 ;call kernel mov eax, 1 ;system call number (sys_exit) int 0x80 ;call kernel section .data msg db 'Hello, world!',0xa ;our dear string len equ $ - msg ;length of our dear string
GDB:
(gdb) set disassembly-flavor intel
(gdb) break _start
Breakpoint 1 at 0x8048080
(gdb) run
Starting program: /home/cg/root/demo
Breakpoint 1, 0x08048080 in _start ()
(gdb) info register $eip
eip 0x8048080 0x8048080 <_start>
(gdb) disassemble
Dump of assembler code for function _start:
=> 0x08048080 <+0>: mov edx,0xe
0x08048085 <+5>: mov ecx,0x80490a0
(gdb) x/4x $eip
0x8048080 <_start>: 0xba 0x0e 0x00 0x00Konkret geht es um die Ausgabe von "(gdb) x/4x $eip: 0xba 0x0e 0x00 0x00" Ist das die Hexadzimaldarstellung des Befehls "mov edx,0xe"? "x/4x" zeigt den Inhalt der Adresse von 0x08048080?
-
Ist das die Hexadzimaldarstellung des Befehls "mov edx,0xe"?
Ja.
"x/4x" zeigt den Inhalt der Adresse von 0x08048080?
Ja, die Bytes am aktuellen EIP (= 0x08048080).
-
Danke!!!