我有一个简单的x86汇编程序
.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
我对其进行了编译并在GDB中运行。然后,我尝试为
设置休息点movl $1, %eax
我使用:
(gdb)break *_start + 1
Breakpoint 1 at 0x4000b1: file VariableDemo.s, line 33.
这很好。但是如果我尝试过:
(gdb) break _start + 1
Function "_start + 1" not defined.
Make breakpoint pending on future shared library load? (y or [n]) n
在这种情况下,有和没有 *有什么区别?另外,为什么第二个GDB断点命令询问我有关共享库的信息?
break *_start 1在_main 1的地址放置一个断点。这是有效的位置。
没有_功能 GDB AFAIK中的位置的某些语法。很明显,它将整个" _main 1"作为函数名称(不确定语言允许使用)。因此,它查找了此" _main 1"功能,并且当时找不到它,它询问您是否应该在以后加载某些共享库时再次尝试。
在GDB手册中说明了指定位置的有效方法。