看板 LinuxDev 關於我們 聯絡資訊
; hello.asm ; nasm -f elf -o hello.o hello.asm ; ld -o hello hello.o section .text global _start _start: mov edx, len mov ecx, msg mov ebx, 1 mov eax, 4 int 0x80 mov eax, 1 int 0x80 section .data msg db 'Hello world!', 0xa len equ $-msg ---------------------------------------------- [root@localhost ~]# readelf -h hello ELF Header: Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 Class: ELF32 Data: 2's complement, little endian Version: 1 (current) OS/ABI: UNIX - System V ABI Version: 0 Type: EXEC (Executable file) Machine: Intel 80386 Version: 0x1 Entry point address: 0x8048080 ........ ---------------------------------------------- [root@localhost ~]# gdb hello ... (gdb) disas 0x8048080 Dump of assembler code for function _start: 0x08048080 <_start+0>: mov $0xd,%edx 0x08048085 <_start+5>: mov $0x80490a0,%ecx 0x0804808a <_start+10>: mov $0x1,%ebx 0x0804808f <_start+15>: mov $0x4,%eax 0x08048094 <_start+20>: int $0x80 0x08048096 <_start+22>: mov $0x1,%eax 0x0804809b <_start+27>: int $0x80 End of assembler dump. (gdb) b *0x8048080 Breakpoint 1 at 0x8048080 (gdb) r Starting program: /root/hello (no debugging symbols found) Hello world! Program exited with code 01. (gdb) 為什麼在 0x8048080 下了斷點,但使用 r 執行都不會停在該斷點上呢 ? -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.165.125.96
zha0:一定要插 0xcc 在開頭嗎 ?___? 02/19 13:05
lungswu:b *0x8048085 這樣可以接受嗎? 02/20 18:15
zha0:因為對齊的關係嗎 ? 02/20 19:45
zha0:i r 02/20 19:47
zha0:eip 0x8048085 02/20 19:47
zha0:但用 (gdb) disas $eip 出來是從 80 開始 . 02/20 19:47
zha0:Dump of assembler code for function _start: 02/20 19:48
zha0:0x08048085 <_start+5>: mov $0x80490a0,%ecx 02/20 19:48
zha0:0x0804808a <_start+10>: mov $0x1,%ebx 02/20 19:48
zha0:0x08048080 <_start+0>: mov $0xd,%edx 02/20 19:49
lungswu:這單純為了解決不能在想要的地方中斷,在下一個指令下中斷 02/20 20:55
lungswu:於*0x8048085中斷,是*0x08048080已經執行,暫存器也已經 02/20 20:56
lungswu:更新,接著要執行0x08048085前 02/20 20:57
lungswu:至於為什麼不能被停止在*0x8048080,是個值得研究的課題 02/20 20:59