ZBLOG

英译中:-fPIE is probably the default for your g++, and you didn't use -fno-pie, so calls to unknown functions (not in the same file or elf visibility=hidden) are probably emitted as call SetupIDT@plt, which the linker then has to relax to just a dire...

-fPIE可能是您的g++的默认设置,并且您没有使用-fno-pie,因此对于未知函数的调用(不在同一文件或elf可见性= hidden中)可能被发出为call SetupIDT@plt,在链接器找到另一个非动态链接的文件中存在该符号时,它会放松以直接调用而不通过PLT。(有关构建非自由立足Linux可执行文件时的示例,请参见本答案底部)。但我不确定这对于链接器来说会成为问题。- Peter Cordes 还要注意,您可能需要在asm中使用1:hlt; jmp 1b或while(1)asm(“hlt”) 。 hlt只能休眠到下一个中断。- Peter Cordes -fno-pie是否替换了-ffreestanding?现在我收到了很多重新定位截断错误,例如如果bss太大,则无法使用RIP相对寻址访问。- user123 不,-fno-pie与-ffreestanding是正交的。使用-fno-pie,默认代码模型假定将链接到低4GiB内存地址。如果不是这种情况,则可能需要-mcmodel = kernel来假设高2GiB(例如,可以使用绝对地址作为符号扩展32位立即数,但不能零扩展。仅使用-fno-pie ,GCC将使用mov $ symbol,% edi将符号地址放入寄存器:如何将函数或标签的地址加载到寄存器中)- Peter Cordes 顺便说一下,asm volatile(“lidt(%0)”::“r”(idtrAddr))可能最好使用asm volatile(“lidt%0”::“m”(* idtrAddr)),让编译器选择寻址模式而不是要求它将地址加载到寄存器中。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:http://sdn.0voice.com/?id=906

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?