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 0x00

    Konkret 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!!!


Log in to reply