ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Native WIN API и MSVCR80.dll
  #1  
Старый 19.05.2009, 19:02
/^scriptor$/
Новичок
Регистрация: 11.04.2009
Сообщений: 13
Провел на форуме:
34367

Репутация: 0
Exclamation Native WIN API и MSVCR80.dll

Пишу в Visual Studio 2005. Выбрал проект Win32 Application. Написал программу на голом вин апи. скомпил релиз, полез проверять на вирус тотал и оказалось, что моя прога юзает MSVCR80.dll
Какого [вырезано цензурой] дллка от фреймфорка линкуется вместе с моим вин32 приложением?
Если в настройках выбрать не использовать манифест файл, то прога не запускается.
Как с помощью VS 2005 скомпилить приложение, использующее только системные длл (не требующее фреймворка)?
 
Ответить с цитированием

  #2  
Старый 19.05.2009, 19:34
Gar|k
Постоянный
Регистрация: 20.03.2009
Сообщений: 564
Провел на форуме:
991929

Репутация: 395


По умолчанию

тема просто боян...
писал я это в http://forum.antichat.ru/thread33202.html

для начала пропиши в файлике начале
Цитата:
Сообщение от Gar|k  
#pragma comment(linker,"/MERGE:.rdata=.data")
#pragma comment( linker, "/MERGE:.text=.data" )
#pragma comment(linker,"/FILEALIGN:512 /SECTION:.text,EWR /IGNORE:4078")
#pragma comment(linker,"/ENTRY:New_WinMain")
#pragma comment(linker,"/NODEFAULTLIB")
#pragma comment(linker, "/SUBSYSTEM:WINDOWS" )
#pragma comment(linker, "/INCREMENTAL:NO" )
#pragma optimize( "gsy", on )

ругается на /FILEALIGN:512 /IGNORE:4078 нету таких типа...
обявление новой входной точки помогает избавится от ненужных дописок и проверок MS а вот /NODEFAULTLIB убивает напрочь иногда очень нужные функции типа там sprintf (их можно подрубить в ран-тайме? как?) ну и результаты клевые 1 кб ) пока минимальный мой экзешник... (правда еще куча настроек в проекте отключения манифеста выставления оптимизации кода /MT /GS- и тд.)
потом в настройке проекта надо поотробубать кучу всего.... я уже точно не помню потомучто для кажого проекта заново перенастраиваю

ну а самое главное чтобы отвязатся от DLL надо слинковать ее статически за это отвечает опция /MT - вместо /MD
 
Ответить с цитированием

  #3  
Старый 19.05.2009, 19:42
Gar|k
Постоянный
Регистрация: 20.03.2009
Сообщений: 564
Провел на форуме:
991929

Репутация: 395


По умолчанию

чуть не забыл

void New_WinMain(){ExitProcess(0);}
 
Ответить с цитированием

  #4  
Старый 19.05.2009, 20:05
/^scriptor$/
Новичок
Регистрация: 11.04.2009
Сообщений: 13
Провел на форуме:
34367

Репутация: 0
По умолчанию

thanx, попробую
 
Ответить с цитированием

  #5  
Старый 19.05.2009, 20:49
/^scriptor$/
Новичок
Регистрация: 11.04.2009
Сообщений: 13
Провел на форуме:
34367

Репутация: 0
По умолчанию

Цитата:
Сообщение от Gar|k  
ну а самое главное чтобы отвязатся от DLL надо слинковать ее статически за это отвечает опция /MT - вместо /MD
но ведь тогда дллка будет внутри ехе, а мне это не надо
 
Ответить с цитированием

  #6  
Старый 19.05.2009, 21:02
Gar|k
Постоянный
Регистрация: 20.03.2009
Сообщений: 564
Провел на форуме:
991929

Репутация: 395


По умолчанию

в той длл лежат функции Си и CTR (вроде так называются) обявляя новую точку входа ты обходишь CTR обьявляя /NODEFAULTLIB ты отказываешься от всех стандартных библиотек Си и Си++

а /MT поможешь тебе с "переносимостью" твоих exe на другие компы.

если ты свои проги будешь писать с динамической подключалкой то тебе придется везде с собой таскать несколько DLL размером в ~500кб

потомучто у юзверев без уставновленого MSVCR80.dll твоя прога будет вылетать с сообщением "...переустановите программу..." бла бла (эта дллка кстати входит в какойто пак иногда видел наверно с играми тебе ставится чето типа vcredist_x86.exe и он весит не мало...)
 
Ответить с цитированием

  #7  
Старый 19.05.2009, 21:23
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

Лезиш в свойства проекта. Общие свойства С/С++ И там Ставишь
Использовать MFC - использовать стандартные библиотеки Windows.
или ищи опцию - No Using MFC
 
Ответить с цитированием

  #8  
Старый 19.05.2009, 23:14
Gar|k
Постоянный
Регистрация: 20.03.2009
Сообщений: 564
Провел на форуме:
991929

Репутация: 395


По умолчанию

2 slesh поверь это не спасает ) и юзать или не юзать mfc узказывается еще при создании проекта... а для вин приложений написаных с нуля это win32 empty project

беда мелкосовтовской студии много лишнего тот же CRT - это проверки на переполнение буффера и всякие другие заморочки... и просто так его отключить никак незя хех
 
Ответить с цитированием

  #9  
Старый 19.05.2009, 23:42
/^scriptor$/
Новичок
Регистрация: 11.04.2009
Сообщений: 13
Провел на форуме:
34367

Репутация: 0
По умолчанию

нашел решение.
Код:
// Параметры для минимизации размера EXE-файла.
#pragma comment(linker,"/MERGE:.rdata=.data")
#pragma comment(linker,"/MERGE:.text=.data")
#pragma comment(linker, "/SECTION:.text,EWR")
#pragma comment(linker, "/NODEFAULTLIB")
#pragma comment(linker, "/ENTRY:main")
HINSTANCE получаем слудующим образом:
Код:
HINSTANCE hInst = GetModuleHandleA(NULL);
Вместо функций srtlen и strcat юзам винапишные lsrtlen и lstrcat.

Вместо memset:
Код:
void dg_memset(void* output, int value, int len)
{
  if (len)
  {
    do
    {
      *(unsigned char*)output = (unsigned char)value;
      output = (void*)((unsigned int)output + 1);
    }while(--len != 0);
  }
}
memcpy:
Код:
void dg_memcpy(void* output, void* input, int len)
{
  if (len)
  {
    do
    {
      *(unsigned char*)output = *(unsigned char*)input;
      input  = (void*)((unsigned int)input  + 1);
      output = (void*)((unsigned int)output + 1);
    } while (--len != 0);
  }
}
 
Ответить с цитированием

  #10  
Старый 20.05.2009, 00:06
Gar|k
Постоянный
Регистрация: 20.03.2009
Сообщений: 564
Провел на форуме:
991929

Репутация: 395


По умолчанию

memset(buff,0x00,buflen) = ZeroMemory
memcpy - CopyMemory
memset - FillMemory

есть еще MoveMemory а ваще
http://msdn.microsoft.com/en-us/library/aa909240.aspx

строковые есть стандартные типа StrCpy а ваще
http://msdn.microsoft.com/en-us/library/ms646979.aspx

работа с файлами макросы есть
f=_lcreat("d.txt", 0);
_lwrite(f,(LPCCH)mem,4096);
_lclose(f);

давай че еще найдешь интересного сюда пиши! ) ибо я сам мало знаю
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Секреты Windows 7 Campery Статьи 17 19.11.2009 02:33
Dedicated Servers spilberg Хостинг, Dedicated, VDS, Сервера - Покупка, продажа 1 18.02.2009 22:11
Dedicated Servers bad_signal Хостинг, Dedicated, VDS, Сервера - Покупка, продажа 1 10.02.2009 16:04



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ