我正在寻找一些在 Linux 下使用汇编语言并使用系统调用而不是 malloc 和朋友的动态内存分配的好的代码示例。
有哪些最简单但有效的方法来做到这一点?
在 Intel 386+ 计算机上。
我正在寻找一些在 Linux 下使用汇编语言并使用系统调用而不是 malloc 和朋友的动态内存分配的好的代码示例。
有哪些最简单但有效的方法来做到这一点?
在 Intel 386+ 计算机上。
在 Linuxmmap2
上,这是一个合理的系统调用,可用于低级别。它需要 6 个参数,因此在 IA32 中您可以使用以下命令调用它:
mov eax, 192 ; mmap2
xor ebx, ebx ; addr = NULL
mov ecx, 4096 ; len = 4096
mov edx, $7 ; prot = PROT_READ|PROT_WRITE|PROT_EXEC
mov esi, $22 ; flags = MAP_PRIVATE|MAP_ANONYMOUS
mov edi, -1 ; fd = -1
xor ebp, ebp ; offset = 0 (4096*0)
int $80 ; make call
(有关参数传递的详细信息,请参见相关内核源代码)
我用 NASM 构建了它,并使用 验证了它的工作原理strace
,它产生了:
mmap2(NULL, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xf77ae000
另一种方法brk()
是使用mmap()
系统调用,使用MAP_ANONYMOUS | MAP_PRIVATE
.
使用 brk 系统调用来更改数据段的结尾。
看看这里:http ://www.linuxjournal.com/article/6390了解你在做什么。