Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.07.2012, 12:38   #1
targred
 
Регистрация: 29.01.2010
Сообщений: 5
По умолчанию IDA, поиск функции из DLL и выполнение в EXE

Добрый день. Подскажите, пожалуйста. Я хочу из чужой DLL узнать, какими функциями выполнить действие, включение лампочек на веб камере, что бы включать их из своей программы. Использовал IDA. Как функции называются нашел.
Но остался вопрос. Я не нашел где эти функции вызываются программой производителя? Адреса стека куда сохраняются адреса после получения из GetProcAddress есть, что сохраняют есть, а как и где вызывают нет.
Я сделал свою Dll с двумя функциями, и программу вызывающие эти функции. В итоге IDA тоже самое практически показывает, но когда я хочу пройти по значению 'LEDOff' оно не куда не проходит, а в моем примере идет к расположению имен функций, которые и вызываются и в поиске легко находятся в коде.
Цитата:
.data:0042E228 ; char aLedoff[]
.data:0042E228 aLedoff db 'LEDOff',0 ; DATA XREF: sub_401EE0+AF o

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

Или так. Как из стека берется по определенному адресу адрес функции в DLL и вызывается, так как у меня после нахождения адреса ставится в соответствии имя функции,(последняя строка)

Код:
push    offset aLetterlist ; "LetterList"
mov     edi, esp
push    offset ModuleName ; "mydll.dll"
call    ds:__imp__GetModuleHandleW@4 ; GetModuleHandleW(x)
cmp     edi, esp
call    j__RTC_CheckEsp
push    eax             ; hModule
call    ds:__imp__GetProcAddress@8 ; GetProcAddress(x,x)
cmp     esi, esp
call    j__RTC_CheckEsp
mov     LetterList, eax

а в программе производителя адрес засовывается в стек


push offset aLedoff ; "LEDOff"
push eax ; hModule
call edi ; GetProcAddress ; GetProcAddress:
mov [esi+10Ch], eax







Что делать?
Спасибо.

Последний раз редактировалось Stilet; 22.07.2012 в 13:00.
targred вне форума Ответить с цитированием
Старый 22.07.2012, 12:50   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Цитата:
Сообщение от targred Посмотреть сообщение
Что делать?
Учиться пользоваться отладчиком.

1) Загрузите программу производителя в отладчик
2) Ставить точку прерывания на mov [esi+10Ch], eax
3) После остановке в етой точке пойдти на указанный адрес (ЕАХ) и поставить точку прерывания там
4) Продолжить выполнения программы
5) После остановки программы во второй точке смотреть стек, в часности откуда пришел вызов
6) Идете в IDA на адрес места вызова и продолжаете разбор
waleri вне форума Ответить с цитированием
Старый 25.07.2012, 14:05   #3
targred
 
Регистрация: 29.01.2010
Сообщений: 5
По умолчанию

Еще вопрос.
Мои камеры идут без драйверов, только программа производителя с одной DLL. Эта программа включает и выключает ИК подсветку. Используя IDA функции я нашел. Программку стряпал, но нерабочую. Лазить искать еще несколько дней нет сил, так как вероятнее ничего не замечаю из-за поверхностных знаний и притом же эта программа одновременно включает только подсветку на одной камере, а мне надо на 4 – х поэтому навряд ли я найду как включить на четырёх используя эту dll.

НО, ПРОГРАММА ИДЕТ БЕЗ ДРАЙВЕРОВ, следовательно, все функции с описанием есть в самой системе WinAPI или КАК?
Вопрос.
Куда полезть копаться, что бы включить эти лампочки? Камеры подключаются через USB. Как я понимаю надо найти устройство (Как? Где прочитать?) А затем, чего-то передать.
targred вне форума Ответить с цитированием
Старый 25.07.2012, 15:07   #4
targred
 
Регистрация: 29.01.2010
Сообщений: 5
По умолчанию

Покапался в функциях вкл\вкл они дваем используют ksproxy.ax следующей строкой call dword ptr [ecx+0Ch]. Проходя по адресу в этой строке и ставя точьку останова, при дальнейшем исполнении программы программа там не останавливается (но внутрь заходит и лампочки вкл\вкл) и дадльше посмотреть нет возможности.

ksproxy.ax — WDM Streaming ActiveMovie Proxy. Используя этот драйвер от микрософт и включается мои лампочки.

Вопрос почему я немогу зайти на call dword ptr [ecx+0Ch]?
Может Кому что известно про этот ksproxy.ax ?
targred вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск текста в массиве Char, массив берётся у бинарного файла(exe, dll) Человек_Борща Общие вопросы Delphi 13 08.10.2011 20:06
Загрузка Библиотеки в exe и интервал на выполнение Excellion Общие вопросы Delphi 2 20.01.2011 03:39
Из программы 1.exe создаем пустой файл 2.exe. Как из программы 1 внести API функции в программу 2? X-LEV-X Общие вопросы Delphi 7 09.03.2010 08:33
Запуск Load.dll (бывшая Load.exe) в дереве проц-ов, Как запустить прогой на C# .dll-ку kapustin Общие вопросы .NET 10 23.09.2009 22:20
Выполнение функции nikleb JavaScript, Ajax 7 10.08.2008 01:49