내 DLL에서 을 호출하고 싶은 실행 파일 내에 함수가 있습니다. OllyDbg에 따르면이 주소는 0x0090DE00
입니다. 내가 직접 전화를 시도했다 :로드 된 DLL에서 실행 파일에있는 함수를 호출하는 방법은 무엇입니까?
luaL__openlib *f = ((luaL__openlib*)(module_handle + 0x0090DE00));
을뿐만 아니라 here 제안으로의 모듈 핸들의 기지를 추가로 :
uint8_t * module_handle = (uint8_t *)GetModuleHandle(L"ForgedAlliance1.exe");
luaL__openlib *f = ((luaL__openlib*)(module_handle + 0x0090DE00));
내가 접근 할 수로이 작동하지 않은 것 같습니다 위반 예외 - 포인터가 유효하지 않은 것 같습니다.
So : 어떻게 주소를 사용하여이 함수를 호출 할 수 있습니까?
난 그냥 0x00C0B530
에서 간단한 RET
명령을 삽입했다. 지금과 같이 보이나요 내 코드는 다음과 같습니다
예외 ForgedAlliance1.exe에
0x909090C3
던져 : 나는 예외 메시지에서 다른 주소를 얻을 이유가 확실히 이해하지 못하는 어떤typedef void (*test)(); EXTERN_DLL_EXPORT void initialize(lua_State *L) { // Adding this should not be necessary. I get 0x00C0B530 from // OllyDbg where the offset 0x00401000 is included uint8_t * module_handle = (uint8_t *)GetModuleHandle(L"ForgedAlliance1.exe"); test *f = NULL; f = ((test*)(0x00C0B530)); (*f)(); // Crashing }
가
0xC0000005
: 액세스 위반 실행 위치0x909090C3
.
UPDATE : 나는 그냥 코드 자체
90 | NOP
90 | NOP
90 | NOP
C3 | RETN
입니다 내가 포인터로 뭔가를 엉망으로하고있다 보인다, 0x909090C3
여기에 단지 포인터 아니라는 것을 깨달았다. 왜 "위치"를 실행하려고합니까 0x909090C3
. 그것은 위치가 아닙니다.
olly를 검사 할 때 함수가'ForgedAlliance1.exe'가 사용하는 다른 모듈 안에 저장되지 않았는지 확인 했습니까? – Bauss
@Bauss 흠, 나는이 모든 것에 대해 조금 새로운 것이지만 어떻게 주소를 얻었는지 말할 수 있습니다 : 방금 실행 파일을 열었습니다. 디버깅 할 때 시작 주소는'0x00401000'입니다. 그래서 저는이 특정 창에서 볼 수있는 모든 것이 실행 파일이라고 가정합니다. 실행 파일의 어셈블리 코드에 몇 가지 변경 사항을 저장할 때마다 실행 파일'ForgedAlliance1.exe'를 덮어 씁니다. OllyDbg가 내 기억의 다른 영역을 표시하지 않는 한 주소는 정확해야하며 실행 파일의 일부 여야합니다. – displayname
이 기사를 보셨습니까? https://www.codeproject.com/articles/1045674/load-exe-as-dll-mission-possible – Alden