![]() |
eXeL@B —› Вопросы новичков —› Запуск функции из длл. (Кроме файла dll ничего нету) |
Посл.ответ | Сообщение |
|
Создано: 29 ноября 2007 15:04 · Личное сообщение · #1 В чем задача. У меня есть dll, но нет ее исходника и ни h ни lib файлов. Мне нужно запустить некоторые функции из этой библиотеки. При этом с помощью IDA я могу вытащить список параметров функции. Как мне проще всего это сделать??? Хотелось бы какнибудь создать заголовок и прописать импорт функций в самой программе, которая должна использовать эти функции... ![]() |
|
Создано: 29 ноября 2007 15:39 · Личное сообщение · #2 |
|
Создано: 29 ноября 2007 18:07 · Поправил: Grom_ · Личное сообщение · #3 Смотри название функций с помощью утили типо dumpbin или типо такого (в Visual Studio 6/2003) с ключом /EXPORT, там Имя покажет в точности(до символа @ после помоему суммарный размер параметров в байтах ) как нужно вызывать. Это прокатит если Длл была сделанна на Си (у мя прокатывало). Учти там могут встретиться символы подчеркивания ,- они важны. Выложи Длл. А дальше хватай указатели функций через getProcAddress ![]() ![]() |
|
Создано: 29 ноября 2007 21:07 · Поправил: s0larian · Личное сообщение · #4 shob_vas, качни dependency walker, он тебе сделает function name de-mangling. Потом напишешь свой header с class declarations, сделаешь GetProcAddress(полное_имя_со_всем_мусором) и cast полученного адреса в свой указатель. Другой вариант, вчера нешёл в каком-то msdn блоге - сделать свой DLL с таким же классом и пустыми функциями - заглушками. В процессе получишь .lib который сможешь использовать вкупе с оригинальной либой. Геморно, но действенно. В таком случае просто будешь делать #include и компилер с линкером сделаюв все imports. ![]() |
|
Создано: 30 ноября 2007 00:01 · Поправил: D-503 · Личное сообщение · #5 D-503 пишет: почему когда я пишу на фасме мне никакие lib и LoadLibrary не нужны просто пишу в импорт имя библиотеки и функции и нормально пашет надо только дллку в папку с прогой кинуть а на Си мне без lib или LoadLibrary не обойтись? s0larian пишет: D-503, эээ... для VC++ нужен import lib, либо сам делаешь LoadLibrary. Не уверен про fasm, но думаю что ты вызывал системные функции для которых у линкера есть import libs. Если нет, то давай пример в студию весь пример выкладывать не буду... вот нужный кусок:
![]() |
|
Создано: 30 ноября 2007 01:55 · Личное сообщение · #6 |
|
Создано: 30 ноября 2007 06:03 · Личное сообщение · #7 |
|
Создано: 30 ноября 2007 18:40 · Поправил: AlexZ · Личное сообщение · #8 shob_vas пишет: В чем задача. У меня есть dll, но нет ее исходника и ни h ни lib файлов. Мне нужно запустить некоторые функции из этой библиотеки. При этом с помощью IDA я могу вытащить список параметров функции. Как мне проще всего это сделать??? Для разных языков/компиляторов по-разному. Для делфи, например, достаточно описать имя дллки и прототипы функций - этого хватит. Так же нужно учитывать тип вызова данной функции (читать соглашения о вызовах, stdcall, например ). Для МАСМ и, кажись, ТАСМ придется сначала создать .lib при помощи утили из комплекта - тебе уже подсказали. ----- Я медленно снимаю с неё UPX... *FF_User* ![]() |
|
Создано: 30 ноября 2007 22:32 · Личное сообщение · #9 s0larian AlexZ Сейчас попробовал ваш совет. Сделал пробную _рабочую_ дллку и _заглушечную_ дллку с такими же функциями, но пустыми. Откомпили простенькую прогу под _заглушечную_ длл а потом поменял саму библиотеку (dll) на _рабочую_. И все работает!!! =))) Большое спасибо!! Сейчас буду пробовать на библиотеке с експортами классов. ![]() |
|
Создано: 30 ноября 2007 23:09 · Личное сообщение · #10 |
|
Создано: 01 декабря 2007 00:20 · Личное сообщение · #11 |
|
Создано: 01 декабря 2007 00:31 · Личное сообщение · #12 |
|
Создано: 01 декабря 2007 01:12 · Личное сообщение · #13 |
|
Создано: 03 декабря 2007 15:40 · Личное сообщение · #14 |
|
Создано: 03 декабря 2007 18:15 · Личное сообщение · #15 |
|
Создано: 03 декабря 2007 22:45 · Личное сообщение · #16 |
|
Создано: 03 декабря 2007 23:55 · Личное сообщение · #17 |
|
Создано: 04 декабря 2007 21:12 · Личное сообщение · #18 |
![]() |
eXeL@B —› Вопросы новичков —› Запуск функции из длл. (Кроме файла dll ничего нету) |