프로세스가 mmap을 사용하여 / proc / self / exe를 읽을 수 있습니까? 이 프로그램은 파일을 mmap하지 못합니다.
$ cat e.c
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>
int main()
{
int f=open("/proc/self/exe",O_RDONLY);
char*p=mmap(NULL,0,PROT_READ,0,f,0);
return 0;
}
$ cc e.c -o e
$ strace ./e
[snip]
open("/proc/self/exe", O_RDONLY) = 3
mmap(NULL, 0, PROT_READ, MAP_FILE, 3, 0) = -1 EINVAL (Invalid argument)
exit_group(0) = ?
+++ exited with 0 +++
여기서 두 가지 실수를하고 있습니다.
MAP_SHARED
) 또는 개인 ( MAP_PRIVATE
) 매핑 을 만들려면 지정해야 합니다.예를 들어 다음이 작동합니다.
char *p = mmap(NULL, 4096, PROT_READ, MAP_SHARED, f, 0);
전체 실행 파일을 매핑하려면 stat()
먼저 파일에 대한 작업을 수행 하여 올바른 파일 크기를 검색 한 다음이를에 대한 두 번째 매개 변수로 사용해야합니다 mmap()
.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다