В 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
(подробности о передаче параметров см. В соответствующем источнике ядра )
Я построил это с помощью NASM и убедился, что он работает, используя strace
, который выдал:
mmap2(NULL, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xf77ae000