assembly - 使用 NASM 中调用 malloc 返回的内存

标签 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 寄存器中返回,但是如何使用该地址用值初始化该位置?

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

最佳答案

使用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/

相关文章:

c - 静态修饰符在 C 中如何工作?

c - free() 上的段错误指向 char* 的指针

assembly - 在 NASM 中的符号名称定义后使用或不使用冒号有区别吗?

c - GDB 在 PLT 部分显示不正确的跳转地址

performance - 哪个英特尔微体系结构引入了ADC reg,0单uop特殊情况?

无法弄清楚如何释放我的结构

c - 为什么我有时会得到不同的结果? [C语言]

gcc - 无法找到 crtn.o,在 64 位系统上链接 32 位代码

assembly - 为什么这个汇编语言程序以相反的顺序打印十六进制数字?

linux - x86 ASM Linux - 使用 .bss 部分