импорт из NTDLL
От: old Dutchman Беларусь http://blogs.rsdn.org/ikemefula
Дата: 29.10.02 10:20
Оценка:
Привет !


Обнаружил, что в NTDLL есть масса функций полезных, особенно строковых

    typedef int (*pfntolower)(int);

    HMODULE hm = GetModuleHandle("ntdll.dll");
    pfntolower prc = (pfntolower)GetProcAddress(hm,"tolower");
        if( prc != NULL) 
    {
        char ch = (char)prc('A');
    }


Эта дрянь скорее всего будет медленно работать, но для тех задач, где необходимо отказаться от CRT и всякой дрянь вполне сгодится
Re: импорт из NTDLL
От: Андрей Россия  
Дата: 29.10.02 10:26
Оценка:
Здравствуйте old Dutchman, Вы писали:

skip

Вообще-то в User32.dll полно таких функций и к тому же документированных (см., например CharLower), так что не стоит огород городить
Re[2]: импорт из NTDLL
От: Алекс Россия http://wise-orm.com
Дата: 29.10.02 10:37
Оценка:
Здравствуйте Андрей, Вы писали:

А>Здравствуйте old Dutchman, Вы писали:


А>skip


А>Вообще-то в User32.dll полно таких функций и к тому же документированных (см., например CharLower), так что не стоит огород городить


Ты не прав. В ntdll.dll содержится огромное кол-во прекрасных функций. Там практически вся CRT. Я даже пытался сравнивать код из msvcrt.dll.

Я не виду практической ценности в использовании функций ntdll.dll вместо msvcrt.dll, хотя полазить, посмотреть, конечно, очень было интересно.
Re: импорт из NTDLL
От: old Dutchman Беларусь http://blogs.rsdn.org/ikemefula
Дата: 29.10.02 10:38
Оценка:
Здравствуйте old Dutchman, Вы писали:

OD>Эта дрянь скорее всего будет медленно работать, но для тех задач, где необходимо отказаться от CRT и всякой дрянь вполне сгодится


Вызов функции tolower выполняется за время от 600 до 1100 тактов. Что есть довольно много.
Для тесктовой работы не годится, но вполне годится для того, чтоб разобрать командную строку
Re[3]: импорт из NTDLL
От: Андрей Россия  
Дата: 29.10.02 10:44
Оценка:
Здравствуйте Алекс, Вы писали:

skip

А>Ты не прав. В ntdll.dll содержится огромное кол-во прекрасных функций. Там практически вся CRT. Я даже пытался сравнивать код из msvcrt.dll.


Ну, содержится, и дальше что? Сегодня они там есть, завтра — нет. Никто не гарантирует, что в следующей версии Windows все будет точно также как сейчас.
А>Я не виду практической ценности в использовании функций ntdll.dll вместо msvcrt.dll, хотя полазить, посмотреть, конечно, очень было интересно.

Здесь я с тобой отчасти согласен. Если ты пишешь большой продукт, состоящий из кучи компонентов, то лишняя пара-тройка мегов роли не играет, а если ты пишешь мааааленькую утилитку, совсем не хочется тащить за собой половину CRT из-за двух-трех функций. Но для обхода этих трудностей есть более элегантные пути, чем использование недокументированных функций из NTDLL и иже с ней.
Re[4]: импорт из NTDLL
От: Алекс Россия http://wise-orm.com
Дата: 29.10.02 10:51
Оценка:
Здравствуйте Андрей, Вы писали:

хъ

А>Ну, содержится, и дальше что? Сегодня они там есть, завтра — нет. Никто не гарантирует, что в следующей версии Windows все будет точно также как сейчас.


[]

ntdll.dll такая же библиотека как и все остальные. Просто не документированная. Ею можно пользоваться совершенно спокойно. MS наврядли будет менять в ней что-нибудь, т.к. это вызвало бы перепись огромных масс кода.
Re[2]: импорт из NTDLL
От: old Dutchman Беларусь http://blogs.rsdn.org/ikemefula
Дата: 29.10.02 11:01
Оценка:
Здравствуйте Андрей, Вы писали:

А>Вообще-то в User32.dll полно таких функций и к тому же документированных (см., например CharLower), так что не стоит огород городить


Да дело не в CharLower. Мне нужны ВСЕ функции строковые !

Задача — написать на С программу под NT размером в 10К максимум.
Re[3]: импорт из NTDLL
От: old Dutchman Беларусь http://blogs.rsdn.org/ikemefula
Дата: 29.10.02 11:02
Оценка:
Здравствуйте Алекс, Вы писали:

А>>Вообще-то в User32.dll полно таких функций и к тому же документированных (см., например CharLower), так что не стоит огород городить


А>Ты не прав. В ntdll.dll содержится огромное кол-во прекрасных функций. Там практически вся CRT. Я даже пытался сравнивать код из msvcrt.dll.


А>Я не виду практической ценности в использовании функций ntdll.dll вместо msvcrt.dll, хотя полазить, посмотреть, конечно, очень было интересно.


Я же говорю — нахрен msvcrt. Ее может и не быть
Re[3]: импорт из NTDLL
От: Андрей Россия  
Дата: 29.10.02 11:04
Оценка:
Здравствуйте old Dutchman, Вы писали:

skip

OD>Задача — написать на С программу под NT размером в 10К максимум.


Как вариант (copyright VladD2) — использовать Automation API
Re[4]: импорт из NTDLL
От: old Dutchman Беларусь http://blogs.rsdn.org/ikemefula
Дата: 29.10.02 11:07
Оценка:
Здравствуйте Андрей, Вы писали:

OD>>Задача — написать на С программу под NT размером в 10К максимум.


А>Как вариант (copyright VladD2) — использовать Automation API


А это как ?
Re[4]: импорт из NTDLL
От: Алекс Россия http://wise-orm.com
Дата: 29.10.02 11:07
Оценка:
Здравствуйте old Dutchman, Вы писали:

OD>Здравствуйте Алекс, Вы писали:


[]

OD>Я же говорю — нахрен msvcrt. Ее может и не быть


Как ее может не быть?
Re[5]: импорт из NTDLL
От: old Dutchman Беларусь http://blogs.rsdn.org/ikemefula
Дата: 29.10.02 11:11
Оценка:
Здравствуйте Алекс, Вы писали:

OD>>Здравствуйте Алекс, Вы писали:

А>[]
OD>>Я же говорю — нахрен msvcrt. Ее может и не быть
А>Как ее может не быть?

А на NT40 без сервис паков есть такое ? Я просто не знаю, и нет возможности проверить
Re[6]: импорт из NTDLL
От: Алекс Россия http://wise-orm.com
Дата: 29.10.02 11:14
Оценка:
Здравствуйте old Dutchman, Вы писали:

хъ

OD>А на NT40 без сервис паков есть такое ? Я просто не знаю, и нет возможности проверить


90% что есть.
Re[5]: импорт из NTDLL
От: Андрей Россия  
Дата: 29.10.02 11:15
Оценка:
Здравствуйте old Dutchman, Вы писали:

skip

А>>Как вариант (copyright VladD2) — использовать Automation API


OD>А это как ?


А это через VARIANT (типа VariantChangeType и т.п.) — геморрой тот еще и тоже довольно медленно, зато избавишься от CRT
Но я лично рассматриваю это как шутку

А лучше почитай статью Виталия Брусенцева
Автор(ы): Виталий Брусенцев
Дата: 19.01.02
Статья посвящена вопросам оптимизации размера выполняемых модулей, генерируемых различными
компиляторами C++ (основное внимание уделено MS Visual С++). С этой целью рассматриваются особенности Библиотеки исполнения C/C++ и ее реализаций, а также процессы компиляции и компоновки приложений. Приведены практические приемы, позволяющие в ряде случаев уменьшить размер приложения до величины 3-4 килобайта.
на похожую тему
Re[7]: импорт из NTDLL
От: Андрей Россия  
Дата: 29.10.02 11:18
Оценка:
Здравствуйте Алекс, Вы писали:

А>Здравствуйте old Dutchman, Вы писали:


А>хъ


OD>>А на NT40 без сервис паков есть такое ? Я просто не знаю, и нет возможности проверить


А>90% что есть.


А как насчет ее версии? Никто ведь не гарантирует, что там не старая версия — так что лучше ее с собой таскать
Re[7]: импорт из NTDLL
От: old Dutchman Беларусь http://blogs.rsdn.org/ikemefula
Дата: 29.10.02 11:21
Оценка:
Здравствуйте Алекс, Вы писали:

OD>>А на NT40 без сервис паков есть такое ? Я просто не знаю, и нет возможности проверить


А>90% что есть.

Было бы 100 — я бы не потел над этим
Re[8]: импорт из NTDLL
От: old Dutchman Беларусь http://blogs.rsdn.org/ikemefula
Дата: 29.10.02 11:23
Оценка:
Здравствуйте Андрей, Вы писали:

OD>>>А на NT40 без сервис паков есть такое ? Я просто не знаю, и нет возможности проверить


А>>90% что есть.


А>А как насчет ее версии? Никто ведь не гарантирует, что там не старая версия — так что лучше ее с собой таскать


!!! Опаньки...
Мне это не надо !
Re[9]: импорт из NTDLL
От: Андрей Россия  
Дата: 29.10.02 11:25
Оценка:
Здравствуйте old Dutchman, Вы писали:

skip

А>>А как насчет ее версии? Никто ведь не гарантирует, что там не старая версия — так что лучше ее с собой таскать


OD>!!! Опаньки...

OD>Мне это не надо !

Тогда юзай ntdll
Re[6]: импорт из NTDLL
От: old Dutchman Беларусь http://blogs.rsdn.org/ikemefula
Дата: 29.10.02 11:30
Оценка: 7 (1)
Здравствуйте Андрей, Вы писали:

А>А это через VARIANT (типа VariantChangeType и т.п.) — геморрой тот еще и тоже довольно медленно, зато избавишься от CRT

А>Но я лично рассматриваю это как шутку

А>А лучше почитай статью Виталия Брусенцева
Автор(ы): Виталий Брусенцев
Дата: 19.01.02
Статья посвящена вопросам оптимизации размера выполняемых модулей, генерируемых различными
компиляторами C++ (основное внимание уделено MS Visual С++). С этой целью рассматриваются особенности Библиотеки исполнения C/C++ и ее реализаций, а также процессы компиляции и компоновки приложений. Приведены практические приемы, позволяющие в ряде случаев уменьшить размер приложения до величины 3-4 килобайта.
на похожую тему

Есть вот что !!!
Re: импорт из NTDLL
От: Whisperer  
Дата: 29.10.02 11:33
Оценка: 14 (1)
Здравствуйте old Dutchman, Вы писали:

OD>Привет !


OD>

OD>Обнаружил, что в NTDLL есть масса функций полезных, особенно строковых

OD>
OD>    typedef int (*pfntolower)(int);

OD>    HMODULE hm = GetModuleHandle("ntdll.dll");
OD>    pfntolower prc = (pfntolower)GetProcAddress(hm,"tolower");
OD>        if( prc != NULL) 
OD>    {
OD>        char ch = (char)prc('A');
OD>    }
OD>


OD>Эта дрянь скорее всего будет медленно работать, но для тех задач, где необходимо отказаться от CRT и всякой дрянь вполне сгодится


Тогда тебе прямая дорога к книге Свен Шрайбер "Недокументированные возможности Windows 2000" — к стати о возможности экспорта этих функций там написанно
#pragma comment(linker,"defaultlib:ntdll.lib")
к статит в этой книге есть специальный заголовочный фал для этого w2k_def.h давай мыло вышлю, если будушь юзать его в режиме user-mode ставь
#define _USER_MODE
Re[3]: импорт из NTDLL
От: vasketsov Россия http://ntprog.by.ru
Дата: 29.10.02 11:51
Оценка: 14 (2)
Здравствуйте old Dutchman, Вы писали:

OD>Да дело не в CharLower. Мне нужны ВСЕ функции строковые !


OD>Задача — написать на С программу под NT размером в 10К максимум.


В ntdll.dll нет по понятным причинам printf, так что ее использование может обломиться, если это надо.
В остальном — тот же самый CRT, причем, это есть во всех NT-системах, а msvcrt только вроде с sp3 или sp4.
И нифига они не меняются и не пропадают, короче, решайте сами, и ничуть они не медленнее чем в msvcrt.
Но на самом деле, я их обычно не использую, если задача не стоит обойтись только ntdll.dll, а юзаю msvcrt, если у юзера стоит система без нее — значит он виноват только сам, что вовремя не проапгрейдился до нужного sp, и это значит, что еще бог знает какие глюки у него будут, рабочей NT-ей советую считать машину с sp5 и выше.

А, в принципе, если указать юзать именно msvcrt.lib, то уложиться в 10 кил абсолютно реально, у меня есть набор своих мелких утилиток, они порядка 3-х кил занимают, ну пять, но в них прямо линкуется msvcrt (собственно, для printf-а).
Например, прога, которая устанавливает любого владельца файла, она и файл открывает/закрывает, и привилегии себе нужные берет (RtlAdjustPrivilege), и LookupAccountName вызывает, и две Rtl-функции из ntdll.dll юзает (чтоб в SD SID воткнуть и чтоб создать его) и ZwSetSecurityObject для самой установки — короче, все в одном флаконе — и пожалуйста, 3584 байта.
Прога, которая вырубает NT-систему, около 2 кил вообще получилась, естественно, и та и другая используют printf (без него они совсем крошечные бы были).

Так что успехов.
Васкецов Сергей
http://registry.km.ru
Re[2]: импорт из NTDLL
От: old Dutchman Беларусь http://blogs.rsdn.org/ikemefula
Дата: 29.10.02 11:55
Оценка:
Здравствуйте Whisperer, Вы писали:


W>Тогда тебе прямая дорога к книге Свен Шрайбер "Недокументированные возможности Windows 2000" — к стати о возможности экспорта этих функций там написанно

W>#pragma comment(linker,"defaultlib:ntdll.lib")



W>к статит в этой книге есть специальный заголовочный фал для этого w2k_def.h давай мыло вышлю, если будушь юзать его в режиме user-mode ставь

W>#define _USER_MODE
W>

Вышли, пожалуйста, сюда ?
Re[3]: импорт из NTDLL
От: Whisperer  
Дата: 29.10.02 12:05
Оценка:
Здравствуйте old Dutchman, Вы писали:

Ушло!!!!
Re: импорт из NTDLL
От: Andrew S Россия http://alchemy-lab.com
Дата: 29.10.02 14:45
Оценка:
Слушай, а после чего это ты вдруг так заинтересовался NTDLL? Она ж не грузится
Автор: old Dutchman
Дата: 28.10.02


OD>Привет !


OD>

OD>Обнаружил, что в NTDLL есть масса функций полезных, особенно строковых

OD>
OD>    typedef int (*pfntolower)(int);

OD>    HMODULE hm = GetModuleHandle("ntdll.dll");
OD>    pfntolower prc = (pfntolower)GetProcAddress(hm,"tolower");
OD>        if( prc != NULL) 
OD>    {
OD>        char ch = (char)prc('A');
OD>    }
OD>


OD>Эта дрянь скорее всего будет медленно работать, но для тех задач, где необходимо отказаться от CRT и всякой дрянь вполне сгодится
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[2]: импорт из NTDLL
От: Andrew S Россия http://alchemy-lab.com
Дата: 29.10.02 14:54
Оценка:
Кстати, для того, чтобы была ntdll.lib, надо поставить NT DDK (2000) или натравить на ntdll.dll implib.

А книжечку Свена Шрайбера очень рекомендую. СтОящая вещь.
Успехов.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[2]: импорт из NTDLL
От: old Dutchman Беларусь http://blogs.rsdn.org/ikemefula
Дата: 29.10.02 14:56
Оценка:
Здравствуйте Andrew S, Вы писали:

AS>Слушай, а после чего это ты вдруг так заинтересовался NTDLL? Она ж не грузится
Автор: old Dutchman
Дата: 28.10.02


Да посмотрел пример твой



Я перепутал -это LoadLibrary("hal.dll") выдает — Invalid Access to Memory location
Re[3]: импорт из NTDLL
От: masta Россия  
Дата: 01.11.02 15:01
Оценка:
Здравствуйте Andrew S, Вы писали:

AS>Кстати, для того, чтобы была ntdll.lib, надо поставить NT DDK (2000) или натравить на ntdll.dll implib.


AS>А книжечку Свена Шрайбера очень рекомендую. СтОящая вещь.

AS>Успехов.

А где её можно купить ???
Re[4]: импорт из NTDLL
От: Whisperer  
Дата: 01.11.02 15:14
Оценка:
Здравствуйте masta, Вы писали:

M>Здравствуйте Andrew S, Вы писали:


AS>>Кстати, для того, чтобы была ntdll.lib, надо поставить NT DDK (2000) или натравить на ntdll.dll implib.


AS>>А книжечку Свена Шрайбера очень рекомендую. СтОящая вещь.

AS>>Успехов.

M>А где её можно купить ???


В любом магазине — называется "Недокументированные возможности Windows 2000"
Re[4]: импорт из NTDLL
От: Lonely Dog Россия  
Дата: 02.11.02 14:11
Оценка:
Здравствуйте vasketsov, Вы писали:

V>Здравствуйте old Dutchman, Вы писали:


OD>>Да дело не в CharLower. Мне нужны ВСЕ функции строковые !


OD>>Задача — написать на С программу под NT размером в 10К максимум.


Я делал так:

1) компиляем прогу в asm файл. (ключ Fa если я не ошибаюсь)
2) компиляем получившийся asm файл в obj.
3) линкуем его со всеми либами. при этом, надо использовать link 5-ой версии. (это самый простой способ)

после этого размер проги очень сильно уменьшается. кроме того можно посмотреть на опцию линкера /align она тоже позволит уменьшить размер файла. правда после этого будут проблемы с запуском проги под win9x, но это уже детали.

Вот такие пироги.
Re[2]: импорт из NTDLL
От: eugen honeker  
Дата: 02.11.02 17:44
Оценка:
Здравствуйте Whisperer, Вы писали:

W>Здравствуйте old Dutchman, Вы писали:


OD>>Привет !


OD>>

OD>>Обнаружил, что в NTDLL есть масса функций полезных, особенно строковых

OD>>
OD>>    typedef int (*pfntolower)(int);

OD>>    HMODULE hm = GetModuleHandle("ntdll.dll");
OD>>    pfntolower prc = (pfntolower)GetProcAddress(hm,"tolower");
OD>>        if( prc != NULL) 
OD>>    {
OD>>        char ch = (char)prc('A');
OD>>    }
OD>>


OD>>Эта дрянь скорее всего будет медленно работать, но для тех задач, где необходимо отказаться от CRT и всякой дрянь вполне сгодится


W>Тогда тебе прямая дорога к книге Свен Шрайбер "Недокументированные возможности Windows 2000" — к стати о возможности экспорта этих функций там написанно

W>#pragma comment(linker,"defaultlib:ntdll.lib")
W>к статит в этой книге есть специальный заголовочный фал для этого w2k_def.h давай мыло вышлю, если будушь юзать его в режиме user-mode ставь
W>#define _USER_MODE
W>

я бы тоже хотелбы (-> mailto:e.honeker@gmx.de), заранее спасибо
Re[3]: импорт из NTDLL
От: Andrew S Россия http://alchemy-lab.com
Дата: 03.11.02 06:59
Оценка:
Конечно Это ж бубль-гум.. в смысле — kernel-mode библиотека.

OD>Я перепутал -это LoadLibrary("hal.dll") выдает — Invalid Access to Memory location
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[3]: импорт из NTDLL
От: Аноним  
Дата: 03.11.02 16:50
Оценка:
Здравствуйте eugen honeker
Завтра пришлю!!!
Re: импорт из NTDLL
От: RS Земля ICQ: 148844272
Дата: 05.11.02 08:55
Оценка: 7 (1)
Здравствуйте old Dutchman, Вы писали:

OD>Привет !


OD>

OD>Обнаружил, что в NTDLL есть масса функций полезных, особенно строковых

Да там нестроковые гораздо интереснее. Я там как-то обнаружил аналог OpenThread (та, что только в Win2K) — так в ntdll она есть уже в NT4!
Re[2]: импорт из NTDLL
От: old Dutchman Беларусь http://blogs.rsdn.org/ikemefula
Дата: 05.11.02 08:56
Оценка:
Здравствуйте RS, Вы писали:

OD>>Обнаружил, что в NTDLL есть масса функций полезных, особенно строковых


RS>Да там нестроковые гораздо интереснее. Я там как-то обнаружил аналог OpenThread (та, что только в Win2K) — так в ntdll она есть уже в NT4!


Кул !!!
Re[3]: импорт из NTDLL
От: Алекс Россия http://wise-orm.com
Дата: 05.11.02 09:00
Оценка: 4 (1)
Здравствуйте old Dutchman, Вы писали:

хъ

OD>Кул !!!


Ребята, это так давно было известо!

См. здесь и здесь.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.