Сейчас на форуме: vsv1 (+3 невидимых)

 eXeL@B —› Вопросы новичков —› Фокусы с адресацией?(
Посл.ответ Сообщение

Ранг: 0.8 (гость)
Активность: 0=0
Статус: Участник

Создано: 12 марта 2008 17:54 · Поправил: Welemir
· Личное сообщение · #1

Start:

mov eax, l1
mov ebx, l2
mov ecx, l3

push ecx
push ebx
push eax

call proc1
add esp,12
ret

Proc1 Proc
push ebp
mov ebp, esp
sub esp,8
mov eax, dword ptr [ebp+8]
mov dword ptr [ebp-4], eax
mov eax, dword ptr [ebp+12]
mov dword ptr [ebp-8], eax
mov eax, dword ptr [ebp+16]
add eax, dword ptr [ebp-4]
add eax, dword ptr [ebp-8]
leave
ret
proc1 endp
text ends
end start

Прошу объяснить *фишку* с адресацией, после sub esp, 8.

Сначала вроде понятно, что в регистры заносятся три переменные, потом в стек заносятся регистры, ток наоборот (правило такое кажись:Р). Потом вызывается процедура, и после неё сразу же указатель стека уменьшается на 12, затем происходит возврат из процедуры. Затем происходит опять вызов процедуры(?),и дальше пошла сохранения указателя стека в регистре ebp.Потом,судя по вышеизложенному, происходит очистка указателя стека путём вычитания из него 8(почему именно восемь непонятно,или забыл уже...).А вот дальше непонятно вааапще)).Ясное дело, что это базовый режим адресации,где база указана в скобках,а почему именно такие числа выбираются нипонятно(то +8 то -16).В учебнике описания не нашёл подробного(там коротко об режимах адресации было изложено). Прошу вот, подсобить...:РР

P.S. Да и вот ещё что, если я где ошибся, описывая программу,поправьте пожалста(это оч важно для меня) )))).



Ранг: 27.7 (посетитель), 2thx
Активность: 0.01=0.01
Статус: Участник

Создано: 12 марта 2008 18:23
· Личное сообщение · #2

нету здесь особой "фишки" - стандартное выделение места в стеке под переданные переменные процедуре и ее локальные переменные.

[ebp + чтото] - доступ к параметрам процедуры (которые забиты в стек push'ами перед call)
+8 потому что в стеке еще лежат "старый" ebp (+0) и адрес возврата из процедуры (+4).
[ebp - чтото] - доступ к локальным переменным процедуры (место под которые выделено вычитанием из esp)

в учебниках это обычно описывается при разжевывании команд
enter
и
leave



Ранг: 0.8 (гость)
Активность: 0=0
Статус: Участник

Создано: 12 марта 2008 19:07
· Личное сообщение · #3

Спасибо,с этим понятно.А почему в конце адд,а не,скажем,мув?((.



Ранг: 27.7 (посетитель), 2thx
Активность: 0.01=0.01
Статус: Участник

Создано: 12 марта 2008 19:20
· Личное сообщение · #4

в конце чего?

это?
add eax, dword ptr [ebp-4]
add eax, dword ptr [ebp-8]

или?
add esp,12



Ранг: 0.8 (гость)
Активность: 0=0
Статус: Участник

Создано: 12 марта 2008 19:57
· Личное сообщение · #5

Угу, add eax, dword ptr [ebp-4]
add eax, dword ptr [ebp-8]

Про верхний совсем забыл))



Ранг: 0.8 (гость)
Активность: 0=0
Статус: Участник

Создано: 12 марта 2008 20:04
· Личное сообщение · #6

Да и вот вопрос ещё лично к тебе,запарился искать)))).Ты знаешь,как сохранить все вектора перед загрузкой ?. Пишут что команда Vecs s, а там такой и в помине нет:РР,потом какие-то команды snap_ save
и snap_compare. Первая сохраняет регион памяти какой-то, а вторая- его сравнивает с другим.А где они без понятия,команды эти(



Ранг: 27.7 (посетитель), 2thx
Активность: 0.01=0.01
Статус: Участник

Создано: 12 марта 2008 20:47
· Личное сообщение · #7

Welemir пишет:
Да и вот вопрос ещё лично к тебе,запарился искать)))).Ты знаешь,как сохранить все вектора перед загрузкой ?. Пишут что команда Vecs s, а там такой и в помине нет:РР,потом какие-то команды snap_ save
и snap_compare. Первая сохраняет регион памяти какой-то, а вторая- его сравнивает с другим.А где они без понятия,команды эти(


ну нее... сам чето курил, а торкнуть меня должно?
главное с адресацией всё понятно (?).

Welemir пишет:
Угу, add eax, dword ptr [ebp-4]
add eax, dword ptr [ebp-8]


функция должна что то полезное сделать - вот она и делает.



Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 13 марта 2008 09:53
· Личное сообщение · #8

Welemir пишет:
Vecs s, а там такой и в помине нет:РР,потом какие-то команды snap_ save
и snap_compare.

CRACKL@B ::: справочники Ассемблер, Delphi, WinAPI
Soft-ICE сохраняет векторы прерываний, когда он загружается, когда LDR.EXE загружает программа и когда используется команда VECS S.
VECS -- Сохранение/восстановление/сравнение векторов прерываний
SNAP -- Запоминает содержимое блока памяти (snap shot)



Ранг: 0.8 (гость)
Активность: 0=0
Статус: Участник

Создано: 13 марта 2008 22:22 · Поправил: Модератор
· Личное сообщение · #9

Ну тык...я это и читал.И где там эти команды в айсе ? Ваще нихрена не понял, как их использовать...

ant_man пишет:
главное с адресацией всё понятно (?).


Ж))))))))))))))).Не курю =(.А это...вот... откопал из книги :Р

а что такое векс и снап йа терь наизусть знаю,а как их хз )


 eXeL@B —› Вопросы новичков —› Фокусы с адресацией?(
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати