使用 NASM 中调用 malloc 返回的内存
我使用 nasm 编译器将代码编译成目标文件,然后调用 gcc 的链接器来链接该目标文件以创建最终的可执行文件。这意味着我可以访问 C 的运行时库。
我需要进行动态内存分配,因此我按如下方式调用 malloc
push 20 ;push amount of bytes malloc should allocate
call _malloc ;call malloc
add esp,4 ;undo push
分配的内存的地址在 eax 寄存器中返回,但是如何使用该地址用值初始化该位置?
我的程序的目的是让用户指定他们想要输入多少个数字,然后为每个数字动态创建空间。理想情况下,我希望创建一个与用户指定的确切大小相匹配的数组,并且能够迭代该数组。
I'm using the nasm compiler to compile my code into an object file then calling gcc's linker to link that object file to create the final executable. This means that I have access to the C's runtime libraries.
I need to do dynamic memory allocation so I'm making a call to malloc as follows
push 20 ;push amount of bytes malloc should allocate
call _malloc ;call malloc
add esp,4 ;undo push
The address of the memory allocated is returned in the eax register, but then how to I use the address to initialize that position with values?
The intention of my program is to have the user specify how many numbers they want to enter, then create space dynamically for each number. Ideally I'm hoping to create an array that matches the exact size specified by the user and be able to iterate through this array.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
使用
malloc
分配内存后,eax
的值只是一个可以使用的指针。例如,要将值写入其中的前两个 32 位int
,您可以执行以下操作:After you have allocated memory with
malloc
, the value ofeax
is just a pointer you can use. For example, to write values to the first two 32-bitint
s there, you can do:不管怎样,我建议你看看这个教程,它有非常有趣的东西:
Anyway, I suggest you to take a look at this tutorial, it has pretty interesting stuff: