gpt4 book ai didi

c - 我将如何复制和重命名目标文件中的符号?

转载 作者:太空宇宙 更新时间:2023-11-04 03:14:10 24 4
gpt4 key购买 nike

我有一个目标文件(我无权访问其源代码)。

出于充分的理由,我需要复制调用路径。例如,此目标文件可能具有以下符号:

_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命令将允许您使用标志 --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 pass 是您可以创建的自定义优化器,在其中您可以让优化器循环遍历所有函数符号并根据需要重命名它们,并更新对该函数的所有引用。

关于c - 我将如何复制和重命名目标文件中的符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53548524/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com