如何在英特尔程序集 x86-64 中移动地址向前移动一定数量的字节



我想知道如何在英特尔x86-64中将地址向前移动一定数量的字节

假设我有字符串"string",我想将其向前移动 3 个字节,我希望它使用一些指针算法打印"ing"以将其向上移动

我试过了

mov rax, 1
mov rdi, 1
mov rsi, [string+3]
mov rdx, 3
syscall

为了sys_write字符串向前移动了三个位置,在此示例中将长度更改为 3,因为这是剩余的数量,但它无法正常工作。

你想要第 4 个字节的地址,而不是从该位置加载的 qword 。

lea rsi, [string+3]或者更好的是,使用 RIP 相对寻址模式。 如果这是 NASM,请使用
lea rsi, [rel string+3]或 GAS.intel_syntax noprefixlea rsi, [RIP + string+3]

或者在 Linux 上的位置相关代码中,(NASM(mov esi, string+3或 (GAS(mov esi, OFFSET string+3获取绝对地址string+3作为 32 位即时

。请参阅如何将函数或标签的地址加载到寄存器中(我的答案也有一些 NASM 语法(。

最新更新