【发布时间】:2019-10-14 20:22:22
【问题描述】:
我正在尝试追踪系统调用在 Go 中的工作方式,但我被卡住了 here。
代码正在调用syscall.Entersyscall,但我在源代码树中的syscall 包中找不到Entersyscall 函数的定义。
是否有某种魔法可以将其重命名为其他名称?
更一般地说,如何找到在其广告包中没有明显定义的函数名称(在 Go 源代码树中)的定义?
【问题讨论】:
标签: go system-calls
我正在尝试追踪系统调用在 Go 中的工作方式,但我被卡住了 here。
代码正在调用syscall.Entersyscall,但我在源代码树中的syscall 包中找不到Entersyscall 函数的定义。
是否有某种魔法可以将其重命名为其他名称?
更一般地说,如何找到在其广告包中没有明显定义的函数名称(在 Go 源代码树中)的定义?
【问题讨论】:
标签: go system-calls
您在 stdlib 中找不到它,因为它只包含一个包装函数 syscall.Entersyscall()。正确的实现在同一个包中,但用 asm golang.org/src/syscall/asm_linux_arm.s
【讨论】:
syscall.Entersyscall() 只是 go 文件中函数的定义(没有实现)。实现是在另一种语言(C、ASM 等)的单独文件中完成的。在编译过程中,两个文件都编译成二进制数据,然后链接成一个可执行文件。