assembly - 如何将标签推送到可重定位共享库中的堆栈中,其对象应使用-fPIC编译?
问题描述
我正在使用从汇编代码组装的几个目标文件制作一个可重定位的共享库(所有编译都应该使用 -fPIC 和 -DPIC)。
在我的代码中,我有push label
说明。当我使用一切将我的汇编代码组装成一个目标文件时,-fPIC -DPIC
一切看起来都很好,但是当我想使用目标文件创建共享库时,我得到了relocation R_X86_64_32S against '.text' can not be used when making a shared object; recompile with -fPIC
消息。
我确信问题出在这些push label
说明上,因为当我删除它们时,错误就会消失。
关于如何组装它的任何想法?
顺便说一句,我的平台是采用 Intel x86_64 架构的 Linux,编译器gcc
采用 GAS 语法。我对 64 位库感兴趣。
解决方案
假设您正在使用 GAS:
lea label(%rip), %rax
push %rax
没有推送有效地址指令,因此您需要通过寄存器。
请注意,在 64 位 x86 代码中使用 push 立即指令并不是很多理由,因为参数通常不会在堆栈上传递,可能有更好的方法来重写代码。
推荐阅读
- javascript - 如何制作无限滑块
- c# - 如何保护 Web api 以验证客户端应用程序生成的 openid 令牌?
- reactjs - AG Grid 无限行模型不起作用 - 当它位于绘图行的中间时,无法让网格绘制行
- javascript - getByteFrequencyData 获取给定时间的准确数据
- flutter - 在 Dart 中访问 Firestore 数组
- android - 如何将 Koin ViewModel 注入移动到 Base 片段?
- java - 如何从android文件中获取真实的文件路径
- symfony - 在 makefile 命令上添加控制器名称
- javascript - Audiocontext Web Audio API createMediaStreamDestination().stream 没有音频
- python - Numpy - 根据函数选择索引