如何在64位NASM中使用malloc和free?

RTC*_*222 5 malloc free assembly x86-64 nasm

在 64 位 NASM 中,我使用 C 库中的 malloc() 分配 8000 字节的内存块,当我完成分配时,我通过调用 free() 来释放它。

我的研究提出了很多关于如何在 64 位 NASM 中执行此操作的相互矛盾的信息,并且许多信息是 32 位的,其中调用约定不同,或者是 C 或 C++,而不是 NASM。

我认为我的 malloc 部分是正确的,但我不确定 free 部分。我发布这个问题是因为我不想测试它并分配但未释放内存块。

所以我的两个问题很简单:
(1) 我是否有权利使用 64 位 NASM?
(2) Windows 和 Linux 的语法相同吗?

我仅显示程序的 malloc 和 free 部分:

extern malloc
extern free

push rdi

; Allocate the memory buffer
mov rdi,8000
call malloc
mov [array_pointer],rax ;array_pointer is initialized in .data

; Code that uses the buffer goes here.  

; Free the memory buffer
push rdi
call free
add rsp,8

pop rdi
ret
Run Code Online (Sandbox Code Playgroud)

old*_*mer -7

汇编语言没有标准库。所以这不一定是汇编语言问题,这是我有一组符合此调用约定或由 X 编译器和版本具有这样那样设置的库。我想链接并使用汇编语言中的这些库。首先,也是最重要的,只需用该语言编写它,然后编译并保存临时文件或编译为程序集,然后从该代码开始。或者反汇编此类代码以发现调用约定,并将其与使用此编译器阅读此目标平台的调用约定时发现的内容进行比较。

如果它是一个系统调用并且您想直接执行此操作,而不是库调用,那么您需要阅读该平台和操作系统的系统调用接口,没有理由假设任何两个是相同的(Linux,BSD 、Windows 等)。每个版本的主要版本也不相同,尽管它们可能是......

然后编写您的代码以符合您找到的任何内容。