我想知道是否有用於Linux ARM64體系結構的系統調用表嗎?我找到了 Linux ARM32和許多其他體系結構的系統調用表,但問題仍然存在。
有人知道嗎?在哪裡可以找到完全適合ARM64的系統調用表?
我想知道是否有用於Linux ARM64體系結構的系統調用表嗎?我找到了 Linux ARM32和許多其他體系結構的系統調用表,但問題仍然存在。
有人知道嗎?在哪裡可以找到完全適合ARM64的系統調用表?
arm64系統調用號在以下位置定義: https://github.com/torvalds/linux/blob/v4.17/include/uapi/asm-generic/unistd.h
這有點混亂,因為它與x86和x86_64和arm完全不同,後者在 arch /
下定義系統調用號,但是該文件帶有註釋:
新架構應該使用該文件並在用戶空間中實現功能較少的調用。
所以我猜測這僅僅是因為aarch64是新的並且使用了更新的arch不可知論的機制,而舊的機制永遠不會破壞用戶界面的兼容性,因此無法更新為新的機制。
以下在QEMU上運行並使用 64
表示 write
, 93
表示 exit
:
main.S
.text.global _start_start:/ *寫* / mov x0,#1 ldr x1,= msg ldr x2,= len mov x8,#64 svc#0 / *出口* / mov x0,#0 mov x8,#93 svc#0msg:.ascii“ hello world \ n” len =。 -msg
組裝並運行:
aarch64-linux-gnu-作為-o main.o main.Saarch64-linux-gnu-ld -o main.out main.oqemu-aarch64 main.out
在Ubuntu 16.04 amd64中進行了測試。
strace
源代碼
這是一個輕鬆作弊以檢查syscall編號的好地方,請參閱: https:// unix .stackexchange.com / questions / 421750 / where-do-you-you-find-the-syscall-table-for-linux / 499016#499016
這也證實了我對新拱門的看法似乎有統一的電話號碼。
更新:有關在哪裡找到ARM64 syscall定義的最新信息,請參見此答案。請注意,以下信息可能只是為了向後兼容。
請參見 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)#define __NR_fork 2 __SYSCALL(de <__ nr_fork> ,sys_read)#定義__NR_write 4 __SYSCALL(__ NR_write,sys_write)#定義__NR_open 5 __SYSCALL(__ NR_open,compat_sys_open)#定義__NR_close 6 __SYSCALL(__ NR_close,sys_close)/ * 7是sys_callpid * /,_____C __SYSCALL(__ NR_creat,sys_creat)...