Linux 读取短期流程的/proc/PID/map

Linux 读取短期流程的/proc/PID/map,linux,memory,debian,proc,aslr,Linux,Memory,Debian,Proc,Aslr,我有一个二进制文件,在执行后不久退出/segfaults。我试图在二进制文件退出之前读取它的/proc/PID/maps,但没有成功 我尝试了cat/proc/($./binary[input]&echo$!)/maps,它应该会生成/proc/pidofprocess/maps,但总是没有这样的文件或目录 我的目标是查看在后续运行中加载到哪里。您的解决方案cat/proc/$()/maps在整个结束之前不会调用cat(即使您在其中使用&),因此您永远不会得到映射 另一方面, <pipel

我有一个二进制文件,在执行后不久退出/segfaults。我试图在二进制文件退出之前读取它的/proc/PID/maps,但没有成功

我尝试了
cat/proc/($./binary[input]&echo$!)/maps
,它应该会生成/proc/pidofprocess/maps,但总是没有这样的文件或目录


我的目标是查看在后续运行中加载到哪里。

您的解决方案
cat/proc/$()/maps
在整个
结束之前不会调用
cat
(即使您在其中使用
&
),因此您永远不会得到
映射

另一方面,

<pipeline> & cat /proc/${!}/maps
这将重新启动您的
binary
cat
之间的比赛,有时
cat
可能会赢(在我的情况下,它会赢
ls
而不是
/binary
30次中的1次)

这会在终端上打印大量垃圾,但您可以通过重定向
cat
s输出来收集成功的地图:

while true; do; ./binary [input] & cat /proc/${!}/maps >> mymaps; done

优雅?不,我希望如此

您应该为此使用
gdb
。gdb如何给我这个输出?同样,在gdb中,内存随机化也不会被关闭吗?Ie不总是在同一个地方加载吗?@iControlEIP如果您从gdb运行它,它将在SIGSEGV上停止,然后您可以以您认为合适的任何方式读取它的
/proc/PID/maps
;-)@IControlEIP:gdb内存随机化是
(gdb)info proc mapping
将在您真正需要时提供此功能
while true; do; ./binary [input] & cat /proc/${!}/maps >> mymaps; done