Уменьшение размера Dll

  • Автор темы solova
  • Дата начала
S

solova

#1
MS Visual Studio 2008.
Делаю Dll с хуком.
Объясню всё по порядку.
Создаю совершенно пустой проект.
И сразу настраиваю<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Настройка</div></div><div class="sp-body"><div class="sp-content">Release.
Property\
General\Configuration Type\Dynamic Library(.dll)
General\Character Set\Use Unicode Character Set
C/C++\General\Debug Information Format\Disabled
C/C++\General\Warning Level\Level 4 (/W4)
C/C++\Optimization\Full Optimization (/Ox)
C/C++\Preprocessor\Preprocessor Definition\EX
C/C++\Runtime Library\Multi-threaded (/MT)
C/C++\Code Generation\Enable String Poling\Yes (/GF)
C/C++\Code Generation\Buffer Security Check\No
Linker\Input\Ignore All Default Libraries\Yes (/NODEFAULTLIB)
Linker\Debugging\Generate Debug Info\No
Linker\System\SubSystem\Windows (/SUBSYSTEM:WINDOWS)
Linker\Advanced\Entry Point\DllMain
Как я понял, можно смело отключать манифест
Linker\Manifest File\Generate Manifest\No
вот собственно сама программа<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Hook.h</div></div><div class="sp-body"><div class="sp-content">
C++:
#ifdef EX
#define H extern "C" __declspec(dllexport)
#else
#define H extern "C" __declspec(dllimport)
#endif
static HHOOK hH=0;
static HANDLE hD=0;
static HWND hP=0;
H BOOL IH(DWORD);
H BOOL DH(void);
LRESULT __stdcall CB(int,WPARAM,LPARAM);
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Hook.cpp</div></div><div class="sp-body"><div class="sp-content">
C++:
#include <windows.h>
#include "Hook.h"
BOOL __stdcall DllMain(HANDLE hM,DWORD r, LPVOID){
switch(r){
case 1:{hD=hM;hP=FindWindow(0,L"ZapuskHuka");break;}
case 0: PostMessage(hP,WM_USER+200,0,0);break;}
return TRUE;
}
BOOL DH(void){UnhookWindowsHookEx(hH);return TRUE;}
BOOL IH(DWORD Trd){hH=SetWindowsHookEx(4,CB,(HINSTANCE)hD,Trd);return TRUE;}
LRESULT __stdcall CB(int nC,WPARAM wP,LPARAM lP)
{
if(nC >= 0)
{
CWPSTRUCT *c=(CWPSTRUCT*)lP;
if((c->message)==0x0111&&(LOWORD(c->wParam)==57665))
PostMessage(hP,WM_USER+300,0,0);
}
return CallNextHookEx(hH,nC,wP,lP);
}
в итоге Длл весит 2.5Кб - Работает
Открыл Dll через PE Explorer, чтобы посмотреть на размеры секций(чтоб знать какие с чем склеивать)<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">секции</div></div><div class="sp-body"><div class="sp-content">.text Size 200h
.rdata Size 200h
.data Size 0h
.reloc Size 200h
"200h=512b"по секциям только 1.5 Кб ещё 1 от куда то на рисовался, но это ладно
.text и .rdata - если склеивать то размер не изменяется.
.data пустой - зачем он тогда нужен? (можно склеить а можно и не склеивать- размер не меняется)
Я посмотрел в Depends эта Dll использует только USER32.dll.
1)Значит ли это, что моя Длл будет работать на других компах с XP, Vista, Win7 ? Ведь там эта библа вроде есть.
2)И есть ли возможность ещё уменьшить Dll-ку. :)

Добавлено:Приклеил .data к .text
От этого у меня программа не слетит?(для меня это всё в новинку)