【问题标题】:Solaris 64 bit function pointer problemSolaris 64位函数指针问题
【发布时间】:2011-07-06 08:46:02
【问题描述】:

环境: 操作系统:Sun Solaris 10 处理器:AMD 64 位

我有一个使用 net-snmp 库的应用程序。该应用程序可移植(代码级别)到各种操作系统和处理器。在 net-snmp 中,您可以注册一个日志回调(一个函数指针),当要记录某些内容时调用该回调。

问题是当我运行应用程序时,当 net-snmp 尝试调用我注册的回调函数时,它会出现段错误。注册的回调地址是 0xffe30b90,但 net-snmp 尝试调用 0xffffffff ffe30b90。

在调查时,我在同一个应用程序中编写了另一个函数并注册了它。该函数被正确调用,但它的地址显示为 0x52e060(无前导 ff)。

我无法弄清楚这里的问题是什么。这似乎与字节对齐或某些指针溢出问题有关。

任何进一步调查的指针将不胜感激。谢谢,

-法鲁克

【问题讨论】:

  • 进一步调查表明,更改源文件中的函数位置(将其进一步向上移动)会更改函数指针,我可以解决此问题。但仍然没有关于原因的线索。

标签: function 64-bit solaris


【解决方案1】:

听起来像是地址作为带符号的 32 位 int 传递的地方,在转换回 64 位时会进行符号扩展,添加额外的 0xFFFF... 位。确保您的代码不假定 int 与任何地方的指针大小相同,因为 Solaris 64 位 ABI 使用“LP64”约定,其中 int 是 32 位,而 long 和指针是 64 位的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-16
    • 2023-03-05
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-14
    相关资源
    最近更新 更多