Ваша команда x
сбросила только 1 байт, но ваша инструкция mov
загрузила 8 байт. Младший байт 0x20
, потому что x86 имеет младший порядок. (Ваш ручной адрес рассчитан правильно).
Используйте help x
, чтобы увидеть, какие модификаторы вы можете использовать для разных размеров, и чтобы сбросить несколько элементов.
Когда вы используете print $rdx
, это десятичное число не шестнадцатеричное. Это совпадение, что младшие 2 цифры равны 40
, что похоже на 0x20
. (Но вы уже поняли это, и да, шестнадцатеричное представление заканчивается на 0x20
).
Используйте p /x $rdx
для печати значений reg в шестнадцатеричном формате. Или используйте layout reg
, чтобы использовать режим TUI с разборкой и зарегистрировать «окна» внутри терминала.
Также я бы предложил si
(пошаговые инструкции) вместо ni
, который переходит через вызовы. Но и то, и другое хорошо, если вы знаете, что они делают, при условии, что вы n
и s
не будете переходить к исходной строке C, когда вы собираетесь выполнять инструкции.