mud*_*dge 23 linux assembly system-calls dynamic-memory-allocation
我正在寻找一些在Linux下使用汇编语言并使用系统调用的动态内存分配的良好代码示例,而不是malloc和朋友.
有哪些最简单但有效的方法呢?
在Intel 386+计算机上.
Fle*_*exo 11
在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
Run Code Online (Sandbox Code Playgroud)
(有关参数传递的详细信息,请参阅相关的内核源代码)
我用NASM构建了它并验证它是否有效strace,产生了:
mmap2(NULL, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xf77ae000
Run Code Online (Sandbox Code Playgroud)