Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 11642
Последний выпуск: 19.06.2015

Подгрузка кучи системных DLL к пустой самописной библиотеке

280
01 июня
nof
193 / / 03.04.2006
Добрый всем день.
Такой необычный вопрос.. В MSVC создаю пустой проект DLL-ки, в сорс добавляю только:

Код:
#include <windows.h>

bool APIENTRY DllMain(HMODULE hModule,
    DWORD  ul_reason_for_call,
    LPVOID lpReserved
)
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:

        break;
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}
После чего компилю, вес DLL получается 9 кб. Откуда? И после аттача этой DLL к любому процессу, она подтягивает ещё целый набор библиотек. Вот они:
https://yadi.sk/i/3bewimmn3JjWvj

Собственно, такой вопрос... а как мне сделать реально пустую длл? В которой будет только то, что мне нужно. Чтобы я, к пример, мог дёргать WinAPI напрямую через GetProcAddress? Чтобы не было ничего лишнего в виде вот этой толпу подгруженных библиотек
231
02 июня
Ramon
1.0K / / 16.08.2003
CRT это C Run-Time Libraries, подчистите список библиотек в аргументах к линкеру, а стандартную библиотеку прилинкуйте статически.

PS: kernel32.lib все равно придется оставить, для GetProcAddress
PPS: Насчет т.н. "веса": ваш кусок из одной процедуры = 4K, заголовки и прочая лабуда, коие располагаются вне пределов страницы с исполняемым кодом
6
02 июня
@pixo $oft
3.4K / / 20.09.2006
Цитата: Ramon
ваш кусок из одной процедуры = 4K

Ну нет :-) Там оно в 512 байт вместится (непосредственно код). Если он отвяжется от рантайма, то с таким кодом 1.5 Кб вроде будет DLL. Если будут вызываться какие-то функции из системных библиотек, то тут вроде 2.5 Кб минимум.

Автору:
9 Кб ещё могут быть из-за того, что DLL собирается в конфигурации Debug. А чтобы отвязаться от рантайма, надо, как минимум, переопределить точку входа на свою main() и в настройках C/C++ → Создание кода выключить исключения C++ и проверку переполнения буфера. Ну и, естественно, нигде не звать функции из рантайма ☺

231
03 июня
Ramon
1.0K / / 16.08.2003
Цитата: @pixo $oft
Цитата: Ramon
ваш кусок из одной процедуры = 4K

Ну нет :-) Там оно в 512 байт вместится (непосредственно код). Если он отвяжется от рантайма, то с таким кодом 1.5 Кб вроде будет DLL. Если будут вызываться какие-то функции из системных библиотек, то тут вроде 2.5 Кб минимум.

А как по вашему работает системный загрузчик? Копирует данные из файлика в память посредством memcpy?

PS: Онанизм на ерунду вида "у меня самый маленький в мире coff файл" есть ни что иное как одурь.

6
03 июня
@pixo $oft
3.4K / / 20.09.2006
Цитата: Ramon
А как по вашему работает системный загрузчик? Копирует данные из файлика в память посредством memcpy?

Я знаю, как он работает :-)
Автор-то про размер не в памяти писал, а на диске. Как он написал, так и я ему. В памяти оно, естественно, мапается на страницы.

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог