CPU / OS에 Execution Disable 비트가있는 경우 런타임 생성 머신 코드 (예 : JIT 출력과 같은)는 실제로 CPU에 의해 어떻게 실행됩니까?
내가 아는 한, 많은 최신 프로세서와 운영 체제에는 NX 비트 (Intel 및 ARM 포함)에 대한 지원이 포함되어 있어 컴파일 된 바이너리의 코드 섹션 이외의 다른 주소에 저장된 머신 코드가 실행되는 것을 방지합니다 . 분명히 이것은 쉘 코드 주입 공격을 막기 때문에 좋은 보안 이점입니다.
그러나 기계 코드를 동적으로 생성하는 LLVM과 같은 JIT 엔진은 어떻게이 문제를 해결합니까?
LLVM에서 어떻게 수행되는지 보려면 Memory :: allocateMappedMemory의 구현을 살펴보십시오. - * nix에서 스크립트를 들어 - Windows의
—
zr01