mas*_*sec 0 assembly x86-64 shared-libraries
我正在使用从汇编代码组装的多个目标文件来制作可重定位共享库(所有编译都应使用 -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
Run Code Online (Sandbox Code Playgroud)
没有推送有效地址指令,因此您需要通过寄存器。
请注意,在 64 位 x86 代码中使用推送立即指令的理由并不多,因为参数通常不会在堆栈上传递,可能有更好的方法来重写代码。
| 归档时间: |
|
| 查看次数: |
453 次 |
| 最近记录: |