我正在寻找一些在 Linux 下使用汇编语言和使用系统调用而不是 malloc 和 friend 的动态内存分配的好代码示例。
有哪些最简单但有效的方法可以做到这一点?
在 Intel 386+ 计算机上。
最佳答案
在 Linux 上,mmap2
是一个明智的系统调用,可用于低级别。它需要 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
(有关参数传递的详细信息,请参阅 relevant kernel source)
我用 NASM 构建了这个,并使用 strace
验证了它的工作,它产生了:
mmap2(NULL, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xf77ae000
关于linux - 如何在 Linux 下使用汇编和系统调用动态分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2782010/