我使用 nasm 编译器将代码编译成目标文件,然后调用 gcc 的链接器来链接该目标文件以创建最终的可执行文件。这意味着我可以访问 C 的运行时库。
我需要进行动态内存分配,因此我按如下方式调用 malloc
push 20 ;push amount of bytes malloc should allocate
call _malloc ;call malloc
add esp,4 ;undo push
分配的内存地址在 eax 寄存器中返回,但是如何使用该地址用值初始化该位置?
我的程序的目的是让用户指定他们想要输入多少个数字,然后为每个数字动态创建空间。理想情况下,我希望创建一个与用户指定的确切大小相匹配的数组,并且能够迭代该数组。
最佳答案
使用malloc
分配内存后,eax
的值只是一个可以使用的指针。例如,要将值写入其中的前两个 32 位 int
,您可以执行以下操作:
mov dword ptr [eax], 0
mov dword ptr [eax + 4], 1
关于assembly - 使用 NASM 中调用 malloc 返回的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5546839/