【发布时间】:2011-07-06 08:46:02
【问题描述】:
环境: 操作系统:Sun Solaris 10 处理器:AMD 64 位
我有一个使用 net-snmp 库的应用程序。该应用程序可移植(代码级别)到各种操作系统和处理器。在 net-snmp 中,您可以注册一个日志回调(一个函数指针),当要记录某些内容时调用该回调。
问题是当我运行应用程序时,当 net-snmp 尝试调用我注册的回调函数时,它会出现段错误。注册的回调地址是 0xffe30b90,但 net-snmp 尝试调用 0xffffffff ffe30b90。
在调查时,我在同一个应用程序中编写了另一个函数并注册了它。该函数被正确调用,但它的地址显示为 0x52e060(无前导 ff)。
我无法弄清楚这里的问题是什么。这似乎与字节对齐或某些指针溢出问题有关。
任何进一步调查的指针将不胜感激。谢谢,
-法鲁克
【问题讨论】:
-
进一步调查表明,更改源文件中的函数位置(将其进一步向上移动)会更改函数指针,我可以解决此问题。但仍然没有关于原因的线索。