如何在Intel Assembly x86-64中移动地址以字节为单位

问题描述 投票:0回答:1

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

说我有字符串“ string”,我想将其向前移动3个字节,我希望它使用某种指针算法将其向上打印以显示“ ing”

我尝试过

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

为了sys_write字符串向前移动了三个位置,在此示例中将长度更改为3,因为这将剩下多少,但是它不能正常工作。

assembly x86-64
1个回答
0
投票

您想要第四个字节的地址,而不是从该位置加载的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语法)。

© www.soinside.com 2019 - 2024. All rights reserved.