svc · unix #3
read
Lit jusqu'à nbyte octets depuis un descripteur de fichier vers un tampon utilisateur.
Prototype
ssize_t read(int fildes, void *buf, size_t nbyte);Retour: ssize_t — number of bytes read (0 = EOF), -1 with errno on failure (EAGAIN, EBADF, EINTR, …)
Arguments
| Name | Type | Dir | Description |
|---|---|---|---|
| fildes | int | in | Descripteur de fichier ouvert (fichier régulier, socket, pipe, périphérique, kqueue, …). |
| buf | void * | out | Tampon possédé par l'appelant d'au moins nbyte octets. |
| nbyte | size_t | in | Nombre maximum d'octets à lire. Plafonné à INT_MAX sur macOS. |
Historique des versions
Absent de toute version XNU publiée.
Stub utilisateur
arm64
; libsystem_kernel.dylib: _read
mov x16, #3 ; SYS_read
svc #0x80
b.cs __cerror
retx86_64
mov eax, 0x2000003 ; SYSCALL_CLASS_UNIX | 3
syscall
jb __cerror
retExemples
C — read with retry on EINTR
ssize_t n;
do { n = read(fd, buf, sizeof buf); } while (n < 0 && errno == EINTR);Notes
read(2) est dispatchée par sys_read dans bsd/kern/sys_generic.c, qui récupère le fileproc via le fd, copie jusqu'à nbyte octets via le vecteur fo_read propre au type de fichier, et retourne le nombre écrit. Les fd non-bloquants retournent -EAGAIN immédiatement si rien n'est prêt.
Détection
ES_EVENT_TYPE_NOTIFY_READDIR couvre les lectures de répertoires ; les lectures de fichiers ne sont pas un événement ES de premier ordre, la détection passe donc par KAUTH ou la probe DTrace syscall::read:entry.
Utilisation par les malwares
Utilisée partout — n'est distinctive que lorsque combinée avec des descripteurs provenant de sources suspectes (/dev/urandom pour initialiser un flux, /Library/Keychains/* pour le vol d'identifiants).
API associées
MITRE ATT&CK
Dernière vérification: 2026-05-25