shared c run time for x64 что это за программа
990x.top
Простой компьютерный блог для души)
Funmoods что это за программа?
Ребята, хеллоу всем. Говорим о непонятной программе по имени Funmoods, что это такое и для чего — будем узнавать. Значит я отправился в интернет искать правду. Оказалось, что Funmoods это тулбар, то есть такая штука которая типа вносит новые функции в браузер, а по факту эти функции почти никому не нужны. Но тулбар все равно проникает как-то в комп и внедряется в браузер, к сожалению это обычная ситуация среди тулбаров
Значит что делать ребята. А тут не все так просто. Недавно мне нужно было удалить тулбар у знакомой, он был в Мозилле, и я думал что это у меня получится без проблем, но увы.. В окне Программы и компоненты ничего не было, в дополнениях тоже.. Я решил, что чем самому искать, то лучше поручить это делу спецу. И таки да, все получилось, я скачал HitmanPro, просканировал систему и он нашел там что-то, удалил, и все стало на свои места. Но это у меня, вам HitmanPro тоже может помочь.. а может и нет…
Ребята, скажу сразу, я тут вам накидал план действий. Если строго следовать ему, то очень высоки шансы, что вы избавитесь от Funmoods. Но следовать нужно строго!
Так что делать в итоге? Ребята, давайте сначала вообще посмотрим на этот тулбар Funmoods. Вот я нашел картинку и вижу что это браузер Мозилла, тут есть этот тулбар, еще вижу что он вроде ставит и поисковую систему свою ну и рекламу разумеется:
Еще нашел такую картинку, как видим это официальный установщик Funmoods:
Я так понимаю что по факту то Funmoods это не вирус и вообще не опасное ничего.. просто тулбар, который берет и ставится вам в браузер, и вроде не без вашего разрешения.. галочку то там где-то можно снять.. но все сделано именно так чтобы он все таки установился. Ну а вот пожалуйста, вы ставите какую-то программу, вот например Cool VOB To MP4 Converter и тут при установке есть как раз эта галочка по поводу Funmoods:
Такие галочки нужно снимать и если есть кнопка Skip Offer или просто Skip, то ее нужно нажать, чтобы пропустить вообще установку тулбара. Вот видите как все запутано…
Также я еще нашел такую картинку, смотрите:
И что мы тут видим? Прогу Funmoods вроде как можно найти в окне Программы и компоненты, то есть в теории ее там и удалить можно..
Вот еще нашел интересную картинку, я даже толком не могу понять что здесь, но это вроде какое-то окно установки и тут тоже предлагается установить тулбар Funmoods:
Еще картинка, это окно Управление надстройками браузера Internet Explorer и я вижу что и здесь может быть Funmoods, можно попробовать удалить:
Чтобы открыть надстройки — Панель управления > Свойства браузера > Вкладка Программы > там будет кнопка типа Настроить надстройки
Ну а вот и сам тулбар в Internet Explorer:
Вот ребята страница расширений хрома и мы тут видим что есть расширение Funmoods, которое конечно нужно удалить:
Значит так ребята, какой вообще план? Что делать? Я расскажу вам в виде списка, если вы не против. Подытожим типа.
На этом все ребята, я надеюсь что кое-как я вам да помог все таки. Удачи вам и берегите себя!
Анатомия C Run-Time, или Как сделать программу немного меньшего размера
Автор: Виталий Брусенцев
The RSDN Group
Источник: RSDN Magazine #0
Опубликовано: 19.01.02
Исправлено: 05.01.2007
Версия текста: 1.0
Поводом к написанию этой статьи послужили частые обсуждения в Web-конференциях следующего вопроса:
«Я создал проект с использованием библиотеки ATL. Некоторое время он прекрасно компилировался как в Debug-, так и в Release-версии. Затем, после добавления очередной порции кода, при сборке Release-версии линкер выдал ошибку:
Иногда на подобный вопрос можно получить следующий ответ:
» Да, у меня тоже была такая ошибка. Вылечилось добавлением в исходники пустой функции main()<>.Это какой-то глюк у Microsoft. 🙁 «
Что же на самом деле стоит за этой проблемой и как ее решить? Давайте разберемся.
Многое в этой статье справедливо для любой среды программирования на C/C++, но детали реализации будут приводиться для Microsoft Visual C++ версий 5.0 и 6.0.
Большое спасибо Павлу Блудову за ценные замечания в ходе обсуждения статьи.
Библиотека C Run-Time
ПРИМЕЧАНИЕ При дальнейшем рассмотрении дело оказывается еще хуже. Выясняется, что инициализация CRT нужна, даже если ни одна из входящих в нее функций явно в программе не используется. Так, некоторые операции с плавающей точкой требуют наличия кода инициализации: например, на случай, если будет выполняться обработчик исключительных ситуаций ( floating point handler ). Объявление глобальной переменной, являющейся экземпляром класса, имеющего конструктор или деструктор, тоже требует наличия стартового кода CRT. Это происходит из-за того, что вызовы конструкторов и деструкторов в VC реализованы как часть стартового кода CRT. Использование механизмов обработки исключений C++ и Run-Time Type Information ( RTTI ) также влечет за собой необходимость инициализации. Но встречаются случаи, когда считаешь буквально каждый байт исполняемого модуля. Это может быть ядро инсталлятора или самораспаковывающегося архива, элемент управления ActiveX, который скачивается через Интернет, или приложение для встраиваемой системы. Компиляторы C++ (и Visual C++, в том числе), на мой взгляд, наиболее подходят для такого рода разработок. Приложение может, в конце концов, состоять из большого количества модулей, и мало что значащие 30 Кб могут превратиться в несколько сотен килобайт, а то и мегабайт. Но для контроля над процессом сборки придется погрузиться в некоторые детали реализации поддержки CRT. main или WinMain?Чтобы немного развлечься, проведем эксперимент. Создадим файл test.cpp : Внимание, вопрос: что появится на экране после запуска такой программы? Постарайтесь ответить на этот вопрос, не заглядывая в дальнейшее описание. Точка входа в программуЧто же происходит во время ее выполнения? Вот типичный сценарий работы такой функции (случай DLL здесь не рассматривается). Теперь, наконец, можно ответить на мой вопрос: он был задан некорректно :). В самом деле, результат сборки будет зависеть от набора опций компоновщика, установленных в проекте или по умолчанию. Так, например, при вызове компилятора в командной строке таким образом: мы получим консольную программу и сообщение «Hello from main()» (вспомните, что говорилось об умолчаниях). А вызвав компилятор вот так: Код инициализации глобальных переменныхКак в VC++ реализован вызов цепочки функций инициализации/завершения? А почему здесь используется термин «функции инициализации/завершения » вместо терминов «конструкторы/деструкторы»? Напомню, что стандарт языка C++ разрешает инициализацию переменных с помощью неконстантных выражений. Если переменная (даже простого типа) описана в глобальной области, то ее инициализатор должен быть выполнен до вызова функции main/WinMain: Обработка в этом случае ничем не отличается от инициализации экземпляра класса имеющего конструктор. Код завершенияТо есть, можно сказать, что все выполнение программы имеет целью получение параметра для функции exit. 🙂 Вообще-то, exit (вернее, возможность ее прямого вызова) является, скорее, «пережитком» со времен программирования на C. При вызове этой функции из программы на C++ не выполнятся деструкторы для локальных переменных (что естественно, поскольку, в отличие от глобальных объектов, их деструкторы нигде не зарегистрированы). Кроме того, вызов exit из деструктора может привести к входу программы в бесконечный цикл, так что не злоупотребляйте этой функцией. И, наконец, функция abort является способом «пожарного» завершения программы. Она выводит диагностическое сообщение и также вызывает _exit для завершения процесса. Вызов любой из этих функций приведет к необходимости включения стартового кода CRT. Уменьшаем размер выполняемого модуляКонечно, такие способы существуют, и некоторые из них я опишу ниже. Но важно понимать, что каждый из них не является общим решением (иначе именно он использовался бы по умолчанию), и имеет свои недостатки. Использование внешней библиотеки CRTОткомпилируем нашу программу следующей командой: Размер полученного в результате EXE-файла составляет около 16 килобайт. Что за чудеса? Куда делась половина исполняемого модуля? Неужели он «похудел» за счет исключения CRT? И да, и нет. Опция компилятора /MD указывает использовать для сборки библиотеку MSVCRT.LIB. В ней содержится только тот набор кода, который позволяет линкеру разрешить внешние связи. А сам код CRT находится в динамической библиотеке MSVCRT.DLL в системном каталоге Windows. Эта многопоточная библиотека используется и некоторыми бесплатными компиляторами C/C++ для Windows, например, MinGW. Плохая новость заключается в том, что MSVCRT.DLL существует не на всех версиях Windows. Она начала поставляться в составе ОС, начиная с Windows 95 OSR2. Приложение, запущенное в системе без этой библиотеки, выполняться не будет. Правда, таких систем становится все меньше и меньше. Уменьшение выравнивания файловых секцийВернуть прежнюю величину выравнивания можно, задав недокументированную опцию компоновщика /opt:nowin98 : Размер EXE в результате составляет менее 3-х килобайт! Но не забудьте, что такой файл будет медленнее загружаться в память, и что он по-прежнему требует наличия MSVCRT.DLL. Радикальные меры: отказываемся от CRT StartupЕсли ампутация кажется вам разумной хирургической операцией, то стартовый код CRT можно выбросить из программы совсем. Что это означает? Отказавшись от некоторых привычных удобств, которые предоставляет CRT, можно писать на C/C++, не используя возможностей, которые требуют поддержки со стороны CRT. В мире Windows API такое решение не пугает многих. Взгляните, например, на NullSoft Installer. Более свежая информация содержится в его статье «Reduce EXE and DLL Size with LIBCTINY.LIB» в январском выпуске MSDN Magazine за 2001 год. Предлагаемая автором версия «крохотной» библиотеки исполнения выполняет минимальную инициализацию (например, вызывает конструкторы глобальных объектов) и даже предоставляет собственные версии таких функций, как printf и malloc. При этом размер выполняемого модуля оказывается зачастую меньше 3 Кб. В данном случае можно просто указать, что функция main будет точкой входа в программу (вместо функции инициализации): В результате также получим исполняемый файл размером менее 3 Кб (я вновь использовал опцию /opt:nowin98). Разница теперь лишь в том, что он не требует внешней CRT-библиотеки (библиотека user32.lib необходима для функции MessageBox, но она является частью ядра Windows). Версия ATL: макрос _ATL_MIN_CRTПригодность этого подхода доказывается тем, что с его помощью создано множество легких COM-компонентов. Но непонимание принципов его работы может легко завести в тупик, как видно из цитаты в начале статьи. Собственно, сама эта реализация доступна, только если определен символ препроцессора _ATL_MIN_CRT. Таким образом, есть возможность легко управлять включением или исключением стартового кода CRT. Важный момент при использовании макроса _ATL_MIN_CRT: по-прежнему нельзя включать объявления глобальных переменных, классы которых имеют конструкторы или деструкторы, так как код, их вызывающий, содержится только в CRT. Эта проблема решена в библиотеке ATL 7.0 (не удивляйтесь, как и многие другие приложения Microsoft, ATL перескочила с версии 3 на версию 7), поставляемой с компилятором MS VC++ 7.0. Тем же, кто пользуется прежними версиями компилятора, могу посоветовать воспользоваться отличной библиотекой Andrew Nosenko’s ATL/AUX Library, в которой содержится код вызова конструкторов/деструкторов. Для этого необходимо включать в проект вместо atlimpl.cpp файл AuxCrt.cpp из комплекта библиотеки. Кто виноват?Теперь ясно, что причиной появления ошибки «unresolved external symbol _main» стало включение стартового кода CRT. То есть, была явно или неявно использована какая-либо функция, которая содержит ссылку на структуру данных, находящуюся в модуле с кодом инициализации. При включении компоновщиком в программу этого модуля возникает следующая внешняя ссылка: в теле mainCRTStartup есть вызов main. Вот и все, мы получили наше «любимое» сообщение об ошибке. Отдельной «увлекательной» стадией сборки приложения является поиск функции или фрагмента кода, вызвавшего такую ситуацию. Для этого применяются следующие шаги: Использование Standard Template LibraryА как же насчет Standard Template Library (STL)? Насколько она завязана на CRT, можно ли использовать её в сверхмалых проектах? Вот пример программы, которая будет спокойно собрана с помощью такого подхода без стартового кода CRT: Для сборки этого примера необходимо использовать следующую командную строку: Библиотека импорта kernel32.lib необходима для функций работы с Win32-кучей. Что касается других реализаций STL, предоставлю слово Павлу Блудову: «Страшная тайна STL от SGI и HP в том, что им совершенно не нужна CRT. С двумя оговорками: если посмотреть на __THROW_BAD_ALLOC, то он являет собой именно эта строчка, и никакая другая, нуждается в CRT. Ну, если быть совсем точным, std::string’у может понадобиться CRT. Тут уж ничего не попишешь. Используйте WTL::CString. Слова о std::string в полной мере справедливы и для реализации STL от Dinkumware. Если вы ищете реализацию полноценного строкового класса, не использующего стартовый код CRT, советую взглянуть на CascString в составе библиотеки ascLib. Директива #import и ее ограничения в облегченных проектахПри ее использовании компилятор генерирует описания интерфейсов и, если не указано обратное, создает набор оберточных классов ( wrappers ) для упрощения работы с указателями на эти интерфейсы. Кроме того, детали реализации COM-объектов скрываются за высокоуровневыми средствами. В число таких деталей входят преобразование [out,retval]-параметров в возвращаемые значения функций, упрощение работы с BSTR-строками, управление сроками жизни объектов, доступ к свойствам и преобразование COM-HRESULT в исключения С++. Но поддержка всех этих приятных «мелочей» реализована с использованием CRT и требует включения стартового кода CRT. Иногда при использовании #import можно обойтись «малой кровью». Это возможно, например, если в интерфейсах импортируемой библиотеки типов не используются BSTR- и VARIANT-параметры (вообще-то, достаточно редкий случай). Тогда можно воспользоваться всеми удобствами, предоставляемыми #import, но подавить генерацию исключений C++ при возврате ошибок. Для этого потребуется реализовать функцию Такая возможность определяется в каждом конкретном случае экспериментально. Все же, если вы не используете исключения, лучше отказаться от расширенной помощи директивы #import и обрабатывать HRESULT вручную.
|