簡體   English   中英

x86 EXE中是否存在分配winapi調用?

[英]Is there an allocate winapi call in x86 EXEs?

在C ++編譯的EXE中如何處理分配? 如果沒有代碼,分配管理器是否已嵌入應用程序中,從而無法跟蹤分配/取消分配? 還是有WinAPI調用或類似的內存分配方法?

通常,分配功能由C運行時庫提供 該庫又由您的供應商編寫。 Microsoft的Visual C ++大概將使用Windows內核例程來實現分配,但是您應該檢查文檔和/或詢問您的供應商。

通常兩者都有。 普通代碼通過內置在標准庫中的堆管理器分配內存。 反過來,這又從OS分配了較大的內存塊,然后允許其余代碼從該大塊中分配較小的內存。

堆管理器實際上是否在應用程序中取決於它的編譯和鏈接方式。 如果它使用DLL中的標准庫,那么它將使用標准庫DLL中的代碼。 如果將其靜態鏈接到標准庫,則堆管理器代碼將鏈接到可執行文件本身。

內存分配的基礎確實是一些WinAPI調用(通常是Heap功能)。 這些被“隱藏”在operator newmalloc和其他相關功能的后面。 您應該能夠識別對堆函數的調用,但是在原始堆和實際內存分配調用之間可能存在幾層函數。

編輯:顯然,如果程序被編譯為使用C運行時作為.DLL,則實際執行分配的代碼根本不在可執行文件中,而是在DLL中。

當然,編寫該代碼的程序員很可能會:1.不使用C / C ++,在這種情況下,所有選擇都掉了。 2.以某種方式編寫自己的內存管理版本,例如使用VirtualAlloc

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM