0 / 0 / 0
Регистрация: 12.04.2008
Сообщений: 14
|
|
1 | |
Windows I/o без Kernel32.dll и Advapi32.dll19.06.2010, 20:06. Показов 3300. Ответов 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
|
|
19.06.2010, 20:06 | |
Ответы с готовыми решениями:
9
Кто может поделиться файлами ogg.dll, vorbis.dll и vorbisfile.dll - 32-х и 64-битными версиями? При компиляции DLL-проекта не создается DLL-ка
Создание dll библиотеки без добавления в решение |
4337 / 1506 / 101
Регистрация: 12.04.2009
Сообщений: 2,342
|
|
19.06.2010, 23:03 | 2 |
0
|
1178 / 988 / 83
Регистрация: 29.10.2009
Сообщений: 1,385
|
|
20.06.2010, 01:11 | 3 |
Coin, не можешь ли подробнее пояснить суть проблемы? Ведь все работающее под Windows просто для своего запуска требует этих библиотек. Запуском-то заведует операционка!
А то возьми ДОС, какой-нибудь старенький BC-2 или BC-3 и делай, что душеньке угодно!
0
|
![]() 2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
|
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
|
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
|
49 / 48 / 25
Регистрация: 03.04.2010
Сообщений: 100
|
|
21.06.2010, 09:01 | 6 |
Конкретно по ExitProcess могу сказать, что ее можно заменить на простой ret - это будет корректно с точки зрения операционки.
Про другие же функции - вызывай их с нужными параметрами и начинай пошаговое выполнение в отладчике - смотри, что они вызывают внутри себя. Как правило, функции в kernel32, как уже было сказано, обертки для функций в ntdll, так что осталось только найти аналоги и понять, какие параметры им надо передавать. Правда у меня до сих пор остается сомнение. По-моему винда подгружает kernel32 в адресное пространство каждого процесса, не зависимо от того, использует он функции из этой библиотеки или нет (винда сама их использует при создании процесса). Можешь сказать, почему тебе надо сделать именно так?
1
|
0 / 0 / 0
Регистрация: 12.04.2008
Сообщений: 14
|
|
21.06.2010, 10:01 [ТС] | 7 |
Вот так я буду пытаться, спасибо. Друго варианта просто не вижу.
![]() ![]() ![]()
0
|
49 / 48 / 25
Регистрация: 03.04.2010
Сообщений: 100
|
|
21.06.2010, 10:29 | 8 |
А как будет проверяться, вызываешь ты оттуда функции или нет? Если по таблице импорта написанного тобой приложения, то можешь найти в адресном пространстве kernel32 вручную, в ней - функции LoadLibrary и GetProcAddress и в путь, используешь любые функции, которые тебе нужны... Хотя, думаю, это уже несколько не то, что тебе необходимо.
0
|
0 / 0 / 0
Регистрация: 12.04.2008
Сообщений: 14
|
|
21.06.2010, 10:41 [ТС] | 9 |
Все же так делать нехорошо
![]()
0
|
0 / 0 / 0
Регистрация: 12.04.2008
Сообщений: 14
|
|
24.06.2010, 23:03 [ТС] | 10 |
Всем откликнувшимся большое спасибо
![]()
0
|
24.06.2010, 23:03 | |
24.06.2010, 23:03 | |
Помогаю со студенческими работами здесь
10
Точка входа в процедуру _dbk_fcall_wraper не найдена в библиотеке DLL BORLNDMM.DLL DLL - как подменить функцию, используя самодельную DLL? Как вшить в программу ssleay32.dll и libeay32.dll Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |