импорт из 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
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.