Kíváncsi vagyok, van-e syscall tábla a Linux ARM64 architektúrához? Találtam egy syscall táblázatot a Linux ARM32 és sok más architektúrához, de a probléma továbbra is fennáll.
Tudja valaki hol találok egy syscall táblázatot pontosan az ARM64-hez?
Kíváncsi vagyok, van-e syscall tábla a Linux ARM64 architektúrához? Találtam egy syscall táblázatot a Linux ARM32 és sok más architektúrához, de a probléma továbbra is fennáll.
Tudja valaki hol találok egy syscall táblázatot pontosan az ARM64-hez?
Az arm64 syscall számok a következő helyen vannak meghatározva: https://github.com/torvalds/linux/blob/v4.17/include/uapi/asm-generic/unistd.h
Ez kissé zavaró, mivel teljesen különbözik az x86-tól és az x86_64-től, valamint az arm-tól, amelyek a syscall számokat definiálják az arch /
alatt, de a fájlhoz tartozik egy megjegyzés:
Az új architektúráknak ezt a fájlt kell használniuk, és a kevésbé funkciókkal teli hívásokat végre kell hajtaniuk a felhasználói térben.
szóval feltételezem, hogy csak azért, mert az aarch64 új, és egy újabb arch-ot használ agnosztikus mechanizmus, míg a régiek soha nem tudják megszakítani a felhasználói országok kompatibilitását, és így nem frissíthetők az új mechanizmusra.
Ezt alátámasztja a következő minimálisan futtatható aarch64 assembly Linux hívási példa, amely QEMU-n működik és write
és 93
esetén a exit
:
main.S
.text.global _start_start: / * write * / mov x0, # 1 ldr x1, = msg ldr x2, = len mov x8, # 64 svc # 0 / * exit * / mov x0, # 0 mov x8, # 93 svc # 0msg: .ascii "hello world \ n" len =. - msg
Összeállítás és futtatás:
aarch64-linux-gnu- mint -o main.o main.Saarch64-linux-gnu-ld -o main.out main.oqemu-aarch64 main.out
Az Ubuntu 16.04 amd64 verziójában tesztelve.
strace
forráskód
Ez egy jó hely a csalásra, hogy ellenőrizze a syscall számokat, lásd: https: // unix .stackexchange.com / questions / 421750 / hol találja meg a syscall-táblázatot a linux számára / 499016 # 499016
Ez megerősíti azt is, amit az újabb arch-okról mondtam látszólag egységes hívószámuk van.
Frissítés : ebben a válaszban olvashat naprakész információkat arról, hogy hol találhatók az ARM64 syscall-definíciók. Ne feledje, hogy az alábbi információk csak a kompatibilitásra vonatkoznak.
Lásd: 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) NRf______________________________________________________J_ , 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__close_s_________________________ __SYSCALL (__ NR_creat, sys_creat) ...
Néhány arch / arm64 / include / asm / unistd.h
.