그러므로 모든 절대 메모리 참조가 파손됩니다 How do I determine if an EXE (or DLL) participate in ASLR, i.e. is relocatable?
ASLR이 자료 주소가 무작위 의미를 참조하십시오. 즉, 컴파일러와 링커가 기본 주소가 0x04000000이고 0x0400102F에 대한 절대 메모리 참조가 있다고 가정하지만 모듈이 실제로 0x05000000에로드되면 0x01000000을 0x0400102F를 참조하는 컴퓨터 코드에서 하드 코드 된 절대 주소에 추가해야합니다 이제 0x0400102F를 참조합니다. 이 코드 픽스 업은 기본 재배치라고하며, 실행 파일이로드 될 때 Windows 로더에 의해 수행됩니다. 장소는 논리적으로 읽을 수있는 경우에만 실행 파일에 포함됩니다.
파일 헤더의 특성 필드에 설정된 IMAGE_FILE_RELOCS_STRIPPED (0x0001) 비트 플래그가 설정된 경우이 실행 파일에는 재배치가 없으므로 헤더의 기본 주소 이외에는 배치 할 수 없습니다. 따라서 ASLR을 활성화하면 이 실행 파일은 메모리 참조가 올바르지 않기 때문에 중단됩니다. 또한로드 타임 재배치가 필요없이 메모리에 배치 된 위치에서 올바르게 실행되는 위치 독립적 코드를 작성할 수 있습니다. 내가 EDITBIN하지만 PowerShell을 사용하여 이러한 작업 및/NXCOMPAT 플래그를 모두 설정 한 회신에 대한
감사합니다 .. 여전히 [링크] (https://imgur.com/a/QFRLk) – john
@ 존 충돌한다 : 당신은 확신 그것은 64 비트/32 비트 문제가 아니에요? –
32 비트 Windows 8.1을 사용하고 있습니다. linux file 유틸리티를 사용하여 두 번 확인했습니다. "msgbox.exe : PE32 실행 가능 (콘솔) MS Windows 용"Intel 80386 (외부 PDB에서 벗겨짐) " – john