gcc 动态库内嵌汇编,导致so不能加载,求助
double *rf;
double asmtest()
{
asm(
"movl rf, %%ebx "
:
:
:
);
}
如上面的情况, 由于rf是一个全局变量,编译和链接没有问题,但是当 dlopen 的时候会
发生错误,提示:
cannot restore segment prot after reloc: Permission denied
用 objdump -d so 文件后 发现 movl rf, %%ebx
rf成了 0.
由于全局变量太多,不能用寄存器传参数进去,不知道有哪位高手知道怎么解决吗?
解决了, 是SELinux 的问题
顺便上传个 AT&T 的sun指令手册,希望对其他 人有帮助
[ 本帖最后由 GFree 于 2008-12-19 16:01 编辑 ]
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
看看怎么写内联汇编吧,如果有需要可以保存寄存器。
可能与SELINUX有点关系
lz能说说怎么解决的吗?
为什么会和selinux有关系呢?
难道在其他系统上编译就没有问题吗?
double *rf;
double asmtest()
{
asm(
"movl %0, %%ebx "
:
:r(rf)
:
);
}
再试试
搞定了,谢谢各位,是SELinux的问题
gcc内联汇编的格式也错了........
但问题引发的本质原因不是因为这个
[ 本帖最后由 cjaizss 于 2009-1-11 15:01 编辑 ]