Частина 12 - Вантажний ефективний адрес
Для повного змісту всіх уроків натисніть нижче, оскільки це надасть вам короткий зміст кожного уроку, а також теми, які будуть розглянуті.
При виконанні бінарного коду в RAM операційна система відмапує код в сегмент даних, де вона знаходить вільне місце в пам'яті.
Вантажний ефективний адрес завантажує вказаний адресу пам'яті як вказівник будь-якої змінної. Наприклад:
lea rbx, my_var
Цей код завантажить адресу my_var в rbx.
У C++ вказівник насправді додає те, чого користувач побачив би як одне, якщо щось було збільшено, однак воно насправді переміщує його на 2 байти вперед під поверхнею, припускаючи, що воно має довжину слова або 16 біт або 2 байти.
Те саме стосується і збірки.
У збірці кожен байт адресується. Наприклад:
lea rax, my_var
inc rax
mov word ptr [rax], rbx
Повімо, що значення 0x20 знаходиться в rbx. Цей вище інструкція розмістить значення 0x20 в несловесній межі, що призведе до помилки. Вам потрібно збільшити rax на 2, щоб цього уникнути.
Наступна неділя ми вийдемо в сегмент даних! Підтримуйте нас!