我正在使用nasm编译器将我的代码编译成目标文件,然后调用gcc的链接器链接该目标文件以创建最终的可执行文件。这意味着我可以访问C的运行时库。
我需要进行动态内存分配,所以我按照以下方式调用malloc
push 20 ;push amount of bytes malloc should allocate
call _malloc ;call malloc
add esp,4 ;undo push
分配的内存地址在eax寄存器中返回,但是如何使用地址用值初始化该位置?
我的程序的目的是让用户指定他们想要输入多少个数字,然后为每个数字动态创建空间。理想情况下,我希望创建一个匹配用户指定的确切大小的数组,并能够遍历此数组。
答案 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),释放内存,然后返回。