Solaris 64位函数指针问题

时间:2011-07-06 08:46:02

标签: function 64-bit solaris

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

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

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

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

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

任何进一步调查的提示都将受到赞赏。谢谢,

-Farooque

1 个答案:

答案 0 :(得分:2)

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