Matrox TripleHead2Go와 같은 플랫폼에서 3 중 모니터 윈도우 위치를 정정하기위한 전역 후크를 작성하고 있습니다. 32 비트 프로그램에서 지금까지 잘 작동하지만 지금은 64 비트 버전을 빌드해야합니다. 각 창 클래스에 설치 한 wndproc 썽크에 대한 x86 opcode를 번역 할 때 도움이 필요합니다.x86 opcode를 64bit 버전으로 변환
썽크는 원래의 wndproc 주소 인 wndproc 호출에 추가 인수를 추가합니다. 그러면 내 wndproc 처리기가 끝에 호출 할 수 있습니다.
#ifdef _WIN64
//TODO: figure out the WIN64 instructions
#else
const unsigned char PatchTemplate[] =
{
0x90, // nop, will become int3 if debug = true
0x58, // pop eax (get the return address)
0x68, 0x00, 0x00, 0x00, 0x00, // push imm32, original wndproc address
0x50, // push eax (restore the return address)
0x68, 0x00, 0x00, 0x00, 0x00, // push imm32, our wndproc address
0xC3 // retn
};
#define PATCH_ORIG_OFFSET 3
#define PATCH_NEW_OFFSET 9
#endif
우수한 감사합니다! 올바른 인수를 가진 winproc 프로토 타입과 추가 인수가 하나만 있다고 가정했습니다. 인수를 x64 플랫폼의 끝으로 옮기는 것은 문제가되지 않습니다. 귀하의 답변을 기꺼이 받아 들일 수는 있지만 기꺼이 괜찮다면 대신 인수를 추가하는 코드를 제공해주십시오. – Geoffrey
완료. 문제가있을 경우 알려 주시면 문제를 해결할 수 있습니다. – Jester
감사합니다. 내가 가진 한 가지 질문은 스택에 40 바이트를 할당하는 이유입니다. 정렬 요구 사항을 이해하지만 40 바이트가 필요한 이유를 이해하지 못합니다. – Geoffrey