Я только начал изучать 64-битную сборку linux и пытался понять разницу между lea и mov. Но при создании тестового файла я получаю ошибку сегментации, из-за которой я просто не понимаю, почему. Ошибка возникает из-за символа mov r10,[rax] в примере кода. Но когда я меняю место mov r10,[rax] на lea r11,[rax], я получаю ошибку, когда выполняется леа.

Моя программа:

global _start
section .text

_start:
mov rax,16
lea r11,[rax]
mov r10,[rax]
mov r9,rax

mov rax,60
xor edi,edi
syscall
0
Wealot 14 Фев 2018 в 14:07

1 ответ

Лучший ответ

Что вы ожидаете от ячейки памяти 16 (0x10)?

Ваш код

mov rax,16
mov r10,[rax]

Это означает, что вы пытаетесь загрузить 64-битное значение из адреса памяти RAX в R10. Адрес 16 обычно не отображается в вашем программном пространстве.

2
Uwe Plonus 14 Фев 2018 в 14:18