我正在寻找一些在Linux下使用汇编语言和使用系统调用的动态内存分配的好代码示例,而不是malloc和朋友。
要做到这一点,有哪些最简单但有效的方法?
在英特尔386+计算机上。
发布于 2012-12-13 06:57:34
在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
发布于 2010-05-07 14:10:08
brk()
的另一种替代方法是通过MAP_ANONYMOUS | MAP_PRIVATE
使用mmap()
系统调用。
https://stackoverflow.com/questions/2782010
复制相似问题