команда mov извлекает данные из памяти в память в сборке x86

Может ли доступ к данным из-за ожидаемой могилы?

В большинстве случаев да. Вызов delete не обнуляет память.

Обратите внимание, что поведение не определено. Используя определенные компиляторы, память может быть обнулена. Когда вы вызываете delete, происходит то, что память помечена как доступная, поэтому в следующий раз, когда кто-то сделает новый , память может быть использована.

Если вы думаете об этом, это логично - когда вы сообщаете компилятору, что вас больше не интересует память (используя delete ), почему компьютер должен тратить время на его обнуление.

0
задан programmersn 13 July 2018 в 21:32
поделиться

2 ответа

Если я хорошо понимаю, инструкция mov загрузила 32-битное представление того, что было по адресу 0x80486b2, в адрес, на который указывает указатель стека ... Правильно ли это?

Нет. Инструкция

mov dword [esp], 0x80486b2

копирует непосредственное значение 0x80486B2 на адрес, на который указывает регистр ESP. Это место является первым параметром, переданным функции scanf.

Итак, в основном мы получаем, что mov только что перемещает данные из памяти в другое место памяти, [. ..]

No. Команда перемещает сразу 32-битное значение в ячейку памяти. Подпись команды MOV в этом случае:

MOV r/m32, imm32        Move imm32 to r/m32.

Значение 0x80486b2 записывается в адрес памяти DWORD, на который указывает регистр ESP.

Команда mov dword [esp + 0x4], eax передает второй параметр из EAX в scanf.

5
ответ дан zx485 17 August 2018 в 12:08
поделиться
  • 1
    Другими словами: он не копирует значение в адрес в стек, он копирует сам адрес (немедленное значение) в стек. Так что это не копия памяти на память. В конце концов, scanf ожидает, что указатель (адрес) будет первым аргументом. – Rudy Velthuis 14 July 2018 в 20:55

Команда mov dword [esp], 0x80486b2 перемещает 32-битное мгновенное значение 0x80486b2 в 32-разрядную ячейку памяти, на которую указывает ESP. Если он переместил 32-битное значение при сохранении адреса 0x80486b2 в пункт назначения, он будет записан как mov dword [esp], dword [0x80486b2]. Однако это не допустимая комбинация операндов для инструкции MOV.

Обратите внимание, что в вашей разборке используется синтаксис NASM.

3
ответ дан Ross Ridge 17 August 2018 в 12:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: