GDB断点行为与 *之间有或没有 *

  • 本文关键字:之间 断点 GDB assembly gdb
  • 更新时间 :
  • 英文 :


我有一个简单的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手册中说明了指定位置的有效方法。

最新更新