svc · unix #5
open
Ouvre ou crée un fichier au chemin donné et retourne un descripteur de fichier le référençant.
Prototype
int open(const char *path, int oflag, ...);Retour: int — file descriptor on success, -1 with errno set on failure
Arguments
| Name | Type | Dir | Description |
|---|---|---|---|
| path | const char * | in | Chemin du système de fichiers relatif au répertoire courant (ou absolu). |
| oflag | int | in | Masque de bits O_RDONLY/O_WRONLY/O_RDWR plus drapeaux optionnels (O_CREAT, O_EXCL, O_TRUNC, O_NONBLOCK, O_CLOEXEC, …). |
| mode | mode_t | in | Bits de mode du fichier (consultés uniquement si O_CREAT est positionné). |
Historique des versions
Absent de toute version XNU publiée.
Stub utilisateur
arm64
; libsystem_kernel.dylib: _open
mov x16, #5 ; SYS_open
svc #0x80
b.cs __cerror
retx86_64
; libsystem_kernel.dylib: _open
mov eax, 0x2000005 ; SYSCALL_CLASS_UNIX | 5
syscall
jb __cerror
retExemples
C — read-only open
int fd = open("/etc/hosts", O_RDONLY | O_CLOEXEC);
if (fd < 0) { perror("open"); return 1; }Swift — create with mode
let fd = Darwin.open("/tmp/out.bin", O_WRONLY | O_CREAT | O_TRUNC, 0o644)
guard fd >= 0 else { perror("open"); exit(1) }arm64 direct syscall
adrp x0, Lpath@PAGE
add x0, x0, Lpath@PAGEOFF
mov w1, #0 ; O_RDONLY
mov x16, #5 ; SYS_open
svc #0x80Notes
open(2) entre dans le noyau via le chemin des syscalls BSD. Le noyau résout le chemin via le VFS, alloue une paire fileproc + fileglob, et retourne le plus petit fd inutilisé du processus appelant. macOS ajoute O_CLOEXEC, O_SYMLINK, O_EVTONLY et O_NOFOLLOW_ANY au jeu POSIX standard.
Détection
Les clients Endpoint Security peuvent s'abonner à ES_EVENT_TYPE_NOTIFY_OPEN ou AUTH_OPEN. L'API kauth expose le même événement au scope KAUTH_SCOPE_FILEOP / KAUTH_FILEOP_OPEN. Les deux donnent le chemin du vnode résolu et les drapeaux demandés.
Utilisation par les malwares
Les chargeurs appellent souvent open() directement pour contourner les API Foundation qui peuvent être instrumentées. XCSSET et Silver Sparrow ouvrent puis mappent leur charge utile manuellement pour éviter le cache dyld.
API associées
MITRE ATT&CK
Dernière vérification: 2026-05-25