有没有办法拦截" malloc,realloc,calloc和free" Mozilla Firefox执行期间请求的操作? 我想做一些像使用LD_PRELOAD方法的方法,例如,在某些使用glibc的应用程序中可以拦截内存分配操作。我想跟踪这些操作。
我想在现代版本的Mozilla Firefox中实现这一点,如果可能的话。例如:
最新版本:FIREFOX_AURORA_54
答案 0 :(得分:0)
据我所知,如果您只需要跟踪库调用而不是以某种非平凡的方式拦截它们,您可以使用ltrace。虽然,我不熟悉这个实用程序,所以我的例子可能不是绝对正确的。
您可以像ltrace -e malloc+free gcc
一样运行它,它将跟踪gcc
对这两个函数的调用。但至少在我的系统上,这种简单的方法对Firefox不起作用:
$ ltrace -e malloc+free firefox
"/usr/bin/firefox" is not an ELF file
这是因为/usr/bin/firefox
只是一个启动真实二进制文件的shell脚本。所以我们需要使用这样的命令(当然,指定你需要跟踪的函数):
$ ltrace -f -e malloc+free sh /usr/bin/firefox
首先,您将脚本作为sh /usr/bin/firefox
运行,然后您需要指定-f
选项,因为您不想对shell执行的调用感兴趣,而是对其子进程感兴趣。但是,您需要通过PID过滤输出,因为这里我们完成了整个过程树的调用。
请注意,此输出可能不完全准确:
ltrace
版本发布以来ltrace
不知道的动态链接器没有什么重大变化,但我不确定libc
函数调用f.e. malloc
,此调用可以静态执行。在这种情况下,你可能不会在输出中看到它alloca
我认为根本没有执行库调用