我认为从模块转储.bc文件是一项微不足道的操作,但现在, 第一次我必须从代码中实际做到这一点,为了我的生命 在这个过程中找不到一个缺失的步骤:
static void WriteModule ( const Module * M, BitstreamWriter & Stream )
http://llvm.org/docs/doxygen/html/BitcodeWriter_8cpp.html#a828cec7a8fed9d232556420efef7ae89
编写该模块,首先我需要一个BistreamWriter
BitstreamWriter::BitstreamWriter (SmallVectorImpl< char > &O)
http://llvm.org/docs/doxygen/html/classllvm_1_1BitstreamWriter.html
对于BitstreamWriter,我需要一个SmallVectorImpl。但是,接下来呢? 我应该在a上逐字节写SmallVectorImpl的内容 文件处理程序自己这有一个llvm api吗?我需要什么吗 别的?
答案 0 :(得分:10)
WriteModule
功能在lib/Bitcode/Writer/BitcodeWriter.cpp
内静态,这意味着它不适合外部消费(您甚至无法访问它)。
同一个文件有另一个函数,名为WriteBitcodeToFile
,使用此接口:
/// WriteBitcodeToFile - Write the specified module to the specified output
/// stream.
void llvm::WriteBitcodeToFile(const Module *M, raw_ostream &Out);
我无法想象一个更方便的界面。顺便说一下,头文件声明为./include/llvm/Bitcode/ReaderWriter.h
。
答案 1 :(得分:1)
我使用以下代码:
std::error_code EC;
llvm::raw_fd_ostream OS("module", EC, llvm::sys::fs::F_None);
WriteBitcodeToFile(pBiFModule, OS);
OS.flush();
然后使用llvm-dis。
进行反汇编