Как переместить адрес в Intel Assembly x86-64 вперед на количество байтов - PullRequest
0 голосов
/ 29 сентября 2019

Мне интересно, как переместить адрес на заданное количество байтов в Intel x86-64

Скажем, у меня есть строка "string", и я хочу переместить ее на 3 байта вперед, я хочу, чтобы онавыведите «ing», используя некоторую арифметику указателя, чтобы переместить его вверх

Я попытался

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

, чтобы sys_write строка переместилась на три позиции вперед, и в этом примере измените длину на 3, потому что этосколько их останется, однако это не работает должным образом.

1 Ответ

1 голос
/ 29 сентября 2019

Требуется адрес 4-го байта, а не загрузка слова из этой позиции.

lea rsi, [string+3] Или лучше использовать режим адресации, относящийся к RIP.Если это NASM, используйте
lea rsi, [string+3 + RIP]

Или в зависимом от позиции коде в Linux, (NASM) mov esi, string+3 или (GAS) mov esi, OFFSET string+3, чтобы получить абсолютный адрес string+3 какНемедленный 32-разрядный.

См. Как загрузить адрес функции или метки в регистр в GNU Assembler (мой ответ там также имеет некоторый синтаксис NASM).

...