Форум программистов, компьютерный форум 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. Просмотров 1635. Ответов 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 {}, как оказалость, использует.

Заранее спасибо всем откликнувшимся.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
HIMen
4119 / 1368 / 39
Регистрация: 12.04.2009
Сообщений: 2,346
19.06.2010, 23:03     Windows I/o без Kernel32.dll и Advapi32.dll #2
Цитата Сообщение от Coin Посмотреть сообщение
сложно получить ответ от гугла, если в строке поиска указать "bla bla bla без kernel32.dll". Получаешь непременно с "kernel32.dll"
Код
bla bla bla без -kernel32.dll
Day
1152 / 957 / 57
Регистрация: 29.10.2009
Сообщений: 1,384
20.06.2010, 01:11     Windows I/o без Kernel32.dll и Advapi32.dll #3
Coin, не можешь ли подробнее пояснить суть проблемы? Ведь все работающее под Windows просто для своего запуска требует этих библиотек. Запуском-то заведует операционка!
А то возьми ДОС, какой-нибудь старенький BC-2 или BC-3 и делай, что душеньке угодно!
CheshireCat
Эксперт С++
2890 / 1239 / 78
Регистрация: 27.05.2008
Сообщений: 3,327
20.06.2010, 10:57     Windows I/o без Kernel32.dll и Advapi32.dll #4
Даже старенький BC-2 или BC-3 все равно будет косвенно использовать kernel32.dll. Потому что DOS-программа будет исполняться в виртуальной DOS-машине, которая все равно будет использовать kernel.......

Думается, что Coin нужно копать в сторону Native API - т.е. функций, начинающихся с аббревиатур Zw... или Ke.... - это "чистое" ядро Windows, и именно к ним обращаются функции kernel32.dll. Т.е., обращаясь к ним напрямую, мы просто "обойдем" уровень kernel32 - и таким образом, условие задачи будет выполнено.
Coin
0 / 0 / 0
Регистрация: 12.04.2008
Сообщений: 14
20.06.2010, 21:42  [ТС]     Windows I/o без Kernel32.dll и Advapi32.dll #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 слоя, я прав?
gh05t
47 / 46 / 4
Регистрация: 03.04.2010
Сообщений: 99
21.06.2010, 09:01     Windows I/o без Kernel32.dll и Advapi32.dll #6
Конкретно по ExitProcess могу сказать, что ее можно заменить на простой ret - это будет корректно с точки зрения операционки.
Про другие же функции - вызывай их с нужными параметрами и начинай пошаговое выполнение в отладчике - смотри, что они вызывают внутри себя. Как правило, функции в kernel32, как уже было сказано, обертки для функций в ntdll, так что осталось только найти аналоги и понять, какие параметры им надо передавать.
Правда у меня до сих пор остается сомнение. По-моему винда подгружает kernel32 в адресное пространство каждого процесса, не зависимо от того, использует он функции из этой библиотеки или нет (винда сама их использует при создании процесса). Можешь сказать, почему тебе надо сделать именно так?
Coin
0 / 0 / 0
Регистрация: 12.04.2008
Сообщений: 14
21.06.2010, 10:01  [ТС]     Windows I/o без Kernel32.dll и Advapi32.dll #7
Цитата Сообщение от gh05t Посмотреть сообщение
Про другие же функции - вызывай их с нужными параметрами и начинай пошаговое выполнение в отладчике - смотри, что они вызывают внутри себя. Как правило, функции в kernel32, как уже было сказано, обертки для функций в ntdll, так что осталось только найти аналоги и понять, какие параметры им надо передавать.
Вот так я буду пытаться, спасибо. Друго варианта просто не вижу.

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

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

Точка входа в процедуру _dbk_fcall_wraper не найдена в библиотеке DLL BORLNDMM.DLL C++ Builder
DLL hijacking или подмена DLL при открытии .docx C++ COM
Как из DLL, в котором есть только DllGetClassObject, обратиться к методу, который должен быть в этой DLL? C++ WinAPI
Точка входа в процедуру InitializeConditionVariable не найдена в библиотеке DLL KERNEL32.dll C++ WinAPI
DLL - как подменить функцию, используя самодельную DLL? C++ Builder

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

Или воспользуйтесь поиском по форуму:
Coin
0 / 0 / 0
Регистрация: 12.04.2008
Сообщений: 14
24.06.2010, 23:03  [ТС]     Windows I/o без Kernel32.dll и Advapi32.dll #10
Всем откликнувшимся большое спасибо
Изображения
 
Yandex
Объявления
24.06.2010, 23:03     Windows I/o без Kernel32.dll и Advapi32.dll
Ответ Создать тему
Опции темы

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