使用在NASM中调用malloc返回的内存

时间:2011-04-05 03:23:11

标签: assembly malloc nasm

我正在使用nasm编译器将我的代码编译成目标文件,然后调用gcc的链接器链接该目标文件以创建最终的可执行文件。这意味着我可以访问C的运行时库。

我需要进行动态内存分配,所以我按照以下方式调用malloc

push 20 ;push amount of bytes malloc should allocate    
call _malloc ;call malloc
add esp,4 ;undo push

分配的内存地址在eax寄存器中返回,但是如何使用地址用值初始化该位置?

我的程序的目的是让用户指定他们想要输入多少个数字,然后为每个数字动态创建空间。理想情况下,我希望创建一个匹配用户指定的确切大小的数组,并能够遍历此数组。

2 个答案:

答案 0 :(得分:3)

使用malloc分配内存后,eax的值只是您可以使用的指针。例如,要将值写入前两个32位int,您可以执行以下操作:

mov dword ptr [eax], 0
mov dword ptr [eax + 4], 1

答案 1 :(得分:3)

push 20                ; push amount of bytes malloc should allocate    
call _malloc           ; call malloc
test eax, eax          ; check if the malloc failed
jz   fail_exit         ; 
add esp,4              ; undo push
mov [eax], dword 0xD41 ; 'A\n'

无论如何,我建议你看看this tutorial,它有非常有趣的东西:

  

该程序打印“Hello World”,使用malloc分配一些内存,使用该内存在屏幕上写入10个字母(使用printf),释放内存,然后返回。