Каков правильный EIP для дизассемблера BeaEngine?

я использую 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);
    }
}

person Hadi Ranji    schedule 11.04.2014    source источник


Ответы (1)


Здесь есть большая разница.

Вы сравниваете динамический анализ со статическим анализом.

Прежде чем я объясню, что такое EIP, EIP — это расширенный указатель инструкций, который указывает на следующую строку, которая будет выполняться процессором.

Я имею в виду, что дизассемблеры не запускают код, поэтому у вас нет EIP, потому что код не запускается процессором. в основном они берут скомпилированный код (машинный код) и транслируют его в сборку прямо с диска.

Ollydbg выполняет эту дизассемблирование динамически и запускает код, чтобы вы могли манипулировать кодом, включая фактический EIP.

Я никогда не пользовался BeaEngine, но думаю, что это ваша проблема.

person Ollegn    schedule 12.06.2014