一种方法是先从ida找到malloc_trim函数,那么下面这个就是main_arena的偏移了
为什么呢,我们看看malloc_trim的源码
int
__malloc_trim (size_t s)
{
int result = 0;
if (__malloc_initialized < 0)
ptmalloc_init ();
mstate ar_ptr = &main_arena;
do
{
__libc_lock_lock (ar_ptr->mutex);
result |= mtrim (ar_ptr, s);
__libc_lock_unlock (ar_ptr->mutex);
ar_ptr = ar_ptr->next;
}
while (ar_ptr != &main_arena);
return result;
}
在导出表里面搜索malloc_hook
跟过去,在他下面+0x10的就是main_arena
其实方法很多,我们解引用一些这个地址,发现很多函数都会用到的,只要那个位置比较固定,我们就能找出来