我需要知道从哪个变量编译obj文件中的二进制指令的寄存器。
简而言之:每条指令从寄存器到变量的映射
示例:假设 objdump 给出了一个 obj 文件片段:
MOV R1 5 # move 5 to register R1
SW R2 SP[-20] # store the value of R2 to address SP-20
我们怎么知道 R1 存储了源代码中的变量,比如var1 ?而 R2 存储var2?
我在readelf的文档中进行了搜索,不幸的是徒劳无功。
(虽然它可以为我提供源代码和二进制文件之间的线映射,但它对我没有进一步的帮助)
然后我搜索了一些 gcc 和链接器的调试选项。找到了一些有用的信息,但他们仍然没有解决我的问题。
我找到的信息是:
- 选项-fdump-rtl-vartrack可以跟踪所有变量,似乎很有用。但是在使用此选项进行编译时,我没有找到预期的 *.vartrack 转储文件。
- 选项*fdump-rtl-vartrack-uid显示每个变量的唯一 ID (DECL_UID)。但是我在使用时收到了这个错误:cc1: error: unrecognized command line option "-fdump-tree-uid"
- 选项fdump-rtl-lreg转储本地寄存器分配,但我看不出它如何告诉我从 reg 到变量的映射。
有没有人有一些经验或想法?
谢谢你们!
破解...