Я столкнулся с серьезными проблемами, чтобы достичь того, что, по моему мнению, является правильной установкой BeaEngine с визуальной студией. я подведу процесс установки очень быстро: сборки с CMake 3.6 x64, ИСХ -> C:/Users/Ulysse/Документы/beaengine-мастер CmakeLogs: Конфигурирование сделано Генерирование сделано После чего я открыл решение в visual studio и скомпилировано в режиме выпуска для получения файлов .lib и .dll: BeaEngine_stdcall_64.dll и BeaEngine_stdcall_64.lib. Я включил папки include и lib и добавил файл lib в linker-> input-> дополнительные зависимости в моем проекте Visual Studio 2015 x64. Проект представляет собой 32-битное консольное приложение. Я сейчас пытаюсь запустить пример, взятый с сайта BeaEngine, собирает, он работает, но не обеспечивает правильный вывод разобранных инструкции, код здесь:Неправильно разобрать выход (BeaEngine)
int main(void)
{
/* ============================= Init datas */
DISASM MyDisasm;
int nfalse = 0, ntrue = 1;
int len, i = 0;
bool Error = nfalse;
/* ============================= Init the Disasm structure (important !)*/
(void)memset(&MyDisasm, 0, sizeof(DISASM));
/* ============================= Init EIP */
int n;
_asm
{
push eax
call get_eip
jmp out1
get_eip : mov eax, [esp]
ret
out1 :
mov n, eax
pop eax
}
MyDisasm.EIP = n; //0x401000;
/* ============================= Loop for Disasm */
while ((!Error) && (i<100)) {
len = Disasm(&MyDisasm);
if (len != UNKNOWN_OPCODE) {
puts(MyDisasm.CompleteInstr);
MyDisasm.EIP = MyDisasm.EIP + len;
cout << i << endl;
cout << MyDisasm.CompleteInstr << endl;
std::printf("%c", MyDisasm.CompleteInstr);
i++;
}
else {
Error = true;
}
};
Sleep(100000);
return 0;
}
Обратите внимание, что я должен был добавить встроенный ассемблер потому что пример, предоставленный автором BeaEngine, приведет к сбою программы (false EIP, поскольку моя скомпилированная программа никогда не начинается с 0x401000). Теперь, когда я исправил EIP, программа больше не сработала, но помещает отпечатки для печати непечатаемых символов, а добавляемый мной printf всегда показывает тот же символ (который не является ASCII). Провел целый день на этом, я пропустил что-то очевидное?