Проблема указателя 64-битной функции Solaris - PullRequest
0 голосов
/ 06 июля 2011

Среда: ОС: Sun Solaris 10 Процессор: 64-битный AMD

У меня есть приложение, которое использует библиотеку net-snmp.Приложение переносимо (на уровне кода) для различных ОС и процессоров.В net-snmp вы можете зарегистрировать обратный вызов регистрации (указатель на функцию), который вызывается, когда что-то должно быть зарегистрировано.

Проблема в том, что при запуске приложения происходит сбой при попытке net-snmp вызвать зарегистрированную функцию обратного вызова.Зарегистрированный адрес обратного вызова - 0xffe30b90, но net-snmp пытается вызвать 0xffffffff ffe30b90.

Во время исследования я написал другую функцию в том же приложении и зарегистрировал ее.Эта функция вызывается правильно, но ее адрес отображается как 0x52e060 (без начального ff).

Я не могу понять, в чем здесь проблема.Похоже, что-то связано с выравниванием байтов или проблемой переполнения указателя.

Будут признательны любые указатели для дальнейшего изучения.Спасибо,

-Farooque

1 Ответ

2 голосов
/ 09 июля 2011

Похоже, что где-то адрес передается в виде 32-разрядного целого со знаком, который расширяется до знака при преобразовании обратно в 64-разрядное, добавляя дополнительные 0xFFFF ... биты. Убедитесь, что ваш код не предполагает, что int имеет тот же размер, что и указатель, поскольку 64-битный ABI Solaris использует соглашения «LP64», где int - 32-битный, а long и указатели являются 64-битными.

...