Linux下如何使用汇编和系统调用动态分配内存
我正在寻找一些在 Linux 下使用汇编语言和使用系统调用(而不是 malloc 和朋友)进行动态内存分配的良好代码示例。
有哪些最简单但有效的方法可以做到这一点?
在 Intel 386+ 计算机上。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我正在寻找一些在 Linux 下使用汇编语言和使用系统调用(而不是 malloc 和朋友)进行动态内存分配的良好代码示例。
有哪些最简单但有效的方法可以做到这一点?
在 Intel 386+ 计算机上。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(4)
在 Linux 上,
mmap2
是一个在低级别上用于此目的的合理系统调用。它需要 6 个参数,因此在 IA32 中您可以使用以下方式调用它:(请参阅 相关内核源代码了解参数传递的详细信息)
我使用 NASM 构建了它,并使用
strace
验证了它的工作原理,它产生了:On Linux
mmap2
is a sensible system call to use for this at a low level. It takes 6 arguments, so in IA32 you can call it using:(See the relevant kernel source for details on the parameter passing)
I built this with NASM and verified it worked using
strace
, which produced:brk(2)
。并查看 ELF。brk(2)
. And take a look at ELF.brk()
的替代方法是使用mmap()
系统调用,以及MAP_ANONYMOUS | MAP_PRIVATE
。An alternative to
brk()
is to use themmap()
system call, withMAP_ANONYMOUS | MAP_PRIVATE
.使用 brk 系统调用来更改数据段的末尾。
看一下这里:http://www.linuxjournal.com/article/6390 来了解你在做什么。
Use the brk system call to change the end of your data segment.
Take a look here: http://www.linuxjournal.com/article/6390 to understand what you're doing.