问题标签 [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 投票
2 回答
86 浏览

c++ - C ++,对象的绝对地址在释放之前是否始终保持不变?

“测试”是否在 RAM 上具有绝对地址或在虚拟内存中具有与 RAM 的零地址相对起点的绝对地址?

一个例子可能是,在一个非常碎片化的内存中,我启动了许多应用程序,每个应用程序在 10 小时内多次分配和释放,其中一个应用程序是 RAM 错误检查和基准测试。它可以测试所有 RAM 地址还是仅在有限区域上运行?如果它达到所有 RAM,那么除了移动其对象之外,操作系统如何能够保护应用程序免受其他应用程序的影响?特别是当从 pci-e 流式传输非固定数组到 pci-e 时。

0 投票
1 回答
2637 浏览

assembly - 为什么静态变量的地址是相对于指令指针的?

我正在关注关于组装的本教程。

根据教程(我也在本地尝试过,得到了类似的结果),源代码如下:

编译为这些汇编指令:

(行号注释(1),由我添加。)(2)(1, 2)

问题为什么在编译后的代码中,静态变量的地址b相对于指令指针(RIP)是不断变化的(见行(1)(2)),从而生成更复杂的汇编代码,而不是相对于特定的部分可执行文件,这些变量存储在哪里?

根据提到的教程,有这样一个部分:

这是因为 for 的值b被硬编码在示例可执行文件的不同部分中,并且在启动进程时,操作系统的加载程序将其与所有机器代码一起加载到内存中。

(强调我的。)

0 投票
1 回答
5495 浏览

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

我在反汇编程序(浮点逻辑 C++)中找到了以下汇编代码。

我知道当进程 rip 总是 842 并且这个 0x21a(%rip) 将是 const 时。使用这个寄存器似乎有点奇怪。

我想知道使用 rip 相对地址而不是其他寻址有什么好处。

0 投票
1 回答
52 浏览

c++ - 在 x86 32 位上的静态类实例中解决此问题

如果我定义一个类的静态实例,编译器(特别是 g++/clang)是否有优化以在直接或间接访问数据成员(我的意思是公式)时省略base寄存器(用于调用)并且只对所有这些成员使用单个常量?所有成员函数都可能变成静态的(如果是类的唯一实例,这是合理的)。this[base + index * scale + displacement]displacement

我无法检查这一点,因为在 godbolt.org 编译器上积极优化以下代码xor eax, eax; ret

0 投票
1 回答
960 浏览

macos - 无法将 .data 中的变量移动到 Mac x86 程序集的寄存器

我用 AT&T 语法编写了一小段程序集,目前在该.data部分中声明了三个变量。但是,当我尝试将这些变量中的任何一个移动到寄存器时,例如%eax,会引发错误gcc。代码和错误信息如下:

引发的错误是:

call_function.s:14:3:错误:64 位模式不支持 32 位绝对寻址

movl x, %eax;

^

我还尝试通过首先$在 前面添加字符来移动值x,但是clang会引发错误:

clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)

有谁知道如何将存储的值x成功移动到%eax?我在 Mac OSX 上使用 x86 程序集并使用gcc.

0 投票
1 回答
1105 浏览

reactjs - 在 Axios 请求中使用 API 的相对寻址

我正在开发一个应用程序,其中 API CRUD 函数的 URL/路径定义如下:

正如预期的那样,编辑和删除的路径会收到一个 id。现在在我的应用程序中,我可以创建一个帖子并使用以这种方式定义的 url 获取请求,如下所示:

以上发送 POST 请求没有问题。但是当我需要编辑一个项目时,我需要以某种方式将 itemid 包含到这个 url 中。我试过这样做,但没有奏效

在上述 url 中包含 id 的正确方法是什么?我不能像axios 文档中所示的那样对 url 进行硬编码,例如“ http://localhost/app_dev.php/api/v1/items/ {$id}”

0 投票
1 回答
3713 浏览

assembly - x86-64 GAS Intel 语法中的“[RIP + _a]”等 RIP 相对变量引用如何工作?

考虑 x64 Intel 程序集中的以下变量引用,该变量a在该.data部分中声明:

我很难理解这个变量引用是如何工作的。既然a是对应于变量运行时地址的符号(带重定位),那么如何才能[rip + _a]解引用正确的内存位置a呢?实际上,rip保存了当前指令的地址,它是一个很大的正整数,所以加法会导致不正确的地址a

相反,如果我使用 x86 语法(非常直观):

,我收到以下错误:64 位模式不支持 32 位绝对寻址

有什么解释吗?

编译gcc -S -masm=intel abs_ref.c -o abs_ref::

0 投票
1 回答
550 浏览

assembly - 为什么调用和跳转指令使用相对于下一条指令的位移,而不是当前指令?

在从英特尔文档中提取的下表中,我们有操作码 E8 cw和 E8 cd的位移是相对于下一条指令的。

为什么下一个指令?为什么位移不是相对于call指令本身?

在此处输入图像描述

0 投票
1 回答
1282 浏览

assembly - lea 汇编指令语法

嗨,我是汇编语言的新手,我对学习一段代码时看到的 lea 指令的语法感到困惑(这是使用 gdb 命令生成的: disassemble main )。

我看到的 lea 语法是

但似乎在 %rsi 寄存器之后有一个额外的立即值(#0x4aa5df),我应该如何正确解释这个?

编辑:我检查了存储在 %rip 寄存器中的值,它是

因此,将其与 0xa8e96 添加给我 0x4AA5C6 与 0x4aa5df 不匹配,我在这里遗漏了什么吗?

0 投票
1 回答
96 浏览

c++ - 使用变量定义变量名

我确信有一个非常简单的答案,我可能只是健忘,但我不记得如何使用变量来定义另一个变量的名称。我什至想不出这个过程的名称来搜索现有的答案。

我有一个变量:VarA,它将是整数 1、2、3、4 等。

我有另一组数组 VarBn[],其中“n”与 VarA 相关。

所以,当 VarA=1 我想知道 VarB1[],当 VarA=2 ... VarB2[]

我目前有一个非常长且重复的 switch 语句......

但如果它只是一条线,它的功能会小得多......