作者zha0 (這個帳號是掛網用)
站內LinuxDev
標題[問題] gdb 下斷點
時間Fri Feb 19 12:05:42 2010
; 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