Какой правильный 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);
}
}
1 ответ
Здесь есть большая разница.
Вы сравниваете динамический анализ со статическим анализом.
Прежде чем я хочу объяснить, что такое EIP, EIP - это расширенный указатель инструкций, который указывает на следующую строку, которая будет выполняться процессором.
Я имею в виду, что дизассемблеры не запускают код, поэтому у вас нет EIP, потому что код не запускается процессором. в основном они берут скомпилированный код (машинный код) и переводят его в сборку прямо с диска.
Ollydbg выполняет эту разборку динамически и запускает код, чтобы вы могли манипулировать кодом, включая фактический EIP.
Я никогда не использовал BeaEngine, но я думаю, что это ваша проблема.