获取单个C函数的可执行二进制文件



我有一个简单的C函数,叫做add:

int add(int a, int b) {
return a + b;
}

我需要得到这个给定函数的优化的可执行二进制代码,而没有二进制的任何其他副作用。然后通过JIT系统动态加载和修改它以包含模板。我尝试过尝试使用objdump,但这并不能真正用于获取实际的二进制文件,因为对象文件不是实际的可执行文件。

我需要将函数的移动部分链接在一起,以便在运行时将它们的二进制文件包含在一起,并使PROT_EXEC能够将所有这些部分作为单个函数一起执行,并作为函数指针调用。我需要这样做的原因是因为我有一个字节指令编码类型,我希望将其动态地转换为JIT函数(类似于JIT将RegExp编译为验证器函数)。如果有其他可行的解决方案我应该考虑,请描述它们。

我想使用这种方法的主要原因是因为我可以看到godbolt显示了函数的二进制文件是自包含的,所以希望我可以做一些类似的事情,将二进制文件包含在我自己的项目中。

谢谢你的帮助。

注意:C函数是完全自包含的,不引用其他函数

最简单的方法是使用IDA。您可以将代码(最好带有符号)编译成ELF文件/EXE文件,并在IDA中打开生成的文件。您可以在函数窗口中看到您的函数,然后移动到十六进制窗口复制您的函数的十六进制转储。

注意:这里有很多事情可能会出错,例如,你必须用-PIC标志编译你的代码,这样它就不会使用绝对地址。

还建议至少了解基本的汇编。

这个链接可能会很有趣:https://github.com/Neetx/Shellcode-Extractor

最新更新