Coin
0 / 0 / 0
Регистрация: 12.04.2008
Сообщений: 14
|
|
#1 | |
Windows I/o без Kernel32.dll и Advapi32.dll - C++19.06.2010, 20:06. Просмотров 1774. Ответов 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++):
9
Кто может поделиться файлами ogg.dll, vorbis.dll и vorbisfile.dll - 32-х и 64-битными версиями? - C++ При компиляции DLL-проекта не создается DLL-ка - C++ Создание dll библиотеки без добавления в решение - C++ DLL для Windows Mobile - C++ DLL - C++ Dll - C++ |
HIMen
4157 / 1406 / 39
Регистрация: 12.04.2009
Сообщений: 2,346
|
|
19.06.2010, 23:03 | #2 |
0
|
Day
1159 / 964 / 57
Регистрация: 29.10.2009
Сообщений: 1,385
|
|
20.06.2010, 01:11 | #3 |
Coin, не можешь ли подробнее пояснить суть проблемы? Ведь все работающее под Windows просто для своего запуска требует этих библиотек. Запуском-то заведует операционка!
А то возьми ДОС, какой-нибудь старенький BC-2 или BC-3 и делай, что душеньке угодно!
0
|
CheshireCat
![]() 2900 / 1249 / 80
Регистрация: 27.05.2008
Сообщений: 3,432
|
|
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 | |||||
Больше спасибо за ответы.
А пояснять вобщем то нечего. Передо мной была поставлена задача, такакая как я ее описал, не больше не меньше. ![]() Больше спасибо за наводку. Почитал тырнет, немного въехал в происходящее в системе, хотябы запросы гуглу начал задавать такие, чтоб ответы не ставили в тупик. Скачал список функций ntdll.dll - страшно. Много и непонятно. Логику работы функций kernel32.dll не посмотреть, разумеется, никак? Как я уже писал пробуем с малого - запуститься и корректно завершиться без kernel32. Написал на асме минималистическое приложение:
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
Сообщений: 100
|
|
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 |
Вот так я буду пытаться, спасибо. Друго варианта просто не вижу.
![]() ![]() ![]()
0
|
gh05t
48 / 47 / 4
Регистрация: 03.04.2010
Сообщений: 100
|
|
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
|
24.06.2010, 23:03 | |
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
|
24.06.2010, 23:03 |
Привет! Вот еще темы с ответами:
10
Работа с DLL - C++ сс3260mt.dll - C++ Декомпиляция dll - C++ DLL в borland c++ - C++ Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |