Skip to content
Syscall BSD#197

svc · unix #197

mmap

Mappe un fichier ou de la mémoire anonyme dans l'espace d'adressage du processus appelant.

Prototype

user_addr_t mmap(caddr_t addr, size_t len, int prot, int flags, int fd, off_t pos);

Retour: user_addr_t

Arguments

NameTypeDirDescription
addrcaddr_t-
lensize_t-
protint-
flagsint-
fdint-
posoff_t-

Historique des versions

XNU tagmacOS#
xnu-1456.1.26macOS 10.6 Snow Leopard197
xnu-1486.2.11197
xnu-1504.15.3197
xnu-1504.3.12197
xnu-1504.7.4197
xnu-1504.9.17197
xnu-1504.9.26197
xnu-1504.9.37197

Exemples

C — anonymous RW page

void *p = mmap(NULL, 0x4000, PROT_READ | PROT_WRITE,
               MAP_ANON | MAP_PRIVATE, -1, 0);
if (p == MAP_FAILED) { perror("mmap"); return 1; }

C — JIT region (hardened runtime)

void *jit = mmap(NULL, 0x10000, PROT_READ | PROT_WRITE | PROT_EXEC,
                 MAP_ANON | MAP_PRIVATE | MAP_JIT, -1, 0);
pthread_jit_write_protect_np(0); /* required on Apple Silicon */

Notes

Sur macOS, mmap(2) est un mince wrapper BSD qui pilote en réalité mach_vm_map() / mach_vm_allocate() sur le vm_map de la tâche appelante. Les mappings anonymes (MAP_ANON) sont la base des zones malloc, des overlays du dyld shared region et de la croissance de pile. Les processus à hardened runtime qui veulent du W+X doivent passer MAP_JIT et détenir le droit com.apple.security.cs.allow-jit, sinon AMFI refuse et le noyau renvoie EACCES.

Détection

Endpoint Security expose ES_EVENT_TYPE_NOTIFY_MMAP pour les mappings adossés à un fichier, avec chemin du vnode résolu et bits de protection. La sonde syscall::mmap:entry de DTrace et le provider vminfo donnent une télémétrie par région, et vmmap(1) / vm_region_recurse() permettent d'énumérer les mappings vivants a posteriori.

API associées

munmapmprotectmadvisevm_allocatemach_vm_mapshm_openmremap_encrypted