您當前的位置:首頁 > 書法

是否有辦法在malloc的hook函式中呼叫原生malloc?

作者:由 鬱白 發表于 書法時間:2017-02-12

是否有辦法在malloc的hook函式中呼叫原生malloc?陳碩2017-02-12 15:05:46

試試 tcmalloc 的 hook 。

https://

github。com/gperftools/g

perftools/blob/master/src/gperftools/malloc_hook。h

是否有辦法在malloc的hook函式中呼叫原生malloc?知乎使用者2017-02-12 15:24:51

可以參考 visual leak detect這個專案的思路,很輕量的方案。

是否有辦法在malloc的hook函式中呼叫原生malloc?Xi Yang2017-02-12 19:19:15

hook是你自己寫的嗎?

如果是,那執行緒問題可以粗暴地加個鎖。。。反正感覺你也是在做除錯。

是否有辦法在malloc的hook函式中呼叫原生malloc?知乎使用者2017-02-12 23:52:00

Detours不能做非stdcall的函式hook,所以題主就放棄熱補丁的方式吧,可以採用IAT hook,但是這也要求目標程式是採用動態連結CRT執行時庫編譯的,因為靜態連結的是不用把malloc函式的地址放在匯入表的。

當然啦,題主如果是要自己寫工具來分析堆記憶體的使用情況,並且是隻針對windows系統,那就不用去hook malloc這個函數了,C執行時庫函式最終都會呼叫對應實現平臺的系統API,windows上最終會呼叫

HeapAlloc

。所以你把Hook層次放低一點,然後就可以直接使用微軟的Detours庫來做了,穩定,高效。

給你個傳送門:Detours - Microsoft Research

不好意思之前的回答有點毛病。

但是貌似題主做的是Linux系統,所以以上全是廢話啦,不過辦法肯定是有的。

其實題主完全不必使用malloc hook,因為本身malloc也是一個weak symbol,所以你直接寫一個malloc同簽名的函式就行了,至於如何call原函式,可以透過符號 __libc_malloc,這個符號直接指向malloc的實現部分,透過這個符號呼叫就不會去call malloc_hook

extern

void

*

__libc_malloc

size_t

size

);

void

*

malloc

size_t

size

{

// do your stuff

{

}

// call the original malloc

return

__libc_malloc

size

);

}

當然還有更深入層次的辦法:

自己擼inline hook,關於Inline Hook可以補充點乾貨,實習時候做的PPT,年代比較久遠了。雖然是基於windows 平臺實現的,但是在彙編二進位制層面不分系統,原理全部一樣。

是否有辦法在malloc的hook函式中呼叫原生malloc?

是否有辦法在malloc的hook函式中呼叫原生malloc?

是否有辦法在malloc的hook函式中呼叫原生malloc?

是否有辦法在malloc的hook函式中呼叫原生malloc?

是否有辦法在malloc的hook函式中呼叫原生malloc?

是否有辦法在malloc的hook函式中呼叫原生malloc?

是否有辦法在malloc的hook函式中呼叫原生malloc?

是否有辦法在malloc的hook函式中呼叫原生malloc?

是否有辦法在malloc的hook函式中呼叫原生malloc?

是否有辦法在malloc的hook函式中呼叫原生malloc?

是否有辦法在malloc的hook函式中呼叫原生malloc?

是否有辦法在malloc的hook函式中呼叫原生malloc?

是否有辦法在malloc的hook函式中呼叫原生malloc?

是否有辦法在malloc的hook函式中呼叫原生malloc?

是否有辦法在malloc的hook函式中呼叫原生malloc?

是否有辦法在malloc的hook函式中呼叫原生malloc?

是否有辦法在malloc的hook函式中呼叫原生malloc?

是否有辦法在malloc的hook函式中呼叫原生malloc?

是否有辦法在malloc的hook函式中呼叫原生malloc?

是否有辦法在malloc的hook函式中呼叫原生malloc?

是否有辦法在malloc的hook函式中呼叫原生malloc?

是否有辦法在malloc的hook函式中呼叫原生malloc?

是否有辦法在malloc的hook函式中呼叫原生malloc?

是否有辦法在malloc的hook函式中呼叫原生malloc?

是否有辦法在malloc的hook函式中呼叫原生malloc?

是否有辦法在malloc的hook函式中呼叫原生malloc?

是否有辦法在malloc的hook函式中呼叫原生malloc?

是否有辦法在malloc的hook函式中呼叫原生malloc?

是否有辦法在malloc的hook函式中呼叫原生malloc?

是否有辦法在malloc的hook函式中呼叫原生malloc?

是否有辦法在malloc的hook函式中呼叫原生malloc?朱涵俊2017-02-23 22:50:13

可以用呼叫棧判斷是否重入。如果重入在鉤子裡直接返回。由於都是棧操作,執行緒安全的。

標簽: malloc  hook  題主  gperftools  Detours