首页 > 解决方案 > 是什么决定了注入代码将调用哪个`malloc`?

问题描述

我正在使用 frida 来挂钩在 Windows 上运行的 Firefox Web 浏览器的各种功能。我上钩的符号之一是mozglue::malloc()调用jemalloc分配器。在进程地址空间中有三个malloc()符号:

  1. msvcrt.lib(静态链接)
  2. 用于ucrtbase.dll动态链接
  3. 中已经提到mozglue.dll

我期待 Firefox 进程所做的所有内存分配都将由 分配mozglue::malloc(),当然这确实发生了。

我没想到注入到目标进程的 frida JS 代理进行的内存分配也会使用 分配jemalloc,老实说我仍然不知道为什么。

frida 在第一次附加到进程时不可能知道有一个mozglue::malloc()符号,从 frida 的角度来看,有一个简单的调用malloc(),那么这个调用是如何以及为什么从默认的 CRT 符号重定向到 Mozila dll 的?这可能与PE设计有关,但我不能指望它......

感谢您的任何帮助/见解/回答

标签: mallochookcode-injectiondynamic-linkingfrida

解决方案


mozglue::malloc甚至不应该是 Firefox 内部调用的唯一函数,因为 Firefox 调用的某些系统函数将使用系统 malloc。

我只看到一种解释:Firefox 用它自己的 malloc 版本替换了内存中的原始 malloc 调用。检查源代码支持这个想法:https ://searchfox.org/mozilla-central/source/memory/build/replace_malloc.h


推荐阅读