打印x86程序集而不是从ExecutionEngine获取机器代码

时间:2013-08-23 20:33:23

标签: llvm-c++-api

我已经看到了几个有关如何围绕Google搜索结果执行此操作的相互矛盾的描述,并且无法让其中任何一个工作。

我的问题基本上是这样的:我调用ExecutionEngine :: getPointerToFunction(带有llvm :: Function *),我想改为为这个函数生成漂亮的x86程序集。 / p>

任何人

[ETA:我使用LLVM 3.3。我发现的描述似乎适用于早期版本的LLVM。]

1 个答案:

答案 0 :(得分:0)

事实证明,您可以使用ExecutionEngine :: RegisterJITEventListener将事件侦听器添加到JIT ExecutionEngine。如果您提供该类的实例,则可以在为您生成机器代码时调用您的回调,并且您将获得指向机器代码及其长度的指针。有了这个,你可以调用llvm :: sys :: disassembleBuffer来获取机器代码缓冲区的描述。

但是,如果LLVM是使用该支持编译的,那么llvm :: sys :: disassembleBuffer函数只会延迟到udis库。由于我的LLVM构建没有设置此标志而我无法重建它,所以我将直接考虑直接使用udis库:

https://github.com/vmt/udis86