创建pic目录 linux,在Linux上创建.SO文件而不使用PIC(位置无关代码)(x86 32位)...

据我所知,x86汇编代码受到有限数量寄存器的限制。

当我在Linux上了解到要创建.so文件时,必须为gcc指定-fPIC命令行参数才能创建与位置无关的代码,我无法首先相信它。

据我所知,elf文件格式支持重定位,就像 - 在我看来更好 - Windows DLL系统工作原理:在Windows上,链接器重新定位DLL中的所有偏移量,如果有必要的话。

我认为加载SO文件或DLL文件所需的时间,以及用于保存不同重定位的.so文件的内存量并不像缺少整个寄存器一样糟糕它指向GOT并具有所有这些间接跳跃。

对于我想到的应用程序,我也根本不关心ALSR等。我只关心在库中尽可能地优化代码。

1)为什么Linux不支持更像Windows的动态库加载,这应该可以生成更高性能的代码?

到目前为止,我找不到真正的解释。只是在某些事情上,重新定位代码会非常糟糕和缓慢(当然,对于在桌面计算机上加载文字处理器,重要的是加载速度,我完全接受。但是对于计算密集型服务器进程(不处理来自互联网的恶意数据),我想拥有我能得到的所有性能和寄存器!

2)我可以在Linux上创建NOT -fPIC编译的SO文件吗?我可以离开-fPIC吗?是否有关于此主题的howto,manual或project,并且可以不浪费整个寄存器并仍然动态加载库?

如果我在编译.so文件时删除-fPIC会发生什么?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值