我有一个简单的x86汇编程序
# content of setup.cfg
# can also be defined in in tox.ini or pytest.ini file
[pytest]
python_files=check_*.py
python_functions=*_spec
我编译了它并在gdb中运行它。然后我试着为
设置断点.data
HelloWorld:
.ascii "Hello World!"
ByteLocation:
.byte 10
Int32:
.int 2
Int16:
.short 3
Float:
.float 10.23
IntegerArray:
.int 10,20,30,40,50
.bss
.comm LargeBuffer, 10000
.text
.globl _start
_start:
nop
# Exit syscall to exit the program
movl $1, %eax
movl $0, %ebx
int $0x80
我用:
movl $1, %eax
这很好用。但是,如果我尝试:
(gdb)break *_start + 1
Breakpoint 1 at 0x4000b1: file VariableDemo.s, line 33.
在这种情况下,有和没有*有什么区别?另外为什么第二个gdb断点命令会问我关于共享库的问题?
答案 0 :(得分:0)
break * _start + 1将断点放在_main + 1的地址。这是有效的位置。
Gdb AFAIK中没有_function + something语法。很明显,它需要一个完整的“_main + 1”作为函数名称(不确定哪种语言允许)。所以它查找这个“_main + 1”函数,因为它在那一刻找不到它,它会询问你是否应该在/稍后加载某个共享库时再试一次。
解释指定位置的有效方法in gdb manual。