0

我制作了一个包含对第三方库的引用的 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 文件解析器,我发现1737f68GOT 中的符号名称 istype.EFOOALAY1736b08is runtime.tlsghttprouter.New我在 plt.got 表中也找不到任何参考。

4

0 回答 0