位置独立代码

时间:2012-07-23 05:11:05

标签: assembly

为什么

   push str1

当str1在.text int中定义在同一个文件中时, 当我们想做位置独立代码时不好? 当我们将一些标签推送到堆栈时,地址是静态时间的地址吗?为什么呢?

1 个答案:

答案 0 :(得分:0)

每当加载二进制文件时,它们都会被虚拟化,这涉及很多方面,但最重要的是对于PIC来说,这意味着二进制文件可以加载并基于几乎任何地址,因此PIC要做的就是克服这个问题,尽可能做到一切。使用相对寻址(因为这些不需要为重定位修复)。

在上面的示例中,不可能仅使用PUSH创建相对地址,因为要推送的地址将是.text / .rodata部分的偏移量(或者由一些首选的基地址),但它不会被调整到二进制文件当前的虚拟地址,因此你需要在推送它之前调整地址(最简单的可能是通过RIP相对寻址,所以你要做{{ 1}})。

相关问题