【发布时间】:2021-02-18 23:56:42
【问题描述】:
我想在 Go 中按名称/编号查找 amd64 和 i386 的 Linux 系统调用,并且想知道 Go 标准库或第三方模块中是否有可用的内置映射。
我可以在这里看到 Go 开发人员已将 Linux 系统调用号硬编码到 syscall 模块中:
- i386:https://golang.org/src/syscall/zsysnum_linux_386.go
- amd64:https://golang.org/src/syscall/zsysnum_linux_amd64.go
看起来他们已经使用 GCC 生成了以下每个文件:https://golang.org/src/syscall/mksysnum_linux.pl
系统调用示例 (amd64):
// mksysnum_linux.pl /usr/include/asm/unistd_32.h
// Code generated by the command above; DO NOT EDIT.
// +build 386,linux
package syscall
const (
SYS_RESTART_SYSCALL = 0
SYS_EXIT = 1
SYS_FORK = 2
SYS_READ = 3
SYS_WRITE = 4
SYS_OPEN = 5
SYS_CLOSE = 6
...
最好的办法是在我的代码中对这个映射进行硬编码,还是在某个地方有维护的映射可用?
我不是在寻找特定 Linux 系统上系统调用名称/编号之间的映射,而是在 amd64/i386 上的任何(现代)Linux 系统上寻找系统调用名称/编号之间的(可能)映射。
我了解系统调用编号可能会发生变化,但这是一种尽力而为的方法。
【问题讨论】:
-
相关的甚至可能是重复的:stackoverflow.com/q/6604007/103167
标签: linux go system-calls