问题标签 [relative-addressing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
136 浏览

assembly - %rip-relative 寻址何时以及如何解决?

采取以下汇编程序:

运行时产生以下内容gdb

当然,所有myvar引用都解析为0x600107. -relative 项目在哪里(或者何时是一个更好的问题)%rip被解析为实际地址?这个过程在高层次上是如何运作的?

相关为什么这条 MOVSS 指令使用 RIP 相对寻址?.

0 投票
1 回答
483 浏览

assembly - 强制 RIP 相对寻址?

有没有办法强制编译器或汇编器只生成 RIP 相对寻址代码?

我试图找到一种方法来提供从传统编程模型到图灵完备的计算抽象模型的映射。

0 投票
0 回答
15 浏览

c# - 如何在c#中相对地址python脚本

我需要确保从 c# 调用并使用 ironpython 在 IIS 上运行的 python 脚本将在服务器上运行。我应该如何处理包含脚本的文件?

0 投票
2 回答
98 浏览

assembly - 强制 RIP 相对访问 NASM 中的固定偏移量

对于一个二进制检测项目,我在 NASM 中编写了一段汇编代码,它在运行时被映射到二进制的地址空间。

块在 address 被加载instrument_addr,并且需要在 address 访问数据instrument_addr+data_offset,其中data_offset是一些固定的 31 位数字。由于 ASLR,我不知道instrument_addr编译时的值。

由于我不知道我的检测代码的绝对地址,但我的数据的相对偏移量,我想使用 RIP 相对寻址:

然而,最直接的方法

只会导致:

[absolute 0x1000]与虚拟标签一起使用会产生相同的警告。

如何强制 NASM 生成对某个固定偏移量的 RIP 相关访问?

0 投票
1 回答
106 浏览

assembly - 如何在真正的 64 位模式下(使用 LARGEADDRESSAWARE)组装和链接 ml64?

我正在使用 Microsoftml64和 Windows 10 上的链接将旧的 masm 程序改造成真正的 64 位 x64 模式。链接器在具有 REX.W 前缀的代码中给出错误。

链接器的/LARGEADDRESSAWARE选项听起来像是完整的 64 位支持的正确选择,但它抱怨。 /LARADDRESSAWARE:NO有效,但从我读过的文档来看,它似乎是 32 位程序在“兼容模式”下超过 2GB 到 3GB 的一个选项。MS 文档对此并不清楚。

.data我也认为这.code可能是错误的使用方法,因为 MS ml64 文档说它适用于 32 位代码,但没有说明如何处理 64 位代码。但我似乎无法找到一种不使用.data并使.code事情正常的方法。无论如何,我不想因缺少链接或 ml64 中的某些选项而被限制为 4GB。我已将问题简化为最简单的示例。以下汇编和链接:

下面是 test.asm 程序:

0 投票
3 回答
124 浏览

c - 了解带有 pc 偏移的 Cortex-M 汇编 LDR

我正在查看这段 C 代码的反汇编代码:

SW1=行的程序集是(抱歉无法复制代码):

https://imgur.com/dnPHZrd

以下是我的问题:

  • 在第一行,PC = 0x00000A56,PC + 92 = 0x00000AB2,不等于 0x00000AB4,如图所示。为什么?

我对 SO 做了一些研究,发现 PC 实际上指向要执行的 Next Next 指令。

当 pc 用于读取时,ARM 模式下有 8 字节偏移,Thumb 模式下有 4 字节偏移。

但是 0x00000AB4 - 0x00000A56 = 0x5E = 94,它也不匹配 92+8 或 92+4。我哪里做错了?

参考

ldr [pc, #value] 的奇怪行为

为什么ARM PC寄存器指向下一条要执行的指令之后?

LDR Rd,-Label 与 LDR Rd,[PC+Offset]

0 投票
0 回答
35 浏览

c - 关于汇编代码中重定位条目的问题

我写了 2 个 C 程序:main.c 和 sum.c。

这是 main.c :

这是 sum.c :

我使用命令gcc -c -o main.o main.cobjdump -d -r main.o>main.d我得到:

是什么1e: R_X86_64_PLT32 sum-0x4意思?不应该是sum-0x22因为当时的RIP是0x22吗?

还有0x4in10: R_X86_64_PC32 array-0x4代表什么?

还有一个问题:我的电脑是 64 位的,但为什么汇编代码中的地址是 32 位的?