如何在c /汇编中使用相对位置?

mys*_*_go 5 c assembly fpic

据说位置独立码只使用相对位置而不是绝对位置,这又如何在c和汇编中实现?

我们以char test[] = "string";一个例子为例,如何通过相对地址来引用它?

Pot*_*ter 2

在 C 中,位置无关代码是编译器实现的一个细节。请参阅编译器手册以确定是否支持以及如何支持。

在汇编中,与位置无关的代码是指令集架构的一个细节。请参阅 CPU 手册,了解如何读取 PC(程序计数器)寄存器、其效率如何,以及将代码地址转换为数据地址的推荐最佳实践是什么。

由于在大多数现代操作系统上代码和数据被分成不同的页面,因此位置相关数据不太受欢迎。这是实现自包含可执行模块的好方法,但现在最常见的此类东西是病毒。