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

時間 2021-05-29 23:39:42

1樓:

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

)// call the original malloc

return

__libc_malloc

(size);}

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

2樓:秦冕

jemalloc

可以看一下他API中的mallctl,http://jemalloc.net/jemalloc.3.html#arena.i.chunk_hooks

3樓:陳碩

試試 tcmalloc 的 hook 。

商人是否有辦法做到在賺取更大的利潤的前提下不愧於良心,如果有應該如何做到?

亂明 我覺得應該達到一種平衡,因為如果不平衡生意不會做好做大。乙個好的商人擁有三種品質 1.周全。拿 紅樓夢 舉例,你回家半個多月了,想貨物也發完了,同你作買賣的夥計去,也該設桌酒宴請請他們,酬酬勞伐才是。這是薛姨媽教導薛蟠的。利益均霑,不能一味地剝削,在我得好處的同時,也要給你一點。如果他人一無所...

malloc和free是執行緒安全的嗎,在多執行緒開發時用這兩個函式應該注意什麼?

以下針對Windows 執行緒安全 Windows上VC的malloc呼叫的是HeapAlloc vista開始微軟把低碎片堆作為預設,效能不錯,產生的記憶體碎片也較少。注意事項的話主要是效能方面了。我覺得優化的話分為三個粒度。最大的粒度是從記憶體管理器級別,如google的tcmalloc,int...

是否有辦法為Notion頁面加密?

術業不精通 好問題,頁面加密這個其實更多的不是考慮黑客或者網路之間的洩露,而是考慮不同使用者在不小心開啟notion時,一些私密的介面是否應該加一些隱藏或者密碼之類的,例如別人有時會用完電腦,或者手機,難免有點錯進來時候或者其他場景之類的都需要,像iPhone備忘錄加密那樣就很好,即使備忘錄也有加密...