[問題] gdb 下斷點

看板LinuxDev作者 (這個帳號是掛網用)時間16年前 (2010/02/19 12:05), 編輯推噓2(2012)
留言14則, 2人參與, 最新討論串1/2 (看更多)
; 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

02/19 13:05, , 1F
一定要插 0xcc 在開頭嗎 ?___?
02/19 13:05, 1F

02/20 18:15, , 2F
b *0x8048085 這樣可以接受嗎?
02/20 18:15, 2F

02/20 19:45, , 3F
因為對齊的關係嗎 ?
02/20 19:45, 3F

02/20 19:47, , 4F
i r
02/20 19:47, 4F

02/20 19:47, , 5F
eip 0x8048085
02/20 19:47, 5F

02/20 19:47, , 6F
但用 (gdb) disas $eip 出來是從 80 開始 .
02/20 19:47, 6F

02/20 19:48, , 7F
Dump of assembler code for function _start:
02/20 19:48, 7F

02/20 19:48, , 8F
0x08048085 <_start+5>: mov $0x80490a0,%ecx
02/20 19:48, 8F

02/20 19:48, , 9F
0x0804808a <_start+10>: mov $0x1,%ebx
02/20 19:48, 9F

02/20 19:49, , 10F
0x08048080 <_start+0>: mov $0xd,%edx
02/20 19:49, 10F

02/20 20:55, , 11F
這單純為了解決不能在想要的地方中斷,在下一個指令下中斷
02/20 20:55, 11F

02/20 20:56, , 12F
於*0x8048085中斷,是*0x08048080已經執行,暫存器也已經
02/20 20:56, 12F

02/20 20:57, , 13F
更新,接著要執行0x08048085前
02/20 20:57, 13F

02/20 20:59, , 14F
至於為什麼不能被停止在*0x8048080,是個值得研究的課題
02/20 20:59, 14F
文章代碼(AID): #1BVWuPEv (LinuxDev)
討論串 (同標題文章)
以下文章回應了本文
完整討論串 (本文為第 1 之 2 篇):
2
14
文章代碼(AID): #1BVWuPEv (LinuxDev)