可以使用mmap讀取/ proc/self/exe進程嗎?此程序無法的mmap文件:can/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 +++
可能重複[讀寫mmap的無效參數?](http://stackoverflow.com/questions/18420473/invalid-argument-for-read-write-mmap) – usr
你可以映射相同的文件,如果你在程序開始時通過映射作爲程序文件名的'main()''argv [0]'來完成。 –
@LuisColorado,argv [0]有時是程序文件的名稱,除非它在$ PATH –