У меня есть файл сборки без связанных библиотек на MacOs Catalina, который хочет вызвать mmap для динамического резервирования некоторой памяти. Я думал, что мне нужно сделать что-то вроде
#define __NR_mmap 0x20000c5
#define PROT_READ 0x01
#define PROT_WRITE 0x02
#define PROT_EXEC 0x04
#define PROT_ALL (PROT_READ | PROT_WRITE | PROT_EXEC)
#define MAP_ANON 0x1000
#define MAP_SHARED 0x0001
#define MAP_PRIVATE 0x0002
#define USER_DEFS_SIZE 0x20000
mov $__NR_mmap, %rax //mmap
xor %rdi,%rdi // start address
and $USER_DEFS_SIZE,%rsi // length
mov $PROT_READ, %rdx // rwx
mov $(MAP_ANON|MAP_SHARED),%rcx // flags
xor %r8,%r8 // file descriptor
xor %r9,%r9 // offset
syscall
, но это возвращает 0x13 (ENODEV) в% rax. Я попытался передать файловый дескриптор $ -1, но это дало мне ожидаемую ошибку «плохой файловый дескриптор». ]
Вопрос1: Что я делаю не так - как мне правильно вызвать mmap для резервирования памяти?
Вопрос2: как адрес возврата а эррно вернулся? Не могут ли оба ралли быть в% rax, или они могут? Я не уверен в соглашении о вызове.
Спасибо за помощь.