我有一个目标文件(无法访问源文件)。
出于充分的原因,我需要复制一个呼叫路径。例如,此目标文件可能具有以下符号:
_FuncA _FuncB _FuncC
_FuncA
呼叫_FuncB
,依次呼叫_FuncC
。FuncC
可能会增加C源代码中定义的全局变量counter
。
我想修改这个目标文件和复制_FuncA
,_FuncB
和_FuncC
。
结果将是带有以下符号的目标文件:
_FuncA _FuncB _FuncC _FuncA_copy _FuncB_copy _FuncC_copy
_FuncA_copy
需要通话_FuncB_copy
,依次通话_FuncC_copy
。而且我_FuncC_copy
仍然需要引用相同的全局变量counter
并将其递增。
到目前为止,我有:
似乎该objcopy
命令将允许您使用flag添加新符号--add-symbol <name>=[<section>:]<value>[,<flags>]
。
这似乎是它会帮助我创造_FuncA_copy
,_FuncB_copy
,_FuncC_copy
。不过反正是有修改函数调用内部_FuncA_copy
到_FuncB
去_FuncB_copy
呢?
有一个更好的方法吗?
我发现的解决方案是编写LLVM Pass共享模块,该模块可以插入LLVM的优化器工具,该工具接收字节码对象并输出字节码对象。
http://llvm.org/docs/WritingAnLLVMPass.html
LLVM传递是可以创建的自定义优化器,并且可以在其中通过优化器循环所有函数符号,并根据需要对其进行重命名,并更新对该函数的所有引用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句