0

我使用 BeaEngine 反汇编我的 exe 文件,但我无法设置正确的 EIP,我的结果与 OllyDBG 结果不同

如何设置正确的 EIP ?

void dis()
{
    listBox1.Items.Add("Version: " + BeaEngine.Version);
    listBox1.Items.Add("Revision: " + BeaEngine.Revision);

    UnmanagedBuffer buffer = new UnmanagedBuffer(File.ReadAllBytes("JetAudio.exe"));

    var disasm = new Disasm();
    disasm.EIP = new IntPtr(buffer.Ptr.ToInt64() + 0x400);
    //disasm.EIP = new IntPtr( 0x401000);

    for (int counter = 0; counter < 100; ++counter)
    {
        int result = BeaEngine.Disasm(disasm);

        if (result == (int)BeaConstants.SpecialInfo.UNKNOWN_OPCODE)
            break;

        listBox1.Items.Add("0x" + disasm.EIP.ToString("X") + " "+disasm.CompleteInstr);

        disasm.EIP = new IntPtr(disasm.EIP.ToInt64() + result);
    }
}
4

1 回答 1

0

这里有很大的不同。

您正在将动态分析静态分析进行比较。

在我想解释什么是 EIP 之前,EIP 是扩展指令指针,它指向将由处理器运行的下一行。

我的意思是,反汇编程序不运行代码,所以你没有 EIP,因为代码没有由处理器运行。基本上他们所做的就是获取编译后的代码(机器代码)并将其直接从磁盘转换为程序集。

Ollydbg 动态地进行反汇编并运行代码,以便您可以操作代码,包括实际的 EIP。

我从未使用过 BeaEngine,但我认为这是你的问题。

于 2014-06-12T23:35:36.273 回答