有和没有*之间的gdb断点行为

时间:2015-05-11 07:07:07

标签: assembly gdb

我有一个简单的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断点命令会问我关于共享库的问题?

1 个答案:

答案 0 :(得分:0)

break * _start + 1将断点放在_main + 1的地址。这是有效的位置。

Gdb AFAIK中没有_function + something语法。很明显,它需要一个完整的“_main + 1”作为函数名称(不确定哪种语言允许)。所以它查找这个“_main + 1”函数,因为它在那一刻找不到它,它会询问你是否应该在/稍后加载某个共享库时再试一次。

解释指定位置的有效方法in gdb manual