前幾天實現了vmmap類似的功能,就是每次記憶體分配釋放,都將其調用堆棧信息保存起來 已經生成了兩個文件,alloc.mapping和address.mapping,剩下的就是編寫工具解析這兩個文件了. 後續要做的:1.無需編譯,直接dll註入,開啟單獨線程寫上述兩個文件;2.編寫gui工具,指定時間... ...
前幾天實現了vmmap類似的功能,就是每次記憶體分配釋放,都將其調用堆棧信息保存起來
已經生成了兩個文件,alloc.mapping和
address.mapping,剩下的就是編寫工具解析這兩個文件了.
後續要做的:
1.無需編譯,直接dll註入,開啟單獨線程寫上述兩個文件;
2.編寫gui工具,指定時間段,實時查看每個分配點的調用堆棧信息;
實時記錄:
如何實時記錄所有記憶體分配釋放的信息而幾乎不影響性能?
1.使用minhook鉤住記憶體相關函數
2.產生非常簡短的消息,其中包括線程id,記憶體地址,記憶體大小,
還包括:當前的調用堆棧對應的指令地址(20個即可)
3.將消息投遞到一個單獨的消息隊列,共後臺線程分析
4.後臺線程做兩件事情:
1).將消息快速存儲起來,使用映射文件可以達到很高的速度
對應上面的alloc.mapping
2).對出現的指令地址,使用win32的符號相關api,獲取符號信息,
也保存到文件,對應上面的address.mapping
有了兩個文件,後續分析可以脫離符號文件pdb,直接進行分析各個時間段的記憶體使用情況;
還可以運行時分析,即另一個進程定時讀取此兩個文件來進行分析;