我正在Ubuntu14.04LTS上工作。
我有一个从exec编译的可执行文件file.c。file.c使用静态库中的函数。例如,让我们假设fubar()是file.c中使用的静态库的一个函数。这是我注意到的。
nm exec | grep fubar给出了一定的值。
(在我的系统和我的可执行文件0808377f上)gdb ./exec和break fubar给出了不同的值。
(在我的系统和我的可执行文件0x8083785上)当我对另一个可执行文件(从exec1编译而来的file1.c )做类似的事情时,它会为这两个命令输出相同的值。
这两个命令都应该输出相同的虚拟地址。不是吗?很明显我漏掉了什么。有人能解释一下到底发生了什么吗?这两个命令之间的区别是什么。
发布于 2015-05-29 18:31:42
除了-fPIE这样不寻常的东西之外,这里要做的是gdb命令break function实际上意味着“function函数序言之后的中断”。这样,在命中断点时,就可以正确地设置参数。
如果要在函数的第一条指令处完全中断,请使用*语法,如下所示:
(gdb) break *function如果您这样做,地址可能会匹配。
https://stackoverflow.com/questions/30534879
复制相似问题