我在寫一個C++內存分析器。在任何全局對象之前初始化
衆所周知,一個可執行程序可能包含許多全局對象,其DLL模塊可能包含全局對象,如 。這些全局對象將初始化爲CRT 初始化 - 在入口點之後和WinMain之前;對於DLL, 的入口點是_DllMainCRTStartup,在進入DllMain之前, 將初始化該DLL的所有全局對象。
全局對象可能會分配內存。因此內存分析器 必須在任何全局對象初始化之前初始化。在 做了大量的研究後,我發現這不是一件容易的事。
一個想法是使用CreateProcess和CREATE_SUSPENDED標誌 - 嘗試 以獲得第一次機會。之後,使用CreateRemoteThread在目標進程中調用 LoadLibrary來加載注入DLL,並且 初始化該DLL。但它不起作用because this will load all the implicit-linking DLLs of the executable program first.也許CreateRemoteThread觸發這種行爲?
那麼,我們如何獲得第一次機會呢?
我會繼續思考這個想法。也許initialize()加載mem.dll是不安全的,因爲my_alloc()將在初始化全局對象時被調用,它從入口點開始,是的 - 加載器鎖定可能導致死鎖。 – amanjiang