我是LLVM的初学者。我想用“在堆栈上按下下一个指令地址,跳转到被调用函数”替换程序中的所有调用指令。那么有谁知道我可以在哪里实施这个替换?写一个pass并插入clang编译链?我该如何实施这个替换?
谢谢!
答案 0 :(得分:0)
我建议创建一个新的LLVM instrinsic。您必须为内在函数提供特定于目标的定义,以便编译器知道要生成的机器代码。在您的情况下,您将提供实现push + jump的特定于目标的定义。
获得内在函数后,您可以创建一个LLVM传递,在LLVM IR中搜索不到您的内在函数的所有call
指令,并将其替换为 你的内在。
添加新内在函数的文档:http://llvm.org/docs/ExtendingLLVM.html
有关如何实现自己的LLVM传递的教程:http://llvm.org/docs/WritingAnLLVMPass.html