【问题标题】:Application returns ENOSYS 38 Function not implemented应用程序返回 ENOSYS 38 功能未实现
【发布时间】:2013-01-13 02:59:25
【问题描述】:

我要调用的 func1() 绑定如下:

readelf -Ws /lib/libc.so.6 | grep  func1

    592: 000d8910    40 FUNC    WEAK   DEFAULT   12 func1@@GLIBC_2.13
   1690: 000d8910    40 FUNC    WEAK   DEFAULT   12 func2@@GLIBC_2.13**

这就是原因吗,因为当我从我的应用程序中调用func1() 时,它会返回一个errno =38,即:ENOSYS 38 /* Function not implemented */

我能否以某种方式将 func1() 绑定设为 GLOBAL,然后从我的应用程序中调用它?

【问题讨论】:

  • 你问了一个关于 glibc 和符号绑定的复合问题,然后另一个问题收到了 ENOSYS。答案解决了 ENOSYS,但完全没有解决您的大部分问题和标题。我认为这太本地化了

标签: glibc elf


【解决方案1】:

是不是这个原因

没有。符号绑定就是能够调用函数(您可以调用GLOBAL,但不能调用LOCAL 函数)并能够覆盖定义(您可以将多个WEAKly 定义的函数链接到一个没有多重定义的链接器错误)。

一旦你可以调用这个函数,它的绑定就超出了想象,它会返回它返回的任何东西。

你得到ENOSYS的原因很可能是你的内核太旧了。

【讨论】:

  • 有没有办法从 glibc 中公开函数 func1() 以便其他应用程序可以使用它? func1() 也存在于 system.map 文件中,如 ffffffff8118e540 T sys_func1 仍然为什么我收到 ENOSYS 错误?
  • @priyamn “为什么选择 ENOSYS?” ——不能说。 func1 是什么?您的System.map 是否与您实际运行的内核匹配?
  • 这实际上并不能回答问题。
猜你喜欢
  • 2021-04-28
  • 2011-03-19
  • 2023-03-13
  • 2013-07-24
  • 2022-07-07
  • 2021-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多