在Mozilla Firefox Web浏览器中拦截动态内存分配调用

时间:2017-05-13 21:41:29

标签: linux firefox ld-preload

有没有办法拦截" malloc,realloc,calloc和free" Mozilla Firefox执行期间请求的操作? 我想做一些像使用LD_PRELOAD方法的方法,例如,在某些使用glibc的应用程序中可以拦截内存分配操作。我想跟踪这些操作。

我想在现代版本的Mozilla Firefox中实现这一点,如果可能的话。例如:

  

最新版本:FIREFOX_AURORA_54

1 个答案:

答案 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过滤输出,因为这里我们完成了整个过程树的调用。

请注意,此输出可能不完全准确:

  • 我希望自2013年最新ltrace版本发布以来ltrace不知道的动态链接器没有什么重大变化,但我不确定
  • 如果某些libc函数调用f.e. malloc,此调用可以静态执行。在这种情况下,你可能不会在输出中看到它
  • 对于某些函数,例如alloca我认为根本没有执行库调用