Я пытался выделить память с помощью mmap , но пока не знаю, как это сделать правильно.Ниже вы можете увидеть написанную мной функцию, которая вызывается из C. Результат, который она выдает, всегда 197
, что совпадает с номером системного вызова.
Объявление C:
extern "C" void * ll_alloc ();
Определение сборки:
_ll_alloc:
sub rsp, 8
mov r9, 0
mov rdi, 0
mov rax, 197
mov rsi, 4096
mov r8, -1
mov rdx, 0x02 | 0x01
mov rcx, 0x1000 | 0x0001
syscall
add rsp, 8
ret
Я вызвал mmap напрямую из C, и все работает, как и ожидалось, я позвонил:
void * mem = mmap(NULL, 4096, PROT_WRITE | PROT_READ, MAP_ANON | MAP_SHARED, -1, 0);