如何在64中使用malloc和free
在64位NASM中,我使用C库中的malloc()分配一个8000字节的内存块,当我完成它时,我通过调用free()来释放它。
我的研究提出了很多关于如何在64位NASM中执行此操作的冲突信息,其中大部分信息是32位,其中调用约定不同,或者是C或C ++,而不是NASM。
我认为我有malloc的一部分,但我不确定免费的部分。 我发布这个问题是因为我不想测试它,并分配了内存块但未释放。
所以我的两个问题很简单:
(1)我对64位NASM有这个权利吗?
(2)在Windows和Linux中的语法是否相同?
我只显示我的程序的malloc和免费部分:
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
汇编语言没有标准库。 所以这不是一个汇编语言问题必然这是我有一套库符合这个调用约定或X编译器和版本与这样和那样的设置。 我想链接并使用汇编语言的这些库。 首先,首先用这种语言编写它,然后编译并保存临时文件或编译为程序集,然后从该代码开始。 或者反汇编这些代码以发现调用约定,并将其与您在使用此编译器阅读此目标平台调用约定时发现的内容进行比较。
如果这是一个系统调用,并且您想直接执行此操作,而不是库调用,那么您需要阅读此平台和操作系统的系统调用接口,没有理由假设任何两个都是相同的(Linux,BSD ,Windows等)。 也不是每个版本都是相同的,尽管它们可能是...
然后编写你的代码以符合你找到的任何一个。
链接地址: http://www.djcxy.com/p/80407.html上一篇: How to use malloc and free in 64
下一篇: C malloc and free