Dll

Тема в разделе "Общие вопросы по С и С++", создана пользователем solova, 9 мар 2011.

  1. solova

    solova Гость

    Написал Длл-ку для хука , это моя первая Длл-ка.
    Писал в MS Visual Studio (C++)
    Win32 Console Application
    отметил только
    Application type: DLL и Empty project
    в ручную добавил stdafx.h\cpp
    всё работает.
    Ну так вот.
    Открыл я эту(готовую) Длл через блокнот, там читабельного текста много, ну и почитал
    <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">This program cannot be run in DOS mode.
    WM_кнопка_нажата(%s);C:\test.txt a
    f:\dd\vctools\crt_bld\self_x86\crt\src\crtdll.c
    Stack around _alloca corrupted Local variable used before initialization Stack memory corruption
    Cast to smaller type causing loss of data Stack pointer corruption
    Unknown Runtime Check Error
    Stack memory around _alloca was corrupted
    A local variable was used before it was initialized
    Stack memory was corrupted A cast to a smaller data type has caused a loss of data.
    If this was intentional, you should mask the source of the cast with the appropriate bitmask.
    For example:char c = (i & 0xFF);
    Changing the code in this way will not affect the quality of the resulting optimized code.
    The value of ESP was not properly saved across a function call.
    This is usually a result of calling a function declared with one calling convention with a function pointer declared with
    a different calling convention. Stack around the variable '' was corrupted.The variable ' ' is being used without being initialized. Run-Time Check Failure #%d - %s
    Unknown Module Name Unknown Filename
    Stack corrupted near unknown variable
    Stack area around _alloca memory reserved by this function is corrupted
    Stack area around _alloca memory reserved by this function is corrupted
    Address: 0x Size:
    Allocation number within this function:
    Data: <wsprintfA user32.dll%.2X A variable is being used without being initialized.MSPDB80.DLL
    PDBOpenValidate5 EnvironmentDirectory SOFTWARE\Microsoft\VisualStudio\9.0\Setup\VS
    RegCloseKey RegQueryValueExA RegOpenKeyExA ADVAPI32.DLL
    C:\Documents and Settings\Administrator\My Documents\Visual Studio 2008\Projects\HookTest\Hook\Debug\Hook.pdb
    Hook.dll ?InstallHook@@YAHK@Z ?RemoveHook@@YAHXZ UnhookWindowsHookEx SetWindowsHookExW CallNextHookEx USER32.dll
    fclose fwrite sprintf _strtime fopen
    _CRT_RTC_INITW MSVCR90D.dll _encode_pointer _malloc_dbg _free_dbg _encoded_null _decode_pointer _CrtSetCheckCount
    _initterm _initterm_e _amsg_exit _adjust_fdiv __CppXcptFilter _crt_debugger_hook __clean_type_info_names_internal _unlock
    __dllonexit _lock _onexit _except_handler4_common
    InterlockedExchange Sleep InterlockedCompareExchange IsDebuggerPresent RaiseException DebugBreak WideCharToMultiByte
    MultiByteToWideChar lstrlenA GetProcAddress LoadLibraryA TerminateProcess GetCurrentProcess UnhandledExceptionFilter
    SetUnhandledExceptionFilter QueryPerformanceCounter GetTickCount GetCurrentThreadId GetCurrentProcessId GetSystemTimeAsFileTime HeapFree
    HeapAlloc GetProcessHeap GetModuleFileNameW \ VirtualQuery FreeLibrary KERNEL32.dll »ї<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
    <requestedPrivileges>
    <requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
    </requestedPrivileges>
    </security>
    </trustInfo>
    <dependency>
    <dependentAssembly>
    <assemblyIdentity type="win32" name="Microsoft.VC90.DebugCRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
    </dependency>
    </assembly> ну то что там почти все функции мои прочитываются это ерунда но меня сильно удивили строчки
    <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">C:\Documents and Settings\Administrator\My Documents\Visual Studio 2008\Projects\HookTest\Hook\Debug\Hook.pdb
    EnvironmentDirectory SOFTWARE\Microsoft\VisualStudio\9.0\Setup\VSзачем эти строчки нужны если программа будет на другом компе использоваться где наверняка нету этих директорий и я понимаю что это лишнее
    И зачем нужны подобные коменты(или что это)
    <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">This program cannot be run in DOS mode.
    .......
    For example:char c = (i & 0xFF);....
    ........ кому эти эксамплы нужны и прочий текст.
    мне это как то не мешает и ДЛЛ весит 30Кб ,и я понимаю что там есть то без чего работать длл не будет , но там есть и лишний текст, и если от него можно избавится для уменьшения размера файла, я только за.
    может что то в настройках проекта надо поменять?
    Вопрос вот в чём: можно ли от лишнего текста избавится , если да то как.
    PS:Меня больше интересует не уменьшение размера, а отсутствие всего лишнего
     
  2. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Скинь DLL-ку которая получилась.
     
  3. a0z

    a0z Well-Known Member

    Регистрация:
    15 мар 2011
    Сообщения:
    109
    Симпатии:
    0
    Это для дебагера, чтоб он знал, где искать отладочную информацию. Компиляй в release или укажи линкеру стрипать debug info.

    Если бы это был exe файл и его пытались запустить в DOS, он бы выдал такую строку с ошибкой. Хотя это dll, зачем они и сюда пихнули - ХЗ. Может с расчётом, что dll можно переименовать и попробовать запуситть в DOS? :(


    Не боись, ничего там особо лишнего нет. Единственно - debug info
     
  4. dreamer

    dreamer Гость

    Потому что формат одинаков как для исполняемых файлов, так и для библиотек, т.е. формат portable executable. А в этом формате явно прописана заглушка для DOS.
     
  5. a0z

    a0z Well-Known Member

    Регистрация:
    15 мар 2011
    Сообщения:
    109
    Симпатии:
    0
    Понятно, что одинаков. Но сомневаюсь, что там (в стандарте) точно прописано, что должно быть этой заглушке, а именно - точный текст.
     
  6. dreamer

    dreamer Гость

  7. a0z

    a0z Well-Known Member

    Регистрация:
    15 мар 2011
    Сообщения:
    109
    Симпатии:
    0
    Да, строка прописана явно, но указано что это для EXE image. Если поискать по тексту то есть упоминания и DLL image, что видимо означает, что упомянутый EXE image это именно exe, а не PE вообще.
     
  8. dreamer

    dreamer Гость

    Да, верно подмечено...

    Кстати, в спецификации фигурирует флаг компоновщика STUB, с помощью которого можно уменьшить исполняемый файл на десяток-другой байт :welcome:
     
  9. solova

    solova Гость

    Спасиб
    убрал дебаг инфо и размер прилично сократился,
    ещё с настройками поигрался так с 30к до 7к дошёл
     
Загрузка...

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