首页 > 解决方案 > 读取 /proc/PID/maps 的短期进程

问题描述

我有一个在执行后不久退出/段错误的二进制文件。我试图在它退出之前读取这个二进制文件的 /proc/PID/maps 但没有运气。

我试过cat /proc/($./binary [input] & echo $!)/maps应该导致 /proc/pidofprocess/maps 但总是得到 No such file or directory 。

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

标签: linuxmemorydebianprocaslr

解决方案


在整个结束之前,您的解决方案cat /proc/$(<pipeline>)/maps不会调用(即使您在其中使用),所以您永远不会得到您的.cat<pipeline>&maps

另一方面,

<pipeline> & cat /proc/${!}/maps

将立即返回。当然,当您的二进制文件立即退出时,cat可能仍然运行太晚而无法捕获 /proc/${!}/maps

但你可以尝试:

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

这会重新开始你binarycat整天之间的比赛,有时 cat可能会赢(在我的情况下,它确实是,ls <nonexisting file>而不是./binary30 次中的 1 次)

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

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

优雅的?不。有效:我希望如此!


推荐阅读