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
| Name | Type | Dir | Description |
|---|---|---|---|
| addr | caddr_t | - | |
| len | size_t | - | |
| prot | int | - | |
| flags | int | - | |
| fd | int | - | |
| pos | off_t | - |
Historique des versions
| XNU tag | macOS | # |
|---|---|---|
| xnu-1456.1.26 | macOS 10.6 Snow Leopard | 197 |
| xnu-1486.2.11 | — | 197 |
| xnu-1504.15.3 | — | 197 |
| xnu-1504.3.12 | — | 197 |
| xnu-1504.7.4 | — | 197 |
| xnu-1504.9.17 | — | 197 |
| xnu-1504.9.26 | — | 197 |
| xnu-1504.9.37 | — | 197 |
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.