Mietin, onko Linux ARM64 -arkkitehtuurille syscall-taulukkoa? Löysin syscall-taulukon Linux ARM32: lle ja monille muille arkkitehtuureille, mutta ongelma on edelleen olemassa.
Tietääkö kukaan mistä löydän syscall-taulukon tarkalleen ARM64: lle?
Mietin, onko Linux ARM64 -arkkitehtuurille syscall-taulukkoa? Löysin syscall-taulukon Linux ARM32: lle ja monille muille arkkitehtuureille, mutta ongelma on edelleen olemassa.
Tietääkö kukaan mistä löydän syscall-taulukon tarkalleen ARM64: lle?
arm64 syscall-numerot määritetään osoitteessa: https://github.com/torvalds/linux/blob/v4.17/include/uapi/asm-generic/unistd.h
Tämä on hieman hämmentävää, koska se eroaa melkoisesti x86: sta ja x86_64: stä ja arm: stä, jotka määrittelevät syscall-numerot arch /
-kohdassa, mutta tällä tiedostolla on kommentti sanomalla:
Uusien arkkitehtuurien tulisi käyttää tätä tiedostoa ja toteuttaa vähemmän tilaa sisältäviä puheluita käyttäjäavaruudessa.
joten arvaan, että se johtuu vain siitä, että aarch64 on uusi ja käyttää uudempaa enemmän kaaria agnostinen mekanismi, kun taas vanhat eivät koskaan voi rikkoa käyttömaan yhteensopivuutta, joten niitä ei voi päivittää uuteen mekanismiin.
Tätä tukee seuraava minimaalinen suoritettava aarch64-kokoonpanon Linux-puhelun esimerkki, joka toimii QEMU: lla ja käyttää 64
kirjoita
ja 93
varten exit
:
main.S
.text.global _start_start: / * kirjoita * / mov x0, # 1 ldr x1, = msg ldr x2, = len mov x8, # 64 svc # 0 / * exit * / mov x0, # 0 mov x8, # 93 svc # 0msg: .ascii "hei maailma \ n" len =. - msg
Kokoa ja suorita:
aarch64-linux-gnu- nimellä -o main.o main.Saarch64-linux-gnu-ld -o main.out main.oqemu-aarch64 main.out
Testattu Ubuntu 16.04 amd64: ssä.
strace
lähdekoodi
Tämä on hyvä paikka huijata helposti tarkistaa syscall-numerot, katso: https: // unix .stackexchange.com / questions / 421750 / where-do-you-find-the syscall-table-for-Linux / 499016 # 499016
Se vahvistaa myös sen, mitä sanoin uudemmista kaareista näyttää olevan yhtenäisiä puhelinnumeroita.
Päivitä : Katso tämä vastaus saadaksesi ajantasaista tietoa siitä, mistä ARM64-syscall-määritelmät löytyvät. Huomaa, että alla olevat tiedot saattavat olla vain yhteensopivia taaksepäin.
Katso arch / arm64 / include / asm / unistd32.h
:
... #define __NR_restart_syscall 0 __SYSCALL (__ NR_restart_syscall, sys_restart_syscall) #define __NR_exit 1 __SYSCALL (__ NR_exit, sys_exit) #def___________________________________________________________________________________________________________________________________ and_ and_ and_ and_ ja ja ja ja to ja to ja , sys_read) #define __NR_write 4 __SYSCALL (__ NR_write, sys_write) #define __NR_open 5 __SYSCALL (__ NR_open, compat_sys_open) #define __NR_close 6 __SYSCALL_s________________________________________________________________________________________________________________________________________________________________ ja ja sen jaisen __SYSCALL (__ NR_creat, sys_creat) ...
Löydät myös muutaman AArch64-spesifisen syscallen hakemistosta arch / arm64 / include / asm / unistd.h
.