0 / 0 / 0
Регистрация: 12.04.2008
Сообщений: 14
1

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

19.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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.06.2010, 20:06
Ответы с готовыми решениями:

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

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

Подключение DLL из памяти без сохранения ее на диск
У меня есть DLL которую надо подключить к программе в процессе ее выполнения. Проблема в том что...

Создание dll библиотеки без добавления в решение
Доброго времени суток. Я сделал библиотеку dll строго по...

9
4337 / 1506 / 101
Регистрация: 12.04.2009
Сообщений: 2,342
19.06.2010, 23:03 2
Цитата Сообщение от Coin Посмотреть сообщение
сложно получить ответ от гугла, если в строке поиска указать "bla bla bla без kernel32.dll". Получаешь непременно с "kernel32.dll"
Код
bla bla bla без -kernel32.dll
0
Day
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
Больше спасибо за ответы.

Цитата Сообщение от 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
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
Цитата Сообщение от gh05t Посмотреть сообщение
Про другие же функции - вызывай их с нужными параметрами и начинай пошаговое выполнение в отладчике - смотри, что они вызывают внутри себя. Как правило, функции в kernel32, как уже было сказано, обертки для функций в ntdll, так что осталось только найти аналоги и понять, какие параметры им надо передавать.
Вот так я буду пытаться, спасибо. Друго варианта просто не вижу.

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

Цитата Сообщение от gh05t
Можешь сказать, почему тебе надо сделать именно так?
Это тест. Смогу выкрутиться или нет. Тест куда - пока не скажу
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.06.2010, 23:03
Помогаю со студенческими работами здесь

DLL для Windows Mobile
Всем добрый день. Такая проблема: есть библиотека DLL, которая была написана для десктопных...

Точка входа в процедуру _dbk_fcall_wraper не найдена в библиотеке DLL BORLNDMM.DLL
При попытке скомпилировать файл выдает такую ошибку Точка входа в процедуру _dbk_fcall_wraper не...

DLL - как подменить функцию, используя самодельную DLL?
Очень прошу пособить, кому не трудно... . Проблема в целом не сложная: имеется сторонняя программа...

Как вшить в программу ssleay32.dll и libeay32.dll
Доброе время суток. Для нормальной работы программы на другом компе с https, нужно рядом с прогой...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru