Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

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

59K
20 июня 2010 года
coin
12 / / 20.06.2010
Добрый день.
Необходимо в 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 {}, как оказалость, использует.

Заранее спасибо всем откликнувшимся.
8.2K
20 июня 2010 года
bagie2
299 / / 26.10.2008
писать проще на чистом асме (на фасме удобнее:) ), но откуда такое ограничение насчет kernel32.dll ? она всё равно загрузится, даже если вы её не пропишите в импорте.
14
21 июня 2010 года
Phodopus
3.3K / / 19.06.2008
Цитата:

Необходимо в Windows XP SP3 распечатать в стандартный поток "some text here" без прямого или косвенного использования kernel32.dll и advapi32.dll (в иделе программа вообще с этими библиотеками слинкована быть не должна).


это бред. Описывайте конкретнее и для чего это вам нужно.

399
22 июня 2010 года
KIV
432 / / 20.01.2009
Можно использовать ещё более низкоуровневые функции из ntdll. Если я ошибаюсь и это всё равно приведёт к обращению kernel32 извините. Писать получиться только на асме, потому что любые компиляторы высокого уровня добавляют в программу обработки исключений и т. п. Разумеется, для этого используются функции Windows.
Цитата:
в иделе программа вообще с этими библиотеками слинкована быть не должна


Что-то мне подсказывает, что автор думает, что библиотеки прилинковываются к исполняемому файлу - это не так. kernel32 и avdapi уже загружены в адресное пространство в любом случае,а в образе программы просто проставляются адреса. Хотя в этом предположении (насчёт того, что думает автор) я могу ошибаться.
Почему автор хочет не использовать kernel32 - у меня есть две версии:
1) Это такое задание
2) Автор думает что библиотеки прилинковываются к исполняемому файлу и увеличивает его размер

1
22 июня 2010 года
kot_
7.3K / / 20.01.2000
3) автор не понимает, что такое kernel32 и avdapi и для чего они нужны.
4) задание сформулировано нормально, но фамилия автора - Попов
5) задание формулировал учитель информатики Попова.
3
22 июня 2010 года
Green
4.8K / / 20.01.2000
Цитата: coin
Добрый день.
Необходимо в Windows XP SP3 распечатать в стандартный поток "some text here" без прямого или косвенного использования kernel32.dll и advapi32.dll (в иделе программа вообще с этими библиотеками слинкована быть не должна).


Для чего, зачем? Ответ на этот вопрос поможет решить задачу.
В принципе, используя Native API можно многое.

Цитата: coin

2)Создать приложение в VS не использующее kernel32.dll. Пустое консольное приложение void mail {}, как оказалость, использует.


Это не сложно, достаточно отключить линковку дефолтовых либ и назначить т.входа.
Но опять же, зачем?

3
22 июня 2010 года
Green
4.8K / / 20.01.2000
Цитата: bagie2
писать проще на чистом асме (на фасме удобнее:) ),


Откуда такая уверенность?
Дело субъективное. Мне проще на C/C++.

Цитата: bagie2

она всё равно загрузится, даже если вы её не пропишите в импорте.


Она не грузится, а проецируется в адресное пространство.
Но проецируется в пользовательском режиме в любом случае, это да.

Цитата: Phodopus
это бред. Описывайте конкретнее и для чего это вам нужно.


Это не бред, но требуется нечасто. Хотелось бы узнать зачем это автору.

Цитата: KIV
Можно использовать ещё более низкоуровневые функции из ntdll. Если я ошибаюсь и это всё равно приведёт к обращению kernel32 извините.


Не приведет.

Цитата: KIV

Писать получиться только на асме, потому что любые компиляторы высокого уровня добавляют в программу обработки исключений и т. п. Разумеется, для этого используются функции Windows.


Ошибаешься. Драйвера по-твоему получается пишутся тоже только на асме?
Во-первых, компилятор тут не при чем. Линковкой занимается линкер.
Во-вторых, что компилятор, что линкер обычно настраиваются.
Т.е. вполне можно написать на C/C++.

Цитата: KIV

Что-то мне подсказывает, что автор думает, что библиотеки прилинковываются к исполняемому файлу - это не так.
kernel32 и avdapi уже загружены в адресное пространство в любом случае,а в образе программы просто проставляются адреса.


avdapi изначально не проецируется (не загружается) в процесс
а для "простановки адресов" в любом случае должна быть инф. в программе (IAT как вариант).

8.2K
22 июня 2010 года
bagie2
299 / / 26.10.2008
вообще по этой теме я уже писал на другом форуме, если правильно понял задачу. используйте ntdll!CsrClientCallServer или если глубже, то ntdll!ZwRequestWaitReplyPort только получится не универсально, похоже на разных виндах параметры сильно отличаются. я вот сделал для XPSP3, только на нем и работает пока что.

Цитата:
Она не грузится, а проецируется в адресное пространство.


[COLOR="SlateGray"]Можете не пояснять, я это знаю. Но я бы не стал постоянно употреблять только этот термин.[/COLOR]

автор отпишитесь это ли вам надо вообще? вот код

Код:
format PE Console 5.0

include 'win32wx.inc'
include 'encoding/win1251.inc'

struct CLIENT_ID
       UniqueProcess dd ?
       UniqueThread dd ?
ends

struct PORT_MESSAGE
       Length dd ?
       ZeroInit dd ?
       ClientId CLIENT_ID
       Unknown dq ?
       MessageId dd ?
       CallbackId dd ?
ends

struct CSRSS_WRITE_CONSOLE_REQUEST
       Header PORT_MESSAGE
       Unknown dq ?
       ConsoleHandle dd ?
       StdHandle dd ?
       Buffer du 40 dup ?  ; 0x50 bytes max (40 WCHARs)
       BufferAddress dd ?
       BufferLength dd ?
       Unknown2 dd ?
       UnknownFlag db ?
       IsUnicode db ?
       Unknown4 db 42 dup ?
       Unknown5 dd ?
       Unknown6 db 116 dup ?
ends

.code

entry Main

proc Main

     locals
    Request CSRSS_WRITE_CONSOLE_REQUEST
     endl

     xor eax,eax
     lea edi,[Request]
     mov ecx,sizeof.CSRSS_WRITE_CONSOLE_REQUEST
     rep stosb

     xor eax,eax
     mov eax,[fs:eax+0x30]
     mov eax,[eax+0x10] ; RTL_USER_PROCESS_PARAMETERS
     mov edx,[eax+0x10] ; ProcessParameters.ConsoleHandle
     mov [Request.ConsoleHandle],edx
     mov edx,[eax+0x1c] ; ProcessParameters.StdOutputHandle
     mov [Request.StdHandle],edx
     mov [Request.UnknownFlag],1
     mov [Request.IsUnicode],1
     mov [Request.Unknown5],-1

     lea esi,[wstrMessage]
     lea edi,[Request.Buffer]
     mov [Request.BufferAddress],edi
     mov [Request.BufferLength],sizeof.wstrMessage
     mov ecx,sizeof.wstrMessage shr 1
     rep movsw

     invoke CsrClientCallServer,addr Request,NULL,0x0002021e,0x0000006c

     ret
endp

.data

     wstrMessage du 'Hello, World!'
     sizeof.wstrMessage = $-wstrMessage

     data import

    library ntdll,'NTDLL.DLL'

    import ntdll,\
           CsrClientCallServer,'CsrClientCallServer'

     end data
59K
23 июня 2010 года
coin
12 / / 20.06.2010
Добрый день. Огромное спасибо всем откликнувшимся.

Цитата: kot_
3) автор не понимает, что такое kernel32 и avdapi и для чего они нужны.


Да, так и есть. Предыдущие 4 дня потратил на ликвидацию своей безграмотности. Надеюсь хоть от части это удалось.

To bagie2
Золотой человек! Похоже что оно и надо. Попытаюсь собрать. Это FASM?

8.2K
23 июня 2010 года
bagie2
299 / / 26.10.2008
да, фасм. должно всё без проблем скомпилироваться
59K
23 июня 2010 года
coin
12 / / 20.06.2010
Собрал - работает. Буду разбираться в коде. Спасибо.
8.2K
23 июня 2010 года
bagie2
299 / / 26.10.2008
тут и тут есть что почитать
14
23 июня 2010 года
Phodopus
3.3K / / 19.06.2008
Цитата: Green

Это не бред, но требуется нечасто. Хотелось бы узнать зачем это автору.


бред в том смысле, как это описано ТС-ом. Именно потому что не указано "зачем" (и есть обоснованные подозрения на непонимание). Поэтому мне тоже хотелось бы знать и от этого отталкиваться :)

Цитата:
Собрал - работает. Буду разбираться в коде


Ну вот, интересный диалог запороли...

399
23 июня 2010 года
KIV
432 / / 20.01.2009
Автор, может всё же расскажешь зачем тебе это нужно?
59K
24 июня 2010 года
coin
12 / / 20.06.2010
Цитата: bagie2
тут и тут есть что почитать


Вот за это отдельное спасибо :)

Цитата: Phodopus
Ну вот, интересный диалог запороли...


А это все к bagie2, спасибо ему отдельное :). Я уже WriteConsoleA до низа отреверсил. Мое решение бы было схоже, но раз в 20 объемнее.

Цитата: KIV
Автор, может всё же расскажешь зачем тебе это нужно?


Конечно, но послезавтра :)

Сейчас попробую собрать на MASM`е, если получится, то прям совсем все хорошо.

8.4K
24 июня 2010 года
z0rch
275 / / 02.09.2008
[QUOTE=coin]Конечно, но послезавтра[/QUOTE]
интересная позиция...а почему именно послезавтра? :)
мы увидим это в новостях?
399
24 июня 2010 года
KIV
432 / / 20.01.2009
Цитата:
Сейчас попробую собрать на MASM`е, если получится, то прям совсем все хорошо.


Что-то мне подсказывает, что это задание. Ну а послезавтра чтобы препод не нашёл решение в Google на этом форуме до того как его проверил.

59K
24 июня 2010 года
coin
12 / / 20.06.2010
УДАЛЕНО.

Тут была написана ЧУШЬ. Прочитал разницу с синтаксисе между FASM и MASM. Ушел переделывать.
59K
24 июня 2010 года
coin
12 / / 20.06.2010
Цитата: KIV
Что-то мне подсказывает, что это задание. Ну а послезавтра чтобы препод не нашёл решение в Google на этом форуме до того как его проверил.


1)Да задание
2)Нет, не препод
3)Найдут - неважно
4)Ибо суеверен

14
24 июня 2010 года
Phodopus
3.3K / / 19.06.2008
Цитата: coin
1)Да задание


Так и знал. Автор, ты создал тему не там где ей место, и нарываешься на нарушение. Тем самым еще и запутал народ.

1
24 июня 2010 года
kot_
7.3K / / 20.01.2000
Цитата: Phodopus
Так и знал. Автор, ты создал тему не там где ей место, и нарываешься на нарушение. Тем самым еще и запутал народ.


Топикстартеру - вы никуда ничего не пишете. Поэтому и нет результата.

З.Ы. на самом деле вопрос на нарушение вовсе не тянет. Мы же наказываем не за "задания" - а за тупость и не желание думать и пользоваться поиском. Это не значит, что любой человек задавший вопрос с "с лабы" автоматом казнится. Это значит что если человек сам не хочет ничего делать а хочет готовое - вот тут он узнает про себя много нового и не ожиданного.
Автора можно упрекнуть только в одном - невнятно сформулированное задание. Но это отнюдь не значит что любой студент будет наказан. Наказаны будут только дебилы - да и то не навсегда.
Автор вполне разбирается и не вижу проблем.

59K
24 июня 2010 года
coin
12 / / 20.06.2010
Цитата: Phodopus
Так и знал. Автор, ты создал тему не там где ей место, и нарываешься на нарушение. Тем самым еще и запутал народ.

Это настолько критично? Приношу свои извинения. Почему запостил тему здесь, а не в разделе помощи студентам? Так я ведь и не просил никого решать это задание. Просто в силу своей некомпетентности привел задание целиком и просил помочь осмыслить задачу как таковую. На другом форуме мне провели неслабый ликбез, за что людям спасибо. Здесь нашелся добрый человек, который вообще решил задачу. Спасибо ему отдельное. Об уместности - тут уже модераторам решать.

14
24 июня 2010 года
Phodopus
3.3K / / 19.06.2008
Цитата: coin
Так я ведь и не просил никого решать это задание. Просто в силу своей некомпетентности привел задание целиком и просил помочь осмыслить задачу как таковую.


Тогда не вопрос, я тоже приношу свои извинения :).
А вообще я подозревал что автору нужен всего то NtDisplayString().

59K
24 июня 2010 года
coin
12 / / 20.06.2010
Раз притензий ни у кого нет, то задам вопрос.
Как в MASM получить UNICODE строку? Тоесть не преобразовать в юниод, а получить еще при объявлении? типа:

 
Код:
MyString dw L"Some Text"
8.2K
24 июня 2010 года
bagie2
299 / / 26.10.2008
я в масме не силен, но наверное это
Цитата:
\masm32\examples\exampl07\unicode\unicode\unicode.asm

62K
24 июня 2010 года
PiligrimNsk
2 / / 24.06.2010
Цитата: z0rch
интересная позиция...а почему именно послезавтра? :)
мы увидим это в новостях?



Речь идет о задании для участия в летней школе Parallels на базе НГУ.

P.S. "Чтобы оценить ваши реальные навыки программирования и лучше определить, для какого проекта ваши навыки больше всего подходят, прошу вас выполнить одно или несколько тестовых заданий".

59K
24 июня 2010 года
coin
12 / / 20.06.2010
Так и есть.
Ну, не знаю я ассемблер. Остальные задания вообще были не интересными. Хоть не зря 5 дней потратил, мож чему то научился :)
Большое спасибо всем принявшим участие в обсуждении, особенно bagie2, который вообще не поленился написать програмку.

P.S. Юникод не понадобился :)
59K
25 июня 2010 года
coin
12 / / 20.06.2010
Пилигрим, зараза, заставил таки почувствовать себя говном.

Ладно, думаю, сделаю тогда и свой вариант. А фига с два.
Отреверсил WriteCondoleA до самого низа, а там (вложение) предложенный Bagie2 CsrClientCallServer. Даже параметры теже :) Получается, вся моя работа начилась и закончилась тем, что я код FASM собрал в MASM. Единственное - изменение - кодировка, аски вместо юникода. Вот так я съездил в Новосиб :)
8.2K
25 июня 2010 года
bagie2
299 / / 26.10.2008
не всё потеряно. можно сделать с помощью ZwRequestWaitReplyPort (и вообще заменить вызов на sysenter\int2e)
59K
25 июня 2010 года
coin
12 / / 20.06.2010
Подумав головой, решил заменить консоль на файл. Про консоль ведь вообще речи не шло. Фигурировал поток. Так что до вечера надо успеть :)

P.S. помогать не надо :)
62K
25 июня 2010 года
PiligrimNsk
2 / / 24.06.2010
Теперь, возможно, ты понял зачем нужно было это задание.
59K
25 июня 2010 года
coin
12 / / 20.06.2010
Судя по заголовкам писем взяли вообще всех претендентов. Да, наверно, понял :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог