📌

Xbyakで生成したコードをファイルに出して逆アセンブルする

2024/05/24に公開

XbyakはJITアセンブラで、デバッグが大変。生成されたコードを逆アセンブルして見るのも、普通のAOTコンパイラと比べるとちょっと工夫がいる。

https://github.com/herumi/blog/blob/main/jit-debug.md#逆アセンブル で解説されている通りだけど、メモを残しておく。

getCodegetSize 分だけバイナリとして適当なファイルに出しておく。

    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