Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
Coin
0 / 0 / 0
Регистрация: 12.04.2008
Сообщений: 14
#1

Windows I/o без Kernel32.dll и Advapi32.dll - C++

19.06.2010, 20:06. Просмотров 1676. Ответов 9
Метки нет (Все метки)

Добрый день.
Необходимо в Windows XP SP3 распечатать в стандартный поток "some text here" без прямого или косвенного использования kernel32.dll и advapi32.dll (в иделе программа вообще с этими библиотеками слинкована быть не должна). В распоряжении С и ассемблер x86; Microsoft Visual Studio 2005 и MASM.

В чем проблема: я математик и программирование для меня всегда было инструментом для кодирования алгоритмов. Никогда не спускался по лестнице абстракции ниже. Вся проблема в том, что я слабо представляю, что значат наложенные ограничения и что я вообще могу использовать.

В чем сложность: сложно получить ответ от гугла, если в строке поиска указать "bla bla bla без kernel32.dll". Получаешь непременно с "kernel32.dll".

Нужно:
1)Понять, что у меня есть в распоряжении - найти границу того, что можно использовать, а что нет.
2)Создать приложение в VS не использующее kernel32.dll. Пустое консольное приложение void mail {}, как оказалость, использует.

Заранее спасибо всем откликнувшимся.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.06.2010, 20:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Windows I/o без Kernel32.dll и Advapi32.dll (C++):

Кто может поделиться файлами ogg.dll, vorbis.dll и vorbisfile.dll - 32-х и 64-битными версиями? - C++
Движок перевожу на платформу Win64 и нужно, чтобы разрядность ЕХЕ и DLL совпадали, а в интернете искал 64-битные версии ogg.dll, vorbis.dll...

При компиляции DLL-проекта не создается DLL-ка - C++
Добрый день. создал в Visual Studio 2010 проект C+= типа DLL. В файл dllmain.cpp вставил вот такой код: // test.cpp: определяет...

Создание dll библиотеки без добавления в решение - C++
Доброго времени суток. Я сделал библиотеку dll строго по http://msdn.microsoft.com/ru-ru/library/vstudio/ms235636(v=vs.100).aspx Всё...

DLL для Windows Mobile - C++
Всем добрый день. Такая проблема: есть библиотека DLL, которая была написана для десктопных приложений. Необходимо преобразовать ее в...

DLL - C++
Подкиньте какую нибудь инфу про DLL. Как создавать, подключать и тд. Заранее спс.

Dll - C++
Доброго времени суток, столкнулся с такой проблемой, есть ддл-ка libfftw3-3.dll, мне нужно ей воспользоваться. Но не получается...

9
HIMen
4137 / 1386 / 39
Регистрация: 12.04.2009
Сообщений: 2,346
19.06.2010, 23:03 #2
Цитата Сообщение от Coin Посмотреть сообщение
сложно получить ответ от гугла, если в строке поиска указать "bla bla bla без kernel32.dll". Получаешь непременно с "kernel32.dll"
Код
bla bla bla без -kernel32.dll
0
Day
1158 / 963 / 57
Регистрация: 29.10.2009
Сообщений: 1,385
20.06.2010, 01:11 #3
Coin, не можешь ли подробнее пояснить суть проблемы? Ведь все работающее под Windows просто для своего запуска требует этих библиотек. Запуском-то заведует операционка!
А то возьми ДОС, какой-нибудь старенький BC-2 или BC-3 и делай, что душеньке угодно!
0
CheshireCat
Эксперт С++
2893 / 1242 / 78
Регистрация: 27.05.2008
Сообщений: 3,379
20.06.2010, 10:57 #4
Даже старенький BC-2 или BC-3 все равно будет косвенно использовать kernel32.dll. Потому что DOS-программа будет исполняться в виртуальной DOS-машине, которая все равно будет использовать kernel.......

Думается, что Coin нужно копать в сторону Native API - т.е. функций, начинающихся с аббревиатур Zw... или Ke.... - это "чистое" ядро Windows, и именно к ним обращаются функции kernel32.dll. Т.е., обращаясь к ним напрямую, мы просто "обойдем" уровень kernel32 - и таким образом, условие задачи будет выполнено.
0
Coin
0 / 0 / 0
Регистрация: 12.04.2008
Сообщений: 14
20.06.2010, 21:42  [ТС] #5
Больше спасибо за ответы.

Цитата Сообщение от Day Посмотреть сообщение
Coin, не можешь ли подробнее пояснить суть проблемы? Ведь все работающее под Windows просто для своего запуска требует этих библиотек. Запуском-то заведует операционка!
А пояснять вобщем то нечего. Передо мной была поставлена задача, такакая как я ее описал, не больше не меньше.

Цитата Сообщение от Day
...все работающее под Windows просто для своего запуска требует этих библиотек. Запуском-то заведует операционка!
Так и есть. Разбил задачу на части. Сейчас пытаюсь стартовать и корректно завершить пустое приложение с кодом 0 без kernel32.dll. Идеи?

Цитата Сообщение от CheshireCat Посмотреть сообщение
Думается, что Coin нужно копать в сторону Native API - т.е. функций, начинающихся с аббревиатур Zw... или Ke.... - это "чистое" ядро Windows, и именно к ним обращаются функции kernel32.dll. Т.е., обращаясь к ним напрямую, мы просто "обойдем" уровень kernel32 - и таким образом, условие задачи будет выполнено.
Больше спасибо за наводку. Почитал тырнет, немного въехал в происходящее в системе, хотябы запросы гуглу начал задавать такие, чтоб ответы не ставили в тупик. Скачал список функций ntdll.dll - страшно. Много и непонятно. Логику работы функций kernel32.dll не посмотреть, разумеется, никак? Как я уже писал пробуем с малого - запуститься и корректно завершиться без kernel32. Написал на асме минималистическое приложение:
Assembler
1
2
3
4
5
6
7
8
.386
 .model flat,stdcall
ExitProcess PROTO :DWORD
 .code
start: 
 push 0
 call ExitProcess
end start
объекный файл собрать можно, а вот линковщик уже ругается на отсутствие злопалучной библиотеки:
minimal.obj : error LNK2001: unresolved external symbol _ExitProcess@4
minimal.exe : fatal error LNK1120: 1 unresolved externals

Ругается на ExitProcess. Значит нужно писать аналог. Вот тут то я и сажусь в лужу. Нет понимания происходящего. Тоесть того, как оно должно быть. Хорошо бы понять как работает вышеописаный код хотябы на уровне API. Дальше видимо спускаться ниже, к ntdll.dll - писать свой мост к ней взамен API слоя, я прав?
0
gh05t
48 / 47 / 4
Регистрация: 03.04.2010
Сообщений: 99
21.06.2010, 09:01 #6
Конкретно по ExitProcess могу сказать, что ее можно заменить на простой ret - это будет корректно с точки зрения операционки.
Про другие же функции - вызывай их с нужными параметрами и начинай пошаговое выполнение в отладчике - смотри, что они вызывают внутри себя. Как правило, функции в kernel32, как уже было сказано, обертки для функций в ntdll, так что осталось только найти аналоги и понять, какие параметры им надо передавать.
Правда у меня до сих пор остается сомнение. По-моему винда подгружает kernel32 в адресное пространство каждого процесса, не зависимо от того, использует он функции из этой библиотеки или нет (винда сама их использует при создании процесса). Можешь сказать, почему тебе надо сделать именно так?
1
Coin
0 / 0 / 0
Регистрация: 12.04.2008
Сообщений: 14
21.06.2010, 10:01  [ТС] #7
Цитата Сообщение от gh05t Посмотреть сообщение
Про другие же функции - вызывай их с нужными параметрами и начинай пошаговое выполнение в отладчике - смотри, что они вызывают внутри себя. Как правило, функции в kernel32, как уже было сказано, обертки для функций в ntdll, так что осталось только найти аналоги и понять, какие параметры им надо передавать.
Вот так я буду пытаться, спасибо. Друго варианта просто не вижу.

Цитата Сообщение от gh05t
Правда у меня до сих пор остается сомнение. По-моему винда подгружает kernel32 в адресное пространство каждого процесса, не зависимо от того, использует он функции из этой библиотеки или нет (винда сама их использует при создании процесса).
Это не страшно. Пусть болтается, а вот на вызовы от туда - табу.

Цитата Сообщение от gh05t
Можешь сказать, почему тебе надо сделать именно так?
Это тест. Смогу выкрутиться или нет. Тест куда - пока не скажу
0
gh05t
48 / 47 / 4
Регистрация: 03.04.2010
Сообщений: 99
21.06.2010, 10:29 #8
А как будет проверяться, вызываешь ты оттуда функции или нет? Если по таблице импорта написанного тобой приложения, то можешь найти в адресном пространстве kernel32 вручную, в ней - функции LoadLibrary и GetProcAddress и в путь, используешь любые функции, которые тебе нужны... Хотя, думаю, это уже несколько не то, что тебе необходимо.
0
Coin
0 / 0 / 0
Регистрация: 12.04.2008
Сообщений: 14
21.06.2010, 10:41  [ТС] #9
Все же так делать нехорошо Да и не идиот наверное будет проверять. Но все равно спасибо!
0
Coin
0 / 0 / 0
Регистрация: 12.04.2008
Сообщений: 14
24.06.2010, 23:03  [ТС] #10
Всем откликнувшимся большое спасибо
0
Изображения
 
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.06.2010, 23:03
Привет! Вот еще темы с ответами:

Работа с DLL - C++
У меня такая проблема не могу экспортировать функцию с шаблоном без шаблона она без проблем работает. Название функции BubleSort. *.cpp ...

сс3260mt.dll - C++
Билдер пишет, что на компе нет сс3260mt.dll и упорно отказывается запускать мои проги. Я скачал эту библиотеку, в какую папку её пихать?

Декомпиляция dll - C++
Возможна ли декомпиляция dll'ки, защищенной Themida, если есть ThemidaSDK.h и Obfuscator.cpp, с помощью которых была скомпилирована эта dll...

DLL в borland c++ - C++
//Пример кода в dll: int count; int __stdcall __export f_001(const char* cst) { count++; ... return count; }


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Yandex
Объявления
24.06.2010, 23:03
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru