nm与gdb中断

时间:2015-05-29 16:43:53

标签: gdb virtual-address-space nm

我正在研究Ubuntu 14.04 LTS。

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

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

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

两个命令都应该输出相同的虚拟地址。不是吗?我显然缺少一些东西。有人可以解释究竟发生了什么吗?两个命令之间有什么区别。

1 个答案:

答案 0 :(得分:2)

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

如果要完全断开函数的第一条指令,请使用*语法,如:

(gdb) break *function

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