HeapCreate是否将堆句柄返回到EAX?

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存储返回值的位置.如果有人能澄清在哪里,我会很感激.

谢谢

zx4*_*485 5

HeapCreateMSDN页面为该函数提供了以下原型:

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位版本中)中找到结果.