我想知道如何在Intel x86-64中将地址向前移动一定数量的字节
说我有字符串“ string”,我想将其向前移动3个字节,我希望它使用某种指针算法将其向上打印以显示“ ing”
我尝试过
mov rax, 1
mov rdi, 1
mov rsi, [string+3]
mov rdx, 3
syscall
为了sys_write字符串向前移动了三个位置,在此示例中将长度更改为3,因为这将剩下多少,但是它不能正常工作。
您想要第四个字节的地址,而不是从该位置加载的qword。
lea rsi, [string+3]
或更好,请使用相对于RIP的寻址模式。如果是NASM,请使用lea rsi, [string+3 + RIP]
或者在Linux上的位置相关代码中,是(NASM)mov esi, string+3
或(GAS)mov esi, OFFSET string+3
以32位立即数的形式获取绝对地址string+3
。
请参见How to load address of function or label into register in GNU Assembler(我的回答也有一些NASM语法)。