Сейчас на форуме: tyns777 (+4 невидимых) |
![]() |
eXeL@B —› Программирование —› Windows I/o без Kernel32.dll и Advapi32.dll |
Посл.ответ | Сообщение |
|
Создано: 20 июня 2010 15:52 · Личное сообщение · #1 Добрый день. Необходимо в Windows XP SP3 распечатать в стандартный поток "some text here" без прямого или косвенного использования kernel32.dll и advapi32.dll (в иделе программа вообще с этими библиотеками слинкована быть не должна). В распоряжении С и ассемблер x86; Microsoft Visual Studio 2005 и MASM. В чем проблема: я математик и программирование для меня всегда было инструментом для кодирования алгоритмов. Никогда не спускался по лестнице абстракции ниже. Вся проблема в том, что я слабо представляю, что значат наложенные ограничения и что я вообще могу использовать. В чем сложность: сложно получить ответ от гугла, если в строке поиска указать "bla bla bla без kernel32.dll". Получаешь непременно с "kernel32.dll". Почему пишу на этот форум: [QUOTE=winasm] You try to make a hello world example wihout kernel.lib? If this correct if not allowed in this forum,this is virus-Technology[/QUOTE] Насколько я вижу решение задачи - нужно обойти API используя native API, тоесть прямиком к ntdll.dll. Проблема в том, что даже минимальное приложение на MASM32 у меня не получается собрать без kernel32.dll. Я хотябы в правильную сторону смотрю? ![]() |
|
Создано: 20 июня 2010 16:57 · Личное сообщение · #2 Плохо стараешься, если не получается без кернела собрать любое приложение. Юзай натив апи, линкуй с нтдлл да и всё, на асме вообще без проблем. Ну если на сях, немножко больше гемора, типа убирать рантайм ещё, свою точку входа определить. И что подразумевается под стандартным потоком? Вывод в консоль? В файл? Вообще любой поток сишный? ![]() |
|
Создано: 20 июня 2010 22:46 · Поправил: s0l · Личное сообщение · #3 |
|
Создано: 21 июня 2010 09:35 · Личное сообщение · #4 Archer пишет: Плохо стараешься, если не получается без кернела собрать любое приложение. Юзай натив апи, линкуй с нтдлл да и всё, на асме вообще без проблем. Стало стыдно, спасибо. Уполз обратно в пещеру до появления умных вопросов. Archer пишет: И что подразумевается под стандартным потоком? Вывод в консоль? В файл? Вообще любой поток сишный? Ну, вообще, хотелось бы, чтобы программа работала так: при запуске ее C:\>program она выводила на консоль При запуске c:\>program > file она выводила в файл file При запуске c:\>program | more она выводила в трубу. Но это уже потом. s0l пишет: а что мешает в гугле сделать запрос: Code: бла-бла-бла "без kernel32.dll" А ты попробуй ![]() ![]() |
|
Создано: 21 июня 2010 17:10 · Личное сообщение · #5 Ну если надо фактически любой сишный поток, ну будет несколько больше порнографии с парсингом этого всего дела, но в принципе суть не меняется: выяснить, какие нужны натив апи (отревёрсить нужные функи до самого низа), писать софт на нативе и линковать с нтдлл. Гугли, что такое натив апи, как его вызывать, как линковать, не вижу ничего такого, что гугл бы не дал. ![]() |
|
Создано: 21 июня 2010 18:50 · Личное сообщение · #6 |
|
Создано: 24 июня 2010 22:02 · Личное сообщение · #7 Всем принявшим участие спасибо! Задачу решил BaGiE, за что ему честь и хвала! ![]() ![]() |
|
Создано: 25 июня 2010 13:10 · Личное сообщение · #8 |
|
Создано: 25 июня 2010 15:44 · Поправил: BaGiE · Личное сообщение · #9 cppasm я такое решение автору предложил. тестировалось только на xpsp3. Code:
![]() |
|
Создано: 26 июня 2010 05:58 · Поправил: BaGiE · Личное сообщение · #10 кому интересно то вот вариант без CsrClientCallServer и вообще без импортов к тому же на WinXP SP0 тоже заработало как и на SP3 и наверняка на SP1,SP2 робит Code:
//походу еще и баг нашелся на форуме. в {ASM}{/ASM} смайлы пытается тоже подменять на картинки. там в коде в строке смайл du ': )' выглядит как Code:
![]() |
|
Создано: 26 июня 2010 12:03 · Личное сообщение · #11 |
|
Создано: 26 июня 2010 14:23 · Поправил: DenCoder · Личное сообщение · #12 |
|
Создано: 26 июня 2010 16:33 · Личное сообщение · #13 |
|
Создано: 27 июня 2010 06:11 · Поправил: BaGiE · Личное сообщение · #14 Clerk да, спасибо, но изначально смотрелось только для xp, а в других виндах, видимо, формат и структуры LPC-сообщений другие. на 64-битных виндах читал еще какая-то особенность с LPC есть. а переносить код с WriteConsoleA(W) автор не разрешает к тому же в требованиях именно xp (вопрос совместимости не стоит) и коду поменьше. кстати, может знаете где почитать я не в курсе почему если приложение запускаем непосредственно CsrPortHandle==$18, а если через cmd.exe, например, то $7ec ; кстати, разобрался почему. ключевое слово bInheritHandles DenCoder да, тут лучше так. вариации по сабжу) ![]() |
|
Создано: 14 июля 2010 17:46 · Поправил: Clerk · Личное сообщение · #15 |
|
Создано: 14 июля 2010 21:08 · Личное сообщение · #16 |
|
Создано: 14 июля 2010 22:06 · Личное сообщение · #17 DenCoder Сказал ведь что взведён TF. Инструкция Sysenter не маскирует этот флаг, изза чего генерится #DB после смены кпл. ISR #DB проверяет адрес останова и если он равен KiFastCallEntry(), то трап откатывается - управление передаётся на KiFastCallEntry2(), она формирует часть трап-фрейма для поправки флагов, взводит TF, так как при возврате в юзермод он должен быть взведён и продолжает исполнение нормальным путём. ![]() |
|
Создано: 14 июля 2010 22:14 · Личное сообщение · #18 |
|
Создано: 14 июля 2010 22:44 · Поправил: Модератор · Личное сообщение · #19 |
|
Создано: 16 июля 2010 17:20 · Личное сообщение · #20 |
![]() |
eXeL@B —› Программирование —› Windows I/o без Kernel32.dll и Advapi32.dll |