我制作了一个包含对第三方库的引用的 go 插件。所以我有一个示例函数,如下所示:
CreateEchoObject() *echo.Echo {
e := echo.New()
}
CreateEchoObject 的反汇编代码包含:
callq 8b9ab0 <_init+0xf0>
8b9ab0 存在于 plt.got 表中。
在这里一切都运行良好,但对于我的其他功能之一却没有。
func HttpRouterNew() *Router {
router := httprouter.New()
}
对于上述函数,反汇编代码如下所示:
<projects/package.HttpRouterNew>:
mov 0x8f1a21(%rip),%rcx # 1736b08 <_GLOBAL_OFFSET_TABLE_+0xd18>
mov %fs:(%rcx),%rcx
cmp 0x10(%rcx),%rsp
jbe e4522a <projects/package.HttpRouterNew+0x14a>
sub $0x30,%rsp
mov %rbp,0x28(%rsp)
lea 0x28(%rsp),%rbp
mov 0x8f2e5e(%rip),%rax # 1737f68 <_GLOBAL_OFFSET_TABLE_+0x2178>
mov %rax,(%rsp)
callq 8cab60 <runtime.newobject>
mov 0x8(%rsp),%rax
如您所见,没有类似上述函数的调用。使用 elf 文件解析器,我发现1737f68
GOT 中的符号名称 istype.EFOOALAY
和1736b08
is runtime.tlsg
。httprouter.New
我在 plt.got 表中也找不到任何参考。