繁体   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