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

发布于 2024-10-30 09:36:25 字数 385 浏览 4 评论 0原文

我使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

泪是无色的血 2024-11-06 09:36:25

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

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

After you have allocated memory with malloc, the value of eax is just a pointer you can use. For example, to write values to the first two 32-bit ints there, you can do:

mov dword ptr [eax], 0
mov dword ptr [eax + 4], 1
恍梦境° 2024-11-06 09:36:25
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'

不管怎样,我建议你看看这个教程,它有非常有趣的东西:

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

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'

Anyway, I suggest you to take a look at this tutorial, it has pretty interesting stuff:

This program prints "Hello World", allocates some memory using malloc, uses that memory to write 10 letters of the alphabet on the screen (using printf), frees the memory, and returns.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文