2016-06-12 2 views
0

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가 아닌 동일한 문자를 표시합니다. 하루 종일 이걸 보냈는데, 뭔가 분명하지 않습니까?

답변

0

좋아요. 제게는 하루 종일 걸렸습니다.하지만 문제를 발견했습니다. 콘솔 승리 32가 x64 버전의 라이브러리로 성공적으로 컴파일되고 프로그램의 절반이 충돌을 일으키지 않고 거의 완벽하게 실행되는 것이 이상합니다 (분해의 마지막 과정에서 실패했을 때만). 프로젝트의 소스 코드를 살펴보고 마침내 모든 cmake 빌드를 시도했습니다. 실제 문제는 cmake gui 프로그램의 stdcall 옵션이 선택되지 않았기 때문입니다. CMakeLists.txt 파일의 처음 몇 줄은 참고 : 프로젝트 가 cmake_minimum_required (BeaEngine) (버전 2.6)

세트 (CMAKE_MODULE_PATH "$ {CMAKE_SOURCE_DIR}/cmake")

세트 (CMAKE_VERBOSE_MAKEFILE ON)

옵션 옵션 옵션 (optBUILD_DLL "공유 객체 구축"OFF) (optBUILD_64BIT는 OFF "64 비트 실행 파일을 빌드") (ON "디버그 기호와 함께 구축"optHAS_SYMBOLS) 옵션 (OFF "ON 최적화를 돌려"optHAS_OPTIMIZED) 옵션 (optBUILD_STDCALL "

그러나이 라이브러리를 작동 시키려고하면 DLL-> ON STDCALL -> ON을 컴파일하는 동안이 2 가지 핵심 옵션을 사용해야합니다. msvc로 빌드하면 갈 수 있습니다.

관련 문제