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

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

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

Создано: 12 октября 2009 22:37
· Личное сообщение · #1

Подскажите, если несложно. Есть dll, есть exe который из нее функции вызывает.
Мне необходимо вызывать эти функции из своей программы, т.е. определить прототипы этих функций, определить, какие у них аргументы. С помощью Ida Pro я нашел место где выполняется загрузка нужных функций из dll(GetProcAddress), вроде виден полученный адрес функции. Но что делать дальше? Пробовал ставить бряк на этот адрес, но он не сработал при отладке.
Извините, если уже обсуждалось где-то, ткните пожалуйста.




Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 13 октября 2009 02:30
· Личное сообщение · #2

а где программа + DLL?

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes




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

Создано: 13 октября 2009 11:52
· Личное сообщение · #3

SkyStar пишет:
вроде виден полученный адрес функции.

Ну для начала в отладчике посмотреть вроде это адрес функции или на самом деле.
Без программы трудно сказать что-то определенное - возможны разные варианты.



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

Создано: 13 октября 2009 13:39
· Личное сообщение · #4

Coderess пишет:

а где программа + DLL?

к сожалению, поделиться не могу.


tundra37 пишет:
Ну для начала в отладчике посмотреть вроде это адрес функции или на самом деле.

Ну я смотрю значение регистра eax, после вызова GetProcAddress.
Правильно я понимаю, что по этому адресу перейдет управление, если будет вызвана функция?

tundra37 пишет:
возможны разные варианты.

а нельзя пояснить хотя бы простейший случай?

Спасибо.



Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 13 октября 2009 14:54 · Поправил: Vovan666
· Личное сообщение · #5

ну самое простое это, смотришь табличку экспорта своей длл любым PE-редактором, и дальше подгружаешь примерно так:
Code:
  1. invoke LoadLibraryA,'super-puper.dll'
  2. invoke GetProcAddress,eax,'super-puper-procedure'
  3. call eax

или что-то типа того.



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

Создано: 13 октября 2009 16:29
· Личное сообщение · #6

Ну как вызвать-то её мне понятно.
Мне надо определить её параметры, причем не только формально типы, но и
по смыслу.




Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 13 октября 2009 20:37
· Личное сообщение · #7

* смотри количество push перед вызовом
* сделай свою длл с функциями-пустышками

-----
EnJoy!




Ранг: 114.8 (ветеран), 41thx
Активность: 0.10
Статус: Участник

Создано: 13 октября 2009 20:44 · Поправил: _ruzmaz_
· Личное сообщение · #8

SkyStar пишет:
Мне надо определить её параметры, причем не только формально типы, но ипо смыслу.

если нужен смысл параметров, то скорее всего придется вникать в смысл самой функи)



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

Создано: 13 октября 2009 20:50
· Личное сообщение · #9

Jupiter пишет:
* смотри количество push перед вызовом

дело в том, что я не могу найти место вызова.
Jupiter пишет:
* сделай свою длл с функциями-пустышками

а что это даст?



Ранг: 114.8 (ветеран), 41thx
Активность: 0.10
Статус: Участник

Создано: 13 октября 2009 20:59
· Личное сообщение · #10

Ну так ты саму функу в иде смотрел? Какие там аргументы нашлись?



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

Создано: 13 октября 2009 21:33 · Поправил: SkyStar
· Личное сообщение · #11

_ruzmaz_ пишет:
Ну так ты саму функу в иде смотрел? Какие там аргументы нашлись?

дело в том, что переходя по этому адресу вижу кучу db(см. картинку)

не знаю что с этим делать



Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 13 октября 2009 21:40
· Личное сообщение · #12

В олли Alt+E,выбираешь свою длл,Ctrl+N, там выбирай нужную тебе функцию и изучай.




Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 13 октября 2009 21:42
· Личное сообщение · #13

на скриншоте у тебя код представлен как данные
должно быть так:

Code:
  1. 55                             push        ebp
  2. 8BEC                           mov         ebp,esp
  3. 83C4DC                         add         esp,0DC
  4. B8A8021401                     mov         eax,0011402A8
  5. E8????????                     call        ????????


выкладывай уже длл, не морочь людям голову

-----
EnJoy!




Ранг: 114.8 (ветеран), 41thx
Активность: 0.10
Статус: Участник

Создано: 13 октября 2009 21:57
· Личное сообщение · #14

SkyStar пишет:
не знаю что с этим делать

Попробуй выделить все это добро, выбрать в меню Edit -> Code и нажать на Force (и потом еще Yes, если спросят)



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

Создано: 13 октября 2009 21:57 · Поправил: SkyStar
· Личное сообщение · #15

Спасибо, но выложить, к сожалению, не могу.
Я загрузил библиотеку отдельно в иду, сейчас изучаю.
Единственное, там адреса другие.


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


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