Что определяет, какой `malloc` будет вызываться для внедренного кода? - PullRequest
0 голосов
/ 04 мая 2020

Я использую frida для подключения различных функций веб-браузера Firefox, работающего поверх Windows. Одним из символов, которые я подключил, был mozglue::malloc(), который вызывает распределитель jemalloc. В адресном пространстве процесса есть три символа malloc():

  1. In msvcrt.lib (stati c linking)
  2. In ucrtbase.dll для динамического c связывания
  3. Уже упоминалось в mozglue.dll

Я ожидал, что все выделения памяти, сделанные процессами Firefox, будут выделены mozglue::malloc() и, конечно, это верно случается.

Я не ожидал, что выделения памяти, сделанные агентом frida JS, который был внедрен в целевой процесс, также будут распределены с использованием jemalloc, и, честно говоря, я до сих пор не могу понять, почему.

Фрида не могла знать, что существует символ mozglue::malloc(), когда он впервые присоединяется к процессу, с точки зрения Фриды, существует простой вызов malloc(), так как и почему этот вызов перенаправляется из символов CRT по умолчанию в DLL Mozila? Вероятно, это как-то связано с дизайном PE, но я не могу это показать ...

Спасибо за любую помощь / понимание / ответ

1 Ответ

1 голос
/ 04 мая 2020

mozglue::malloc даже не должна быть единственной функцией, вызываемой внутри Firefox, потому что некоторые системные функции, вызываемые Firefox, будут использовать системный mallo c.

Я вижу только одно объяснение: Firefox заменяет исходные вызовы mallo c в памяти своей собственной версией mallo c. Проверка в исходном коде поддерживает эту идею: https://searchfox.org/mozilla-central/source/memory/build/replace_malloc.h

...