0

我正在开发 Ubuntu 14.04 LTS。

我有一个execfile.c. 使用file.c静态库中的函数。例如,假设它fubar()file.c. 这是我注意到的。

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

exec1当我对另一个可执行文件(编译自file1.c,它为两个命令输出相同的值)做类似的事情时。

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

4

1 回答 1

2

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

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

(gdb) break *function

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

于 2015-05-29T18:31:42.930 回答