Сейчас на форуме: asfa, _MBK_, Adler (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Локальные переменные (IDA)
Посл.ответ Сообщение

Ранг: 5.8 (гость)
Активность: 0.010
Статус: Участник

Создано: 11 января 2012 03:46 · Поправил: VintProg
· Личное сообщение · #1

Есть такой код:

Code:
  1. .text:00627D50 000 53                                             push    ebx
  2. .text:00627D51 004 56                                             push    esi
  3. .text:00627D52 008 57                                             push    edi
  4. .text:00627D53 00C 55                                             push    ebp
  5. .text:00627D54 010 83 EC 30                                   sub     esp, 30h  
  6. .text:00627D57 040 30 DB                                        xor     bl, bl


что тут именно происходит?
какие-то значение из регистров ebx, esi, edi, ebp кидаются в стек, потом указатель стека мину суется
esp-30h
и обнуление...

для чего такая ерунда делается?




Ранг: 57.7 (постоянный), 49thx
Активность: 0.070
Статус: Участник

Создано: 11 января 2012 07:54
· Личное сообщение · #2

VintProg кто ж тебе скажет не видя программу




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 11 января 2012 08:41
· Личное сообщение · #3

VintProg пишет:
какие-то значение из регистров ebx, esi, edi, ebp кидаются в стек

Состояния регистров сохраняются. Значит ниже регистры используются для работы функции. Потом состояние должно восстановиться путем извлечения сохраненных состояний со стека.

VintProg пишет:
потом указатель стека мину суется esp-30h

Потом резервируется 30h (48d) байт на стеке. Для чего - нужно смотреть дальше по коду, видимо под локальные переменные, на которые не хватило регистров, или просто под небольшой буфер.


VintProg пишет:
и обнуление...

Обнуляется младшие 8 бит регистра ebx

VintProg пишет:
для чего такая ерунда делается?

Для пошагового управления процессором, для чего же еще.

-----
Yann Tiersen best and do not fuck




Ранг: 85.4 (постоянный), 51thx
Активность: 0.090
Статус: Участник

Создано: 11 января 2012 11:40
· Личное сообщение · #4

сохранили регистры, создали локальных переменных на 30h байт, вот и все что делает код



Ранг: 5.8 (гость)
Активность: 0.010
Статус: Участник

Создано: 11 января 2012 17:16
· Личное сообщение · #5

Может быть по этой теме кто ссылку посоветует. Я хочу научится, понимать это глубоко.




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 11 января 2012 17:19
· Личное сообщение · #6

По этой теме-это по какой? Что делают эти инструкции? Возьми любую книжку по асму. А вообще линк в шапке есть https://ssl.exelab.ru/kid.php




Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 11 января 2012 17:27
· Личное сообщение · #7

VintProg пишет:
Я хочу научится, понимать это глубоко.




Найди книги -

Ассемблер для процессоров Intel Pentium - Юрий Магда
Assembler. Практикум - Юров В.И.
Assembler. Учебник для вузов. Второе издание - Юров В.И.
Пирогов В. - Ассемблер и дизассемблирование 2006

В сети есть) Ищи сам) Помогает в понимании

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube




Ранг: 5.8 (гость)
Активность: 0.010
Статус: Участник

Создано: 11 января 2012 18:11
· Личное сообщение · #8

74 cb JZ rel8 Jump short if zero (ZF <-- 1).

кстати вот что в мануалах нашел. Что означает это стрелка <--? Я не могу понять что происходит с ZF.
написано прыжок если 0.

а если такая конструкция?

Code:
  1. mov    eax, 100h
  2. cmp    eax, 100h
  3. jz       short loc_627DD4


не могу понять, здесь же не ноль, значит прыжка не будет?




Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 11 января 2012 18:38 · Поправил: neomant
· Личное сообщение · #9

Книжки уже посоветовали.
По 74 cb JZ rel8 Jump short if zero (ZF <-- 1)
прыжок будет осуществлен, если в результате предыдущих операций был установлен флаг нуля, то есть ZF = 1.
А cmp для простоты рассматривай как операцию вычитания.

-----
Следуй за белым кроликом




Ранг: 481.4 (мудрец), 109thx
Активность: 0.180
Статус: Участник
Тот самый :)

Создано: 11 января 2012 18:53 · Поправил: Hexxx
· Личное сообщение · #10

будет прыжок. cmp делает вычитание т.е. 100-100=0 и будет установлен флаг Z

mak пишет:
Ассемблер для процессоров Intel Pentium - Юрий МагдаAssembler. Практикум - Юров В.И.Assembler. Учебник для вузов. Второе издание - Юров В.И.Пирогов В. - Ассемблер и дизассемблирование 2006

имхо полезнее прочитать главу "Шаг седьмой. Идентификация ключевых структур языков высокого уровня" в "Техника хакерских атак. Фундаментальные основы хакерства" Криса Касперски. А не читать книги про абстрактный ассемблер. Справочник по асму конечно нужен, но читать его...

-----
Реверсивная инженерия - написание кода идентичного натуральному




Ранг: 5.8 (гость)
Активность: 0.010
Статус: Участник

Создано: 11 января 2012 19:28 · Поправил: VintProg
· Личное сообщение · #11

Code:
  1. mov    eax, 10h
  2. cmp    eax, 100h
  3. jz       short loc_627DD4


если так, то значит будет больше нуля, в флаге, если не рассматривать отрицательные числа. в IDA еще есть глубина стека, может быть по ней лучше можно ориентироваться?



Ранг: 481.4 (мудрец), 109thx
Активность: 0.180
Статус: Участник
Тот самый :)

Создано: 11 января 2012 20:40
· Личное сообщение · #12

При чем тут глубина стека?

-----
Реверсивная инженерия - написание кода идентичного натуральному




Ранг: 5.8 (гость)
Активность: 0.010
Статус: Участник

Создано: 11 января 2012 21:30
· Личное сообщение · #13

да я имел введу вообще, может по глубине стека ориентирования лучше, в исследование...




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 12 января 2012 08:27 · Поправил: PE_Kill
· Личное сообщение · #14

VintProg пишет:
если так, то значит будет больше нуля, в флаге, если не рассматривать отрицательные числа

У процессора нет знаковой арифметики, есть что то вроде ее эмуляции посредством флагов и спецкоманд.

А у jz есть синоним - je. Прыжок если равно. Т.е. пример выше можно рассматривать или так:

(jz)
если eax - 100h равно нулю, то...

или так

(je)
если eax равно 100h, то...

VintProg пишет:
да я имел введу вообще, может по глубине стека ориентирования лучше, в исследование...

По глубине стека можно определить глубину стека

-----
Yann Tiersen best and do not fuck





Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 12 января 2012 10:28
· Личное сообщение · #15

VintProg
Чтобы понять всё глубоко надо знать как работает стек(судя по первому посту вы незнаете этого) что такое мнемокод,машинный код,флаги,регистры,ну иметь таблицу по коммандам.

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.



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


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