2012-01-07 4 views
1

Я пытаюсь отлаживать программу с помощью ollydbg, и у меня есть сомнение в том, что индексный адрес режима используется с использованием префикса SS.Адрес указателя стека

Вот скриншот:

На данный момент, команда

MOV BYTE PTR SS:[EBP-1],BL 

переместит 8 битов из EBX для решения заостренный в EBP(0012FDCC) вычитают один - 0012FDCB.

Если вышеуказанное неверно, сообщите мне.

В программе ollydbg внизу справа представлено представление стека с первым столбцом по адресу. Почему нет записи 0012FDCB а где 0012FDCB, указывающей на?

ответ

2

Я ничего не знаю о ollydbg; надеюсь, кто-то, кто знаком с ним, также опубликует ответ.

Ваше понимание того, что вы указали нам, будет в основном верным: оно перемещает содержимое BL (которое является нижним 8-битами EBX,) на адрес в сегменте стека, на который указывает [EBP минус 1]. Если EBP 0012FDCCh, то байт будет сохранен в 0012FDCBh.

Обычно мы не говорим, что 0012FDCBh указывает в любом месте, мы просто говорим, что это ячейка памяти, которая в этом случае содержит байт, хотя технически было бы правильнее сказать, что это адрес памяти и, следовательно, в некотором смысле число «указывает» на байт. Но мы предпочитаем думать о указателях или регистрах, указывающих на память, а не на чистые числа.

Я понятия не имею, почему ollydbg не показывает 0012FDCBh. Вы уверены, что это не показывает? Возможно, это показывает 0012FDCCh и 0012FDC8h? Если это так, то это просто показывает стек памяти, сгруппированных в DWORD, поэтому 0012FDCBh не отображается, потому что соответствует одному из четырех байтов, которые живут в DWORD в 0012FDC8h. Посмотрите на значение DWORD, хранящееся в 0012FDC8h, одноступенчатое над инструкцией MOV, и вы увидите, что наиболее значимый байт этого слова изменяется на значение BL. (Если значение в этом адресе отличалось от значения BL.) Ollydbg также может отображать память, сгруппированную в строки длиннее, чем один DWORD, но тот же принцип применяется.

+1

andmart, увидев скриншот, похоже, что то, что происходит, именно то, что я догадался. ollydbg показывает содержимое стека в DWORDS. Итак, посмотрите на самый старший байт DWORD в 0012FDC8h, там будет храниться BL. –

Смежные вопросы