64 비트 Windows에서 C++로 JIT 컴파일러를 작성하면 생성 된 코드에서 C++로 작성된 런타임 기능을 호출해야하는 경우가 있습니다. 지금은 VirtualAlloc(0, bytes, MEM_COMMIT, PAGE_EXECUTE_READWRITE)
으로 생성 된 코드를 배치 할 메모리를 할당하고 있습니다. 할당 된 메모리가 달리 실행 가능하지 않기 때문에 마지막 플래그가 중요합니다.코드 영역의 32 비트 변위 이내의 실행 가능 메모리
VirtualAlloc
은 64 비트 주소 공간의 어느 곳에서나 메모리를 반환 할 수 있습니다 (일반적으로 4GB 이상이 필요하므로 64 비트 주소 지정이 필요함).하지만 가장 효율적입니다. 형태의 x64 call
명령어는 32 비트 IP 상대 오프셋을 원하며 생성 된 코드의 양은 4 기가 바이트 미만이므로 C++에서 컴파일 된 코드의 32 비트 이동 내에서 위치를 찾는 것이 좋습니다.
방법이 있나요?