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

Тема в разделе "MS Visual C++", создана пользователем solova, 22 апр 2011.

  1. solova

    solova Гость

    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
    От этого у меня программа не слетит?(для меня это всё в новинку)
     
  2. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Боюсь никак. У всего есть предел. Можно попробовать UPX с опцией --best при рабочей DLL-ке.
     
Загрузка...

Поделиться этой страницей