Я начал изучать сборку и столкнулся с проблемами, связанными с 32-битным абсолютным адресом. Я недавно прочитал сообщение об этой аналогичной проблеме Почему возникают проблемы с абсолютной адресацией?. Можете ли вы спросить, почему, если я укажу без записи default rel
, я получаю ошибку, связанную с тем, что базовый адрес исполняемого файла в Mac OS начинается с 4 ГБ.
mov qword[test], ‘hello’
Подводя итог всему, проблема в том, почему mov qword[test], ‘hello’
адресация 32-битная? И если я перед mov qword[test], ‘hello’
укажу это REX.W
, это не поможет мне решить проблему с 32-битной адресацией?
Спасибо
rip+offset
(также 32 бит). Вы можете указать nasm с помощью ключевого словаrel
илиdefault rel
, если хотите относительного. Обратите внимание, чтоqword [test]
относится к размеру операции, а не к размеру адреса. - person Jester   schedule 20.06.2021[disp32]
или[rip+rel32]
. См. Ссылка на содержимое ячейки памяти. (режимы адресации x86). Мой ответ на Почему глобальные переменные в x86-64 обращаются относительно указателя инструкции? включает объяснение того, как RIP-relative работает в Машинный код. - person Peter Cordes   schedule 20.06.2021