Dll

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

solova

#1
Написал Длл-ку для хука , это моя первая Длл-ка.
Писал в 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:Меня больше интересует не уменьшение размера, а отсутствие всего лишнего
 

a0z

Well-known member
15.03.2011
108
0
#3
C:\Documents and Settings\Administrator\My Documents\Visual Studio 2008\Projects\HookTest\Hook\Debug\Hook.pdb
зачем эти строчки нужны если программа будет на другом компе использоваться где наверняка нету этих директорий и я понимаю что это лишнее
Это для дебагера, чтоб он знал, где искать отладочную информацию. Компиляй в release или укажи линкеру стрипать debug info.

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


PS:Меня больше интересует не уменьшение размера, а отсутствие всего лишнего
Не боись, ничего там особо лишнего нет. Единственно - debug info
 
D

dreamer

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

a0z

Well-known member
15.03.2011
108
0
#5
Потому что формат одинаков как для исполняемых файлов, так и для библиотек, т.е. формат portable executable. А в этом формате явно прописана заглушка для DOS.
Понятно, что одинаков. Но сомневаюсь, что там (в стандарте) точно прописано, что должно быть этой заглушке, а именно - точный текст.
 

a0z

Well-known member
15.03.2011
108
0
#7
The MS DOS stub is a valid application that runs under MS DOS. It is placed at the front of the EXE image. The linker places a default stub here, which prints out the message ”This program cannot be run in DOS mode” when the image is run in MS DOS.
Да, строка прописана явно, но указано что это для EXE image. Если поискать по тексту то есть упоминания и DLL image, что видимо означает, что упомянутый EXE image это именно exe, а не PE вообще.
 
D

dreamer

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

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

solova

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