📌
Xbyakで生成したコードをファイルに出して逆アセンブルする
XbyakはJITアセンブラで、デバッグが大変。生成されたコードを逆アセンブルして見るのも、普通のAOTコンパイラと比べるとちょっと工夫がいる。
https://github.com/herumi/blog/blob/main/jit-debug.md#逆アセンブル で解説されている通りだけど、メモを残しておく。
getCode
を getSize
分だけバイナリとして適当なファイルに出しておく。
JITCompiler::Func fn = getCode<JITCompiler::Func>();
size_t codeSize = getSize();
std::ofstream outFile("jit_code.bin", std::ios::binary);
if (!outFile) {
throw std::runtime_error("Failed to open file for writing.");
}
outFile.write(reinterpret_cast<const char*>(getCode()), codeSize);
outFile.close();
return fn;
そんで、それをあとから objdump する。
objdump -D -b binary -m i386:x86-64 jit_code.bin
Discussion