информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
За кого нас держат?Сетевые кракеры и правда о деле Левина
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 ФБР нашла русский след в атаках... 
 Массовый взлом SharePoint 
 Microsoft Authenticator прекращает... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[c++] нужна компоновка по ординалам!!! как это сделать? 19.03.03 14:38  Число просмотров: 1112
Автор: BXS Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Мне нужно не то.
Нужно чтобы компоновщик слинковал мою прогу с моей DLL по ординалам, а не по имени. Ведь в LIB файле есть и то, и другое и компоновщику один пень как связать... Слышал про опцию, которая по дефолту отключена, но если включить ее, то линкер будет делать именно так....
Вот и вопрос: как это сделать и что за опция?

Спасибо
<programming>
[C++] Как импортировать по ординалу, а не имени? 18.03.03 22:59  
Автор: BXS Статус: Незарегистрированный пользователь
Отредактировано 19.03.03 14:00  Количество правок: 1
<"чистая" ссылка>
VC++. Мне нужно импортировать функции из одной моей DLL по ординалу, а не по имени. Как этого добиться?
И как сказать об этом линковщику? Об этом почему-то нигде не пишут (((

спасибо
[C++] Как импортировать функции по ординалу? 19.03.03 14:01  
Автор: CZ Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> VC++. Хочу импортировать функции по ординалу, а не по
> имени.
> Как это сделать?
>
> спасибо

func=GetProcAddress(hModule,(LPCSTR)Ordinal)
[c++] нужна компоновка по ординалам!!! как это сделать? 19.03.03 14:38  
Автор: BXS Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Мне нужно не то.
Нужно чтобы компоновщик слинковал мою прогу с моей DLL по ординалам, а не по имени. Ведь в LIB файле есть и то, и другое и компоновщику один пень как связать... Слышал про опцию, которая по дефолту отключена, но если включить ее, то линкер будет делать именно так....
Вот и вопрос: как это сделать и что за опция?

Спасибо
[C++] Тебе нужен не линкер, а либрариан (библиотекарь блин :-))) ) 19.03.03 17:53  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> Мне нужно не то.
> Нужно чтобы компоновщик слинковал мою прогу с моей DLL по
> ординалам, а не по имени. Ведь в LIB файле есть и то, и
> другое и компоновщику один пень как связать... Слышал про
> опцию, которая по дефолту отключена, но если включить ее,
> то линкер будет делать именно так....
> Вот и вопрос: как это сделать и что за опция?
Если длл-ка твоя, то в def включить строку:

Файл mydll.def
LIBRARY MYDLL
EXPORTS
MyOrdinalFunc @123
My2ndOrdinalFunc @234

---

После этого собрать либу для этого def-а
lib /def:mydll.def /out:mydll.lib

Далее, все модули собранные с этой либой будут импортить MyOrdinalFunc из mydll.dll по ординалу 123.

Причем lib можно собирать даже без самой dll-ки, то есть иметь для одной и той же dll-ки несколько def-ов, а в проект для нее включить только одну (например, где все экпорты по имени). Это кстати имеет значение еще и в случае если dll-ка не твоя. Чтоб избежать пересечения имен со стандартными либами можно сделать так:

LIBRARY KERNEL32
EXPORTS
OrdinalGetLastError @282

---

Если получить либу из этого def-а, то проимпортировать GetLastError можно будет и из стандартной kernel32.lib (по имени) и из этой новой либы, но с новым именем по ординалу. Хотя я бы не советовал этого делать - мало ли что случится с ординалами в следующем SP.

Вообще в MSDN-е довольно полная дока по def-ам - если еще чего надо ищи там.

> Спасибо
[C++] ошибка: unresolved external symbol 19.03.03 18:20  
Автор: BXS Статус: Незарегистрированный пользователь
Отредактировано 19.03.03 20:48  Количество правок: 1
<"чистая" ссылка>
сгенерил lib файл, короче все сделал описанным выше способом...
но вот ошибка: unresolved external symbol.

библиотека как была раньше, так и осталась включенной в проект.... но вот только теперь она не компилится ((
п-о-ч-е-м-у???
[C++] ошибка: unresolved external symbol 20.03.03 13:12  
Автор: :-) <:-)> Статус: Elderman
<"чистая" ссылка>
Если функция STDCALL, то в .DEF-файле нужно писать "искаженное" имя:

LIBRARY KERNEL32
EXPORTS
GetLastError@0 @282
[C++] Да и еще 20.03.03 17:50  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> Если функция STDCALL, то в .DEF-файле нужно писать
> "искаженное" имя:
>
> LIBRARY KERNEL32
> EXPORTS
> GetLastError@0 @282
@0 после GetLastError - это количество байтов, передаваемых в качестве параметров. Лучше всего смотри какое имя вписать как раз в том сообщении линкера - он не обманет. И пиши в def такое имя.
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach