8

モジュールから .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 が必要です。でも、次は?SmallVectorImpl の内容を自分でファイル ハンドラに 1 バイトずつ書き込む必要がありますか? これのためのllvm APIはありますか? 他に何か必要ですか?

4

2 に答える 2

13

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

于 2012-12-17T14:05:16.647 に答える
0

私は次のコードを使用します:

std::error_code EC;
llvm::raw_fd_ostream OS("module", EC, llvm::sys::fs::F_None);
WriteBitcodeToFile(pBiFModule, OS);
OS.flush();

次に、llvm-dis を使用して逆アセンブルします。

于 2016-07-01T18:19:35.650 に答える