我在程序的调试信息文件上使用objdump -t
查找每个函数的地址范围。有一些函数的边界无法使用此方法确定。因为objdump
报告了0
的大小。这些符号如下所示:
deregister_tm_clones 0000000000197ce0
register_tm_clones 0000000000197d20
__do_global_dtors_aux 0000000000197d70
frame_dummy 0000000000197db0
_fini 00000000004e9474
_init 00000000001889e8
如何确定尺寸?我只能想象在起始地址上使用GDB
disas
命令并找到该函数反汇编的结尾。这可能并非在所有情况下都有效。什么是标准方法?
更新:
我正在实现Pintool
以便在运行时生成调用栈。我只需要某些二进制文件中的符号。换句话说,我需要将函数的子集(例如GTK
库中的函数)包含在调用堆栈中。因此,在运行时,我将需要这些库的范围。
另一方面,我需要符号的范围才能找到其输出跳转。这是取消尾调用的标志,需要堆栈更新
。