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





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Очень просто - переходи на vc++. 04.12.01 03:26  Число просмотров: 1136
Автор: Biasha <Бяша> Статус: Member
<"чистая" ссылка>
<programming>
Как в ДЛЛ добавить именно то что надо? 04.12.01 03:21  
Автор: BXS Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Моя ДЛЛ использует следующие функции (tdump):

Imports from KERNEL32.dll
DeleteCriticalSection
GetSystemTime
GetVersion
InitializeCriticalSection
LocalAlloc
LocalFree
TlsAlloc
TlsFree
TlsGetValue
TlsSetValue
Imports from USER32.dll
MessageBoxA
wsprintfA
Imports from cw3230.DLL
_CatchCleanup()
__lockDebuggerData()
__unlockDebuggerData()
__ErrorMessage
__ExceptionHandler
___debuggerDisableTerminateCallback
__flushall
__free_heaps
__startupd
_abort
_memcpy
Exports from dll.dll
3 exported name(s), 3 export addresse(s). Ordinal base is 1.
Ordinal RVA Name
------- -------- ----
0000 000011c4 _DLLFunction1
0001 00001211 _DLLFunction2
0002 000021ec __DebuggerHookData
Это то что она фактически использует. Этот список получен tdump'ом и ДЛЛ юзает dynamic linking. Размер = 6656 байт.

Однако для выполнения она потребует наличия всех вышеперечисленных внешних DLL. Kernel и User32 в системе есть всегда. Однако cw3230.dll - это фишка Борланда. Ее нет у тех у кого он не стоит. У обычный юзеров моя ДЛЛ пахать не будет.
Чтобы это исправить, делаю Static linking - при этом ВСЕ БЕЗ РАЗБОРУ ф-ции из внешних ДЛЛ зашиваюца в мою ДЛЛ. При этом tdump выглядит так:

Imports from KERNEL32.dll
CloseHandle
CreateFileA
DeleteCriticalSection
EnterCriticalSection
ExitProcess
FreeEnvironmentStringsA
GetACP
GetCPInfo
GetCurrentThreadId
GetDateFormatA
GetEnvironmentStrings
GetFileAttributesA
GetFileType
GetLastError
GetLocalTime
GetModuleFileNameA
GetModuleHandleA
GetProcAddress
GetStartupInfoA
GetStdHandle
GetStringTypeW
GetSystemTime
GetVersion
GetVersionExA
GlobalMemoryStatus
InitializeCriticalSection
LeaveCriticalSection
LocalAlloc
LocalFree
MultiByteToWideChar
RaiseException
RtlUnwind
SetConsoleCtrlHandler
SetFilePointer
SetHandleCount
TlsAlloc
TlsFree
TlsGetValue
TlsSetValue
UnhandledExceptionFilter
VirtualAlloc
VirtualFree
WideCharToMultiByte
WriteFile

Imports from USER32.dll
EnumThreadWindows
MessageBoxA
wsprintfA

Exports from dll.dll
5 exported name(s), 5 export addresse(s). Ordinal base is 1.
Ordinal RVA Name
------- -------- ----
0000 000017b8 __lockDebuggerData()
0001 000017e0 __unlockDebuggerData()
0002 000011c4 _DLLFunction1
0003 00001211 _DLLFunction2
0004 0000a234 __DebuggerHookData

Понятное дело что ДЛЛ как юзала всего лишь MessageBox() так ее и юзает но компоновщик зафигачил туда все что можно!
Как мне выкинуть весь этот мусор и оставить выборочные функции только!!!
Фактически, мне нужно чтобы в ДЛЛ были зашиты нужные ей ф-ции из cw3230.dll а остальное она импортировала бы из винды...

Помогите плиз?????
Я это когда то делал и посему посеветую сделатьпримерно так... 06.12.01 00:31  
Автор: Duxx Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Насчет вижуал С, народ правильно говорит, для написания програм утилит он очень хорош, и непотому что там якобы весь мусор в винде, просто возможности круче.

Вобщем так, бурланд юзает все фунции мастдая через свои библиотеки, потому он и цепляет кучу мусора в прогу. В Visual C++, тоже такая же ситуация, но .... там можно путем извращений с компилером добиться чтобы он нецеплял своих библиотек вообще, это типа MFC42.DLL,MSVCRT.DLL, но тогда ты несможеш бзать стандартные функции типа strcpy strlen и тд, выход есть неюзать эти функции а юзать непосредственно их мастдайные варианты, визуал си позволяет это делать тока эти функции будут называться примерно так lstrle и тп, в MSDN не это все описанно, и еще чтобы вообще добиться тока подключения чисто мастдайных dll без всяких навесок, тепе нужно отказаться от использования даже функции main :))) да да именно так ну или WinMain, не дрейф ты просто должен описать их аналоги и все будет путем, ну и в компилире указать что ты будеш как входную функцию юзать свою а не стандартную.

Вобщем все вышесказанное с подробными примерами есть и в MSDN в поной версии там есть статьи Мэта Питрека, почитай их и в одной из статей это будет. Ну набери в MSDN в поиске matt, и читай.
забей 04.12.01 12:57  
Автор: ggg <ggg> Статус: Elderman
<"чистая" ссылка>
ни с борландом ни с мс хорошего кода ты не получишь
везде полно мусора
с мс один плюс в том, что этот мусор уже есть в системе и его не надо с собой таскать :)

если хочешь хорошо оптимизированную прогу - используй Watcom C++
Очень просто - переходи на vc++. 04.12.01 03:26  
Автор: Biasha <Бяша> Статус: Member
<"чистая" ссылка>
Esli linkovchik ih tuda zafigachil znachit oni nuzhny! e.p.r.s.t. 04.12.01 03:25  
Автор: + <Mikhail> Статус: Elderman
<"чистая" ссылка>
Esli linkovchik ih tuda zafigachil znachit oni nuzhny! e.p.r.s.t. 04.12.01 03:47  
Автор: BXS Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Вовсе нет. он их туда завигачил на все случаи жизни! причем использовал при этом import32.lib - если ты туда глянешь - то увидешь тонны разных функций...

динамическая компоновка в этом случае лучше - она будет оперировать ссылками на другие DLL где лежат функции которые я юзаю...
но в этом случае линкер скажет моей проги искать 2-3 паршивые функции в cw3230.dll 300 кило весом!!! не буду же я таскать этот хлам.....
я хочу чтобы из нее то что я юзаю он запихнул в мою ДЛЛ а на другие ДЛЛ просто сунул бы ссылки....

епрст не может быть что нельзя было бы тсак сделать! и не хочу я юзать VC!
Как это сделать из BCC?
ну чудес-то не бывает 04.12.01 04:03  
Автор: dl <Dmitry Leonov>
Отредактировано 04.12.01 04:18  Количество правок: 1
<"чистая" ссылка>
> Вовсе нет. он их туда завигачил на все случаи жизни! причем
> использовал при этом import32.lib - если ты туда глянешь -
> то увидешь тонны разных функций...

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

Настройки Static/Dynamic linking относятсятолькок родной борландовской стандартной библиотеке, ни один компилятор не вздумает статически линковать функции из user32.dll хотя бы просто потому, что их у него под рукой нет.

Если же после статической компоновки вдруг оказалось, что программа стала импортировать чуть больше функций из того же user32.dll, то это только потому, что эти функции использовались где-то во внутренностях стандартной библиотеки.
S toboi vse Iasno. 04.12.01 03:53  
Автор: + <Mikhail> Статус: Elderman
<"чистая" ссылка>
S toboi vse Iasno. 04.12.01 04:03  
Автор: Biasha <Бяша> Статус: Member
<"чистая" ссылка>
Попробую защитить + от нападок :)

Возможны два варианта - я не знаком с bc, потому не уверен:
1. bc такой тупой, что всё импортирует (маловероятно, хотя, кажеться, я такое где-то слышал)
2. Эти экспорты действительно нужны - функциям из той длл, которую тебе лень тоскать.

Выход один - переходи на vc++ :))))
S toboi vse Iasno. 04.12.01 04:21  
Автор: BXS Статус: Незарегистрированный пользователь
<"чистая" ссылка>
@#$дь! Понятное дело что USER32 & KERNEL он не контролирует! Кому ж их microsoft выдаст то!?
Все что я пытаюсь узнать это то, каким образом мне в ДЛЛ добавить из cw3230.dll лишь что фактически нужно!?!?!? Мне нужен их всего десяток!!! если я буду юзать dynamic linking -тада мне придеца всегда таскать еще и сw3230.dll. Лучше намного иметь их уже внутри, но линкер запихивает сразу всю cw3230.lib.

Как мне из cw3230.lib тогда уж удалить все говно, оставить лишь необходимое и компоновать (STATIC) с этой усеченной библиотекой а со всеми USER32 и прочими - по дефолту DYNAMIC??????

Вот в чем проблема!!!

Что ж я непонятного спрашиваю???
S toboi vse Iasno. 04.12.01 04:29  
Автор: dl <Dmitry Leonov>
<"чистая" ссылка>
> Все что я пытаюсь узнать это то, каким образом мне в ДЛЛ
> добавить из cw3230.dll лишь что фактически нужно!?!?!? Мне
> нужен их всего десяток!!! если я буду юзать dynamic linking
> -тада мне придеца всегда таскать еще и сw3230.dll. Лучше
> намного иметь их уже внутри, но линкер запихивает сразу всю
> cw3230.lib.
> Как мне из cw3230.lib тогда уж удалить все говно, оставить
> лишь необходимое и компоновать (STATIC) с этой усеченной
> библиотекой а со всеми USER32 и прочими - по дефолту
> DYNAMIC??????

Плюнуть и растереть. Компоновщики уже давным давно научились цеплять из библиотек только то, что нужно. Если хочется и дальше страдать перфекционизмом, то взять исходники стандартной библиотеки (в VC, например, они частично доступны) и попытаться скомпоновать их лучше, чем это делает линкер.

Да, кстати, судя по списку функций, уж не отладочная ли версия строится?
S toboi vse Iasno. 04.12.01 13:52  
Автор: kabanchik Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> Да, кстати, судя по списку функций, уж не отладочная ли
> версия строится?
Mne tozhe kazhetsya chto eto DEBUG version. Xot' ubejte nikak ne mogu ponyat' pochemu BCC suet ves' etot xlam i kak voobshe vozmozhno ??? Eto zhe systemnye DLLki, ty xot' streljajsya vse ravno ne smozhesh' ix svoju progu sunut'.
u menya uzhe voznikajut somnenia, chto BCC imeet sobstvennuju realizaciu f-ij MessageBoxA, CreateFileA, etc ..... po moemu eto dejstvitel'no marAZm ... ili BCC zabyl chto takoe "optimizer" ????
S toboi vse Iasno. 04.12.01 04:14  
Автор: dl <Dmitry Leonov>
<"чистая" ссылка>
> Попробую защитить + от нападок :)
> Возможны два варианта - я не знаком с bc, потому не уверен:
> 1. bc такой тупой, что всё импортирует (маловероятно, хотя,
> кажеться, я такое где-то слышал)
> 2. Эти экспорты действительно нужны - функциям из той длл,
> которую тебе лень тоскать.

Я сомневаюсь, что BC настолько подурнел за те пять лет, что я с ним не работал, так что все же, скорее всего, имеет место вариант 2 :)

> Выход один - переходи на vc++ :))))

А не все ли равно, на VC он получит аналогичные грабли с msvcrt и проч. Одно утешение, что она обычно в системе валяется.
S toboi vse Iasno. 04.12.01 04:39  
Автор: BXS Статус: Незарегистрированный пользователь
<"чистая" ссылка>
dl, ты говоришь что это оптимально. ок, а тогда как ты объяснишь тот факт, что когда я ставлю DYNAMIC linkin, прога занимает 6 кило и импортит из cw3230 десяток ф-ций и из кернела с юзером дешку... но как только я ствалю STATIC то Кернел и Юзер чуть ли не целиком запихиваюца мне в файло????
Не потому ли что вся cw3230 вшиваеца мне в файл и из-за этого все дерьмо которое юзает cw3230 тоже туда же попадает!!! что это за шлак?
S toboi vse Iasno. 04.12.01 23:09  
Автор: Biasha <Бяша> Статус: Member
<"чистая" ссылка>
> dl, ты говоришь что это оптимально. ок, а тогда как ты
> объяснишь тот факт, что когда я ставлю DYNAMIC linkin,
> прога занимает 6 кило и импортит из cw3230 десяток ф-ций и
> из кернела с юзером дешку... но как только я ствалю STATIC
> то Кернел и Юзер чуть ли не целиком запихиваюца мне в
> файло????

Точно так же, как и для vc++:

1. Когда ты выбираешь DYNAMIC (vc++ аналог - multithreaded DLL), то все стандартные сишные функции записываются в раздел импортов твоего ехешника, и, ясное дело, при этом происходит статическое связывание твоего ехе с cw3230.dll. В результате твой ехешник офигенно маленький, но тебе обязательно нужно носить с собою cw3230.dll. MS здесь выигрывает - он, в отличии от борланда, таскает аналогичную длл сам.

Таким образом, импортируются те функции cw3230, которые используешь ты (возможно, некоторые неявно) + все остальные системные, которые ты используешь.
Ну и ясное дело без cw3230 твоя программа даже не запуститься. И ничего здесь не поделаешь.

2. Когда ты выбираешь STATIC (vc++ аналог - multithreaded), то всякие там длл посылаются нафиг, вместо того в твой ехешник записывается код, реализующий эти же функции из cw3230.

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

> Не потому ли что вся cw3230 вшиваеца мне в файл и из-за
> этого все дерьмо которое юзает cw3230 тоже туда же
> попадает!!! что это за шлак?
Теперь про шлак: это не шлак, вернее, поскольку я не знаком с bc++, это не обязательно шлак. Даже если ты не вызываешь явно ни одну из функций cw3230 это ещё не означает, что из твоего ехе файла не вызываются функции из cw3230: например, какую-то функцию может вызывать стандартный код, который выполняется до вызова твоего main.


Ну и вывод:
Если на копе заказчика есть cw3230, то выбирай DYNAMIC и ехешник будет меньше занимать.
Иначе, размер того, что нужно носить с собой, уменьшить невозможно, хотя можно разнести твой и стандартный код в разные файлы - выбрав DYNAMIC, но нафиг надо.

Теперь реклама:
Если бы ты юзал vc++, то всегда бы мог выбрать DYNAMIC, поскольку стандартные длл МС за тебя носит.
S toboi vse Iasno. 04.12.01 04:50  
Автор: dl <Dmitry Leonov>
<"чистая" ссылка>
> dl, ты говоришь что это оптимально. ок, а тогда как ты
> объяснишь тот факт, что когда я ставлю DYNAMIC linkin,
> прога занимает 6 кило и импортит из cw3230 десяток ф-ций и
> из кернела с юзером дешку... но как только я ствалю STATIC
> то Кернел и Юзер чуть ли не целиком запихиваюца мне в
> файло????
> Не потому ли что вся cw3230 вшиваеца мне в файл и из-за
> этого все дерьмо которое юзает cw3230 тоже туда же
> попадает!!! что это за шлак?

Ну а чего гадать. Возьми и сравни размеры cw3230 и своей dll. И проверь, не собирается ли debug-версия, уж больно подозрительные имена у некоторых импортируемых функций. А если действительно цепляется большая часть cw3230, то, значит, карма у нее такая, написали ее с таким количеством перекрестных ссылок.
Ой, да, действительно, но на vc++ всё равно переходи. 04.12.01 03:32  
Автор: Biasha <Бяша> Статус: Member
<"чистая" ссылка>
1




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


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