【问题标题】:nm versus gdb breaknm 与 gdb 中断
【发布时间】:2015-05-29 16:43:53
【问题描述】:

我正在开发 Ubuntu 14.04 LTS。

我有一个从file.c 编译的可执行文件execfile.c 使用静态库中的函数。例如,假设fubar()file.c 中使用的静态库的函数。 这是我注意到的。

  • nm exec | grep fubar 给出一定的值。
    (在我的系统和我的可执行文件中,0808377f
  • gdb ./exec 然后break fubar 给出不同的值。
    (在我的系统和我的可执行文件中,0x8083785

当我对另一个可执行文件执行类似操作时(exec1file1.c 编译,它为两个命令输出相同的值)。

这两个命令都应该输出相同的虚拟地址。不是吗?我显然错过了一些东西。有人可以解释到底发生了什么吗?这两个命令有什么区别。

【问题讨论】:

    标签: gdb virtual-address-space nm


    【解决方案1】:

    除非像-fPIE 这样不寻常的事情,这里发生的是gdb 命令break function 实际上意味着“在function 的函数序言之后中断”。这样,在断点被命中时,参数就被正确设置了。

    如果您想在函数的第一条指令处完全中断,请使用* 语法,例如:

    (gdb) break *function
    

    如果你这样做,地址可能会匹配。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-18
      • 2020-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-10
      相关资源
      最近更新 更多