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

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

Ранг: 33.6 (посетитель)
Активность: 0.040
Статус: Участник

Создано: 18 июля 2007 02:11
· Личное сообщение · #1

Вопрос простой, просто сам туплю чего-то.
Когда в asm виде вызвается некая функция то часто помимо передачи параметров устанавличвается определенное значение регистра ECX например:

PUSH -1
PUSH ECX
MOV ECX,DWORD PTR [EaX+4103]
CALL Func1

Ну так вот, если установку ecx убрать или изменить то все упадет, причем что интересно у многих функций этот ECX равный перед вызовом функции хотя функции делают совершенно разные вещи.
Что это за ecx и почему он не передается в виде параметра?



Ранг: 213.5 (наставник)
Активность: 0.120
Статус: Участник
забанен

Создано: 18 июля 2007 05:23
· Личное сообщение · #2

sliderZ
Хз. над, чем ты там паришься, но это похоже на гавнокод который оставляют после себя компиляторы ЯВУ, для получения служебной информации типа хендлы и т. д…
Вполне возможно, что прога имеет в теле у себя отладочную инфу, юзает компоненты, COM интерфейс и etc,… а в EAX указатель на структуру(таблицу) с "общими данными"…
Менять естественно нельзя и к параметрам функи отношение только косвенное…

-----
ЗЫ: истЕна где-то рядом, Welcome@Google.com




Ранг: 162.2 (ветеран)
Активность: 0.090
Статус: Участник

Создано: 18 июля 2007 05:28
· Личное сообщение · #3

sliderZ
Что в есх - нужно смотреть программу. На счёт передачи параметров - всё зависит от соглашения о способе вызова(calling conventions)(use google) В кратце - параметры для ф-ии могут передаваться не только черех стек.



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

Создано: 18 июля 2007 11:11
· Личное сообщение · #4

asd пишет:
В кратце - параметры для ф-ии могут передаваться не только черех стек.

Точно, я с тобой согласен. Я уже часто видел, как через ECX передаётся счётчик для функции (непомню точно для какой) например, если функция должна что нибудь повторять несколько раз.




Ранг: 155.4 (ветеран)
Активность: 0.140
Статус: Участник
Робо-Алкаш

Создано: 18 июля 2007 11:42
· Личное сообщение · #5

4 вида передачи параметров:
- через стек
- через регистры
- через память
- через жопу ))) самый изощренный

Их можно комбинировать, а вообще почитал бы больше про программирование процедур и передачу параметров.

-----
Researcher





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

Создано: 18 июля 2007 11:48
· Личное сообщение · #6

Компиляторы. Зачем тебе это только. Стандартное применение ECX это кол-во повторений для цикла конечно. Но ЯВУ юзают все регистры по максимуму и без разбора.

-----
radio uno in ibisa ...




Ранг: 123.7 (ветеран)
Активность: 0.10
Статус: Участник
1nn0$/100

Создано: 18 июля 2007 15:10
· Личное сообщение · #7

sliderZ
вроде бы таким образом Дельфин устанавливает адрес функи из класса. тока там тогда должен быть вызов типа call dword ptr [ecx+xxxxx] в этом духе. т.е. сперва в ecx грузится оффсет объекта, а потом вызывается функа этого самого объекта.

-----
Blame the victim!





Ранг: 155.4 (ветеран)
Активность: 0.140
Статус: Участник
Робо-Алкаш

Создано: 18 июля 2007 16:52
· Личное сообщение · #8

1nn0cent, ыгы... Ты не знаешь есть где нить статьи по поводу... того как различные языки устанавливают адреса функций из класса, да и еще разные др. фичерзы?

-----
Researcher





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

Создано: 18 июля 2007 17:09
· Личное сообщение · #9

Исследование кода генерируемого Delphi не подойдет?

-----
radio uno in ibisa ...





Ранг: 155.4 (ветеран)
Активность: 0.140
Статус: Участник
Робо-Алкаш

Создано: 18 июля 2007 22:28
· Личное сообщение · #10

Icelot, не читал) спасибо.

-----
Researcher




Ранг: 213.5 (наставник)
Активность: 0.120
Статус: Участник
забанен

Создано: 19 июля 2007 05:09 · Поправил: Demon666
· Личное сообщение · #11

1nn0cent
Ога! Тоже самое только терминологистее…
sliderZ
А вообще в таких случаях надо
1. с инета слить для ИДЫ файлы для разных компиляторов с расширением *.sig
2. открыть подопытную прогу надо в ИДЕ и выбрать Menu->View->Open Subviews->Signatures(Shift+F5) и там ПКМ->Apply new signature… и выбрать для компилятора нужную базу сигнатур, ида пометит участки кода, которые не посредственно принадлежат компилятору, но при этом также надо еще и не пренебрегать воспользоваться старыми версиями баз так как там более свежие сигны могут не все найти
Для примера есть для дельфина 7 но использовать и для 6, 5, 3 а также еще можно прихватить от билдера С.. подобных, в зависимости какие компоненты используются в проге… таким методом можно добиться более качественного парсинга приги чем в dede, но это зависит от желания и знаний естественно…
3. после того как ида распарсит статик код в проге мы будем видеть код, который написал сам программист, сталобыть все как на ладони…
4. и еще примочка которую нужно делать чтобы крякозябры в иде не отображались а были нормальные имена фунок
Иногда помогает Menu->Option->Demangled names… и выбрать Names

-----
ЗЫ: истЕна где-то рядом, Welcome@Google.com




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

Создано: 31 июля 2007 15:13
· Личное сообщение · #12

Согласен с overwriter'ом, что способы передачи параметров можно комбинировать. Посему есх в данном случае и является параметром. И вообще по моему эта тема уже исчерпана - не знаю даже зачем сам пишу



Ранг: 51.0 (постоянный)
Активность: 0.030
Статус: Участник

Создано: 31 июля 2007 15:48
· Личное сообщение · #13

sliderZ пишет:
PUSH -1
PUSH ECX
MOV ECX,DWORD PTR [EaX+4103]
CALL Func1

такое часто бывает, в Delphi программах, например.
скорее всего, Func1 - метод какого-то класса, принимает два аргумента. а в ECX адрес самого объекта.
когда заглядываешь в такие функции, то скорее всего там где-нибудь в начале mov esi, ecx (или mov в какой-нибудь другой "устойчивый" регистр типа edi и ebx), и потом это esi всюду используется...



Ранг: 51.0 (постоянный)
Активность: 0.030
Статус: Участник

Создано: 31 июля 2007 15:50
· Личное сообщение · #14

sliderZ пишет:
Что это за ecx и почему он не передается в виде параметра?

соответственно, чтоб стэк не насиловать лишний раз. вдруг продавит его? ))


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


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