Visual Studio에서 BeaEngine을 올바르게 설정하는 데 큰 어려움을 겪었습니다. 나는 매우 빠르게 설치 프로세스를 요약한다 : cmake 3.6 64,은 SourceFile의 빌드 -> C를 :/사용자/ULYSSE/문서/beaengine 마스터 CmakeLogs을 : 완료 구성 생성 난을 연 후 을 수행 솔루션은 Visual Studio 내에서 .lib 및 .dll 파일을 얻기 위해 릴리스 모드로 컴파일됩니다. BeaEngine_stdcall_64.dll 및 BeaEngine_stdcall_64.lib. include 및 lib 폴더가 포함되어 있으며 Visual Studio 2015 x64 프로젝트 내에서 링커 -> input-> additionalnal 종속성에 lib 파일이 추가되었습니다. 이 프로젝트는 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의 저자가 제공 한 예제가 프로그램을 크래시 할 것이기 때문입니다. (거짓 EIP는 컴파일 된 프로그램이 0x401000부터 시작하지 않습니다.) EIP를 수정 했으므로 프로그램이 더 이상 충돌하지 않지만 글꼴을 인쇄 할 수없는 문자로 인쇄하고 내가 추가 한 printf는 항상 ASCII가 아닌 동일한 문자를 표시합니다. 하루 종일 이걸 보냈는데, 뭔가 분명하지 않습니까?