Сейчас на форуме: bartolomeo, tyns777 (+5 невидимых) |
eXeL@B —› Программирование —› [Delphi] Возможно ли создание forwarded API? |
Посл.ответ | Сообщение |
|
Создано: 15 марта 2011 18:47 · Личное сообщение · #1 Собственно давно разыскиваю способ создания forwarded API на Delphi. Т.е. что бы в своей DLL была экспортируемая апи, которая указывала, что она перемещена в другую DLL. В Си такое с полпинка делается, даже в масме без проблем, а в делфи даже в интернете ничего нет. Максимум чего добился, это: procedure MyFunc; external 'DllName'; exports MyFunc; Но в таком случае долбаный делфи всё равно указывает, что тело функции в моей DLL а вместо тела функции ставить jmp dword ptr [addr_of_MyFunc_in_DllName] В делфи уже и отложеный импорт прикрутили, а такую древнюю фишку до сих пор нет? ----- Yann Tiersen best and do not fuck |
|
Создано: 15 марта 2011 21:11 · Личное сообщение · #2 |
|
Создано: 15 марта 2011 22:38 · Личное сообщение · #3 |
|
Создано: 16 марта 2011 06:26 · Личное сообщение · #4 |
|
Создано: 16 марта 2011 07:07 · Личное сообщение · #5 ClockMan ты не понял сути. Я говорю про механизм: dll.def Code:
Такой DEF файл заставит линкер сгенерировать таблицу экспорта только из форвардов, т.е. вместо тела API будет строка SuperLib.FuncX и система выдаст приложению, который будет грузить MyLib адрес в SuperLib а не в MyLib. Так вот в Delphi отказались от DEF файла, а как сделать без него я и не знаю. И уже в принципе уверен, что в Delphi вообще не реализовали этот механизм. ----- Yann Tiersen best and do not fuck |
|
Создано: 16 марта 2011 07:20 · Личное сообщение · #6 |
|
Создано: 16 марта 2011 08:01 · Личное сообщение · #7 Ну грубо да, просто для этого M$ придумала специальный механизм, собственно я и спрашиваю можно ли этот механизм заюзать в делфях. Если кому непонятно для чего оно надо. Ясно, что можно сделать все экспортируемые апи у себя, а в этих апи просто вызывать оригинальные. Но в библиотеках еще бывают расшареные структуры. Т.е. есть некая глобальная структура в DLL, ее объявляют как экспортируемую и она появляется в таблице экспорта как экспортируемая API. А потом процесс через GetProcAddress получает адрес этой структуры и начинает с ней работать. Так вот если мы захотим прикинуться такой длл, но вызывать апи из оригинальной, то вот такую структуру мы не проэмулируем, т.к. приложению мы должны отдать адрес именно на нее. Тут нужен только форвардинг. ЗЫ Придется наверное свой биндер писать и в пост билд засовывать. ----- Yann Tiersen best and do not fuck |
|
Создано: 16 марта 2011 08:45 · Поправил: ajax · Личное сообщение · #8 |
|
Создано: 16 марта 2011 09:07 · Личное сообщение · #9 |
|
Создано: 16 марта 2011 09:22 · Личное сообщение · #10 PE_Kill я когда то делал автоматический генератор модуля ддлки для перехвата, но я банально выдирал из ддл экспортируемые функи и делал импор экспорт с последующим вызовом оригинала. Про автоматическую реализацию этого дела в делфе первый раз слышу ----- Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме.... |
|
Создано: 16 марта 2011 10:54 · Поправил: ajax · Личное сообщение · #11 PE_Kill Сейчас поигрался - максимум, что можем получить - джампы. Адреса все равно наши. Придется что-то свое соображать. Есть маза сделать, как ClockMan в первом посте описал, а потом утилью своей import/export пропарсить-поправить... ----- От многой мудрости много скорби, и умножающий знание умножает печаль |
|
Создано: 16 марта 2011 14:20 · Личное сообщение · #12 |
eXeL@B —› Программирование —› [Delphi] Возможно ли создание forwarded API? |