Forward to other DLL
От: Peshuha Россия  
Дата: 11.03.03 08:11
Оценка:
Hello Народ!
Не подскажите как сделать экспорт из своей библиотеки на на другой безымянный из другой библиотеки.
Поясню, а то как-то получилось не очень:

Обычный экспорт:

LIBRARY ExpFuncs
EXPORTS

NamedFunction_Ord1=kernel32.AddAtomA @1
NonamedFunction_Ord2=kernel32.AddAtomA @2 NONAME


Это ссылки на ИМЕНОВАННУЮ ф-цию из другой библиотеки.В последствии, если прогнать полученную ExpFuncs через dumpbin:

dumpbin ExpFuncs /exports 
получим :

    ordinal hint RVA      name

          1    0          NamedFunction_Ord1 (forwarded to kernel32.AddAtomA)
          2               [NONAME] (forwarded to kernel32.AddAtomA)


А я хочу, чтобы получилось:


    ordinal hint RVA      name

          1    0          NamedFunction_Ord1 (forwarded to kernel32.[NONAME] 1)
          2               [NONAME] (forwarded to kernel32.[NONAME] 1)


Заранее спасибо, Илья
ЗЫ: пишем в VC 6.0



11.03.03 11:18: Перенесено модератором из 'C/C++' — ПК
... Мы не привыкли отступать! И расколоть его поможет киножурнал "Хочу Все Знать"! ;)
Re: Forward to other DLL
От: Slicer [Wirkwood] Россия https://ru.linkedin.com/in/maksim-gumerov-039a701b
Дата: 11.03.03 08:17
Оценка: 5 (1)
Здравствуйте!

Строка переназначения экпорта имеет формат вида “NTDLL.RtlDeleteCriticalSection”, т.е. начинается с названия модуля, к которому передаются обращения к символу (расширение имени модуля не указывается, оно обязательно должно быть .DLL), за которым после символа точки следует имя символа, под которым этот модуль его экспортирует. Вместо имени можно указать номер в виде “#n”, например: “NTDLL.#491” (номер указывается в десятичной системе счисления).
То есть если через DEF-файл, должно быть

EXPORT
MyFunc=kernel32.#1

только почему-то у меня не работает. Руки кривые?
А вот если в сырце будет

#pragma comment(linker, "/EXPORT:ShowMessage=kernel32.#1")


— тогда все ОК.

Slicer
Специалист — это варвар, невежество которого не всесторонне :)
Re[2]: Forward to other DLL
От: Peshuha Россия  
Дата: 11.03.03 08:29
Оценка:
Тогда получается :

          1    0          NamedFunction_Ord1 (forwarded to kernel32.AddAtomA)
          3    1          ShowMessage (forwarded to kernel32.#1)
          2               [NONAME] (forwarded to kernel32.AddAtomA)


Т.е будет искать экспорт с именем #1!!!
... Мы не привыкли отступать! И расколоть его поможет киножурнал "Хочу Все Знать"! ;)
Re[3]: Forward to other DLL
От: Slicer [Wirkwood] Россия https://ru.linkedin.com/in/maksim-gumerov-039a701b
Дата: 11.03.03 08:54
Оценка: 2 (1)
А Вы проверьте.

Slicer.
Специалист — это варвар, невежество которого не всесторонне :)
Re[4]: Forward to other DLL
От: Peshuha Россия  
Дата: 11.03.03 09:21
Оценка:
Спасибо, вроде работает под Win2K (потом попробую и под Win9x. По идее должна)
Извините за нескромность, но откель такая инфо?
Я пробовал с @1, но ничего не получается!
Заранее гороменное СПАСИБО.
... Мы не привыкли отступать! И расколоть его поможет киножурнал "Хочу Все Знать"! ;)
Re[5]: Forward to other DLL
От: Slicer [Wirkwood] Россия https://ru.linkedin.com/in/maksim-gumerov-039a701b
Дата: 11.03.03 10:32
Оценка:
Есть у меня одна работка по PE-файлам. И надежда, что ее-таки опубликуют
А вообще, инфа есть в MSDN и еще кое-где, только ее искать и сверять надо.

Slicer.
Специалист — это варвар, невежество которого не всесторонне :)
Re[6]: Forward to other DLL
От: Peshuha Россия  
Дата: 11.03.03 13:31
Оценка:
Здравствуйте, Slicer [Wirkwood],
Вы не могли бы разрешить еще одну, я надеюсь, последнюю проблемс:

Я видел, что некоторые линковщики могут экспортировать даже такие имена как
char* AnyKrutoiExportFun(char*, int)

Если смогете, то разъясните, как такой изврат сочинить на VC++ 60?
А также как вставить в экспортируемые имена такие символы как кавычки или знак равенства ?

Заранее спасибо, с жадным вопросом в глазах и сильно отвисшей челюстью, Вопрошающий
ЗЫ: такой изврат действительно существует, поверьте.
... Мы не привыкли отступать! И расколоть его поможет киножурнал "Хочу Все Знать"! ;)
Re[7]: Forward to other DLL
От: Slicer [Wirkwood] Россия https://ru.linkedin.com/in/maksim-gumerov-039a701b
Дата: 11.03.03 13:42
Оценка:
Здравствуйте, Peshuha, Вы писали:

P>
P>char* AnyKrutoiExportFun(char*, int)
P>


Ну, прежде всего, возможно, Вам просто просмотрщик выдал экспорты в таком виде, а на самом деле там что-то
вроде 'AnyKrutoiExportFun$qqcp$rqcp', что он расшифровал в читабельном виде. TDUMP особенно этим грешит, когда
bpl-файлы дампаешь.
Но если и правда там именно такая строка...

Во-первых, прагма, которую я привел, не помогает?
Во-вторых, пожно поставить вместо вожделенных специмволов что-то иное, а потом руками, своей собственной прогой
или любым хекс-редактором заменить это что-то на то, чего просит душа.

Но в последнем случае прежде стоит подумать, чем это можно будет потом импортировать. Если придется отказаться
от неявного связывания, и мучить GetProcAddress — это, по-моему, слишком большая цена за такую крутизну

Slicer
Специалист — это варвар, невежество которого не всесторонне :)
Re[8]: Forward to other DLL
От: Peshuha Россия  
Дата: 11.03.03 14:16
Оценка:
Здравствуйте, Slicer [Wirkwood],

К сожалению это не изврат диасемблера или подобного ПО. Если мне не изменяет память такие штуковины я видел в DLL, содержащие в себе ссылку на Watcom. К сожалению вовремя не поимел данного вижуального комплектика, а хотя очень бы хотелось посмотреть. Много чего хорошего слышал про этих ребят.Честно говоря прирос к VC и даже если теперь бы мне где-нибудь и встретился он, то не знаю пересел бы на него ради данной проблемы?... А то как-то свежи в памяти Borland C++ ... Но это уже лирика.

За прагму спасибо, пошло
... Мы не привыкли отступать! И расколоть его поможет киножурнал "Хочу Все Знать"! ;)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.