我想知道如何在英特尔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 noprefix
lea rsi, [RIP + string+3]
或者在 Linux 上的位置相关代码中,(NASM(mov esi, string+3
或 (GAS(mov esi, OFFSET string+3
获取绝对地址string+3
作为 32 位即时
。请参阅如何将函数或标签的地址加载到寄存器中(我的答案也有一些 NASM 语法(。