mik*_*yko -2 x86 assembly winapi masm heap-memory
我正在使用masm汇编程序,我正在使用kernel32.lib来创建堆内存,但是在HeapCreate过程的Windows API页面上,它并没有告诉我它的返回值存储在何处.(即堆的句柄)我会假设它存储在EAX
?因为大多数程序都将其返回值放入EAX
.在我调用HeapCreate之后,我调用HealAlloc在我的堆中分配一些内存:
INCLUDE \masm32\include\kernel32.inc
INCLUDELIB \masm32\lib\kernel32.lib
.CODE
PUSH DWORD PTR 00h ;max size
PUSH DWORD PTR 00h ;initial size
PUSH DWORD PTR 04h ;flOption
CALL HeapCreate
PUSH DWORD PTR 04h ;dwBytes (the size in bytes)
PUSH DWORD PTR 04h ;dwFlag
PUSH EAX ;I am not sure if the heap handle is stored in EAX or not?
CALL HeapAlloc
END
Run Code Online (Sandbox Code Playgroud)
基本上,我不知道HeapCreate
存储返回值的位置.如果有人能澄清在哪里,我会很感激.
谢谢
HeapCreate的MSDN页面为该函数提供了以下原型:
HANDLE WINAPI HeapCreate(
_In_ DWORD flOptions,
_In_ SIZE_T dwInitialSize,
_In_ SIZE_T dwMaximumSize
);
Run Code Online (Sandbox Code Playgroud)
所有x86调用约定都保留了返回值R/EAX
,因此HANDLE
可以在EAX
(在32位版本中)或RAX
(在64位版本中)中找到结果.