0
내일 시험을 위해 공부하고 나는이 질문을 가로 질러 : "libc.so mmap에 strace를
- 개방 (우리가 strace를 다음과 콜와 실행 파일을 실행 한 후
표준 C lib 디렉토리에 관한 및 결과 /lib/libc.so.6 ","O_RDONLY ") = 3
- 의 mmap (NULL, 36803630, PROT_READ | PROT_EXEC, MAP_PRIVATE | MAP_DENYWRITE, 3, 0) = 0x7f312ab35000
- 의 mmap (0x7f312aeae000, 20480, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_FIXED | MAP_DENYWRITE, 3 , 0x179000는) = 0x7f312aeae000
의 mmap의 첫 번째 콜이 PROT_READ 사용하지 왜 질문은 | PROT_EXEC와 두 번째 PROT_READ | PROT_WRITE를.
각 mmap 호출 후 어떻게되는지 자세히 설명해주십시오. 왜 프로세스가 libc (쓰기 액세스)를 수정해야하는지 이해할 수 없습니다.
왜 PROT_EXEC가 사라 집니까? –
데이터를 실행할 필요가 없습니다. 코드가 아니라 데이터입니다. 쓰기 가능한 메모리를 실행 가능하게 만드는 것은 보안 위험으로 간주됩니다. 공격자가 코드를 넣을 수있게함으로써 임의의 코드 실행으로 높아질 수있는 취약점을 확장하기 때문입니다. 많은 견고한 시스템은 메모리를 매핑 할 수 없으며 동시에 두 가지 실행 권한을 씁니다. –