Это команда pidlp, которую можно запустить в бесплатном хостинг-провайдере OnWorks, используя одну из наших многочисленных бесплатных онлайн-рабочих станций, таких как Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.
ПРОГРАММА:
ИМЯ
pidl - компилятор IDL, написанный на Perl
СИНТАКСИС
пидл --помощь
pidl [--outputdir [= OUTNAME]] [--includedir DIR ...] [--parse-idl-tree] [--dump-idl-tree]
[--dump-ndr-tree] [--header [= ВЫВОД]] [--python [= ВЫВОД]] [--ndr-parser [= ВЫВОД]]
[--client] [--server] [--warn-compat] [--quiet] [--verbose] [--template]
[--ws-parser [= ВЫВОД]] [--diff] [--dump-idl] [--tdr-parser [= ВЫВОД]]
[--samba3-ndr-client [= ВЫВОД]] [--samba3-ndr-server [= ВЫВОД]] [--typelib = [ВЫВОД]]
[ .idl] ...
ОПИСАНИЕ
pidl - это компилятор IDL, написанный на Perl, который стремится быть в некоторой степени совместимым с средним
компилятор. IDL - это сокращение от «Язык определения интерфейса».
pidl может генерировать заглушки для кода сервера DCE / RPC, кода клиента DCE / RPC и Wireshark
диссекторы для трафика DCE / RPC.
Компиляторы IDL, такие как pidl, принимают описание интерфейса в качестве входных данных и используют его для
генерировать C (хотя поддержка других языков может быть добавлена позже) код, который может использовать эти
интерфейсы, красивые данные для печати, отправленные с использованием этих интерфейсов, или даже создание Wireshark
диссекторы, которые могут анализировать данные, передаваемые по сети этими интерфейсами.
pidl принимает файлы IDL в том же формате, что и midl, преобразует их в файл .pidl
(который содержит внутреннее представление интерфейса pidl) и затем может генерировать
любой результат, который вам нужен. Файлы .pidl следует использовать только для отладки. Напишите
определения вашего интерфейса в формате .idl.
Цель pidl - реализовать компилятор IDL, который можно использовать при разработке RPC.
подсистема в Samba (как для маршалинга / демаршаллинга, так и для отладки).
ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ
--Помогите
Показать список доступных опций.
--версия
Показать версию pidl
--outputdir НАЗВАНИЕ
Записать выходные файлы в указанный каталог. По умолчанию используется текущий каталог.
--includedir DIR
Добавьте DIR в путь поиска, используемый препроцессором. Этот вариант можно указать
много раз.
--parse-idl-дерево
Считайте внутреннюю древовидную структуру из входных файлов, а не предполагайте, что они содержат IDL.
--dump-idl
Создайте новый файл IDL. Файл будет называться OUTNAME.idl.
- заголовок
Создайте файл заголовка C для указанного интерфейса. Имя файла по умолчанию - OUTNAME.h.
--ndr-парсер
Создайте файл C и заголовок C, содержащие анализаторы отчета о недоставке. Имя файла для парсера
по умолчанию ndr_OUTNAME.c. Имя файла заголовка будет именем файла парсера с
расширение изменено с .c на .h.
--tdr-парсер
Создайте файл C и заголовок C, содержащий анализаторы TDR. Имя файла для парсера
по умолчанию tdr_OUTNAME.c. Имя файла заголовка будет именем файла парсера с
расширение изменено с .c на .h.
--typelib
Запишите информацию о типе в указанный файл.
--сервер
Сгенерируйте шаблон для RPC-сервера, реализующего интерфейс. Имя файла
по умолчанию ndr_OUTNAME_s.c.
--шаблон
Создайте заглушки для RPC-сервера, реализующего интерфейс. На выходе будет написано
в стандартный вывод.
--ws-парсер
Создайте диссектор Wireshark (на C) и файл заголовка. Имя файла диссектора
по умолчанию - packet-dcerpc-OUTNAME.c, в то время как имя файла заголовка по умолчанию
пакет-dcerpc-OUTNAME.h.
Pidl будет читать дополнительные данные из файла соответствия Wireshark, если он есть. Такой
файл должен иметь то же расположение, что и файл IDL, но с расширением cnf скорее
чем IDL. См. Parse :: Pidl :: Wireshark :: Conformance для получения подробной информации о формате этого
.
--diff
Разобрать файл IDL, сгенерировать новый файл IDL на основе внутренних структур данных и
посмотрите, есть ли какие-либо отличия от исходного файла IDL. Полезно для отладки
пидл.
--dump-idl-дерево
Скажите pidl, чтобы он выгрузил внутреннее древовидное представление файла IDL на диск. Полезный
для отладки pidl.
--dump-ndr-дерево
Скажите pidl, чтобы он выгрузил внутреннее информационное дерево NDR, сгенерированное из файла IDL, в
диск. Полезно для отладки pidl.
--samba3-ndr-клиент
Сгенерируйте клиентские вызовы для Samba3, которые будут помещены в rpc_client /. Вместо того, чтобы кричать
к коду в rpc_parse / Samba3, вместо этого будет вызван код NDR Samba4.
--samba3-ndr-сервер
Сгенерируйте вызовы сервера для Samba3, которые будут помещены в rpc_server /. Вместо того, чтобы кричать
к коду в rpc_parse / Samba3, вместо этого будет вызван код NDR Samba4.
IDL СИНТАКСИС
Файлы IDL всегда предварительно обрабатываются с помощью препроцессора C.
Практически все в интерфейсе (сам интерфейс, функции, параметры) может
иметь атрибуты (или свойства, какое бы имя вы им ни дали). Атрибуты всегда добавляются в начале
элемент, к которому они применяются, и заключен в квадратные скобки ([]). Несколько атрибутов
разделены запятыми; аргументы атрибутов указываются в скобках.
См. Раздел СОВМЕСТИМОСТЬ для получения списка атрибутов, поддерживаемых pidl.
Можно использовать комментарии в стиле C.
СООТВЕТСТВУЮЩИЙ МАССИВЫ
Соответствующий массив - это массив, заканчивающийся на [*] или []. Странные вещи о конформинге
массивы состоят в том, что они могут появляться только как последний элемент структуры (если нет
указатель на соответствующий массив, конечно), а размер массива появляется перед
саму структуру на проводе.
Итак, в этом примере:
структура typedef {
длинный abc;
длинный счет;
длинный фу;
[size_is (count)] long s [*];
} Структура1;
это выглядит так:
[size_is] [abc] [count] [foo] [s ...]
первое поле [size_is] - это размер выделения массива и находится перед массивом
элементов и даже до выравнивания конструкции.
Обратите внимание, что size_is () может относиться к константе, но это не меняет связи
представление. Это не делает массив фиксированным.
midl.exe запишет указанный выше массив как следующий заголовок C:
структура typedef {
длинный abc;
длинный счет;
длинный фу;
длинные с [1];
} Структура1;
pidl использует другой подход и пишет его так:
структура typedef {
длинный abc;
длинный счет;
длинный фу;
длинные * с;
} Структура1;
РАЗЛИЧНЫЕ МАССИВЫ
Различный массив выглядит так:
структура typedef {
длинный abc;
длинный счет;
длинный фу;
[size_is (count)] long * s;
} Структура1;
На проводе это будет выглядеть так:
[abc] [count] [foo] [PTR_s] [count] [s ...]
FIXED МАССИВЫ
Фиксированный массив выглядит так:
структура typedef {
длинные с [10];
} Структура1;
Представление NDR выглядит как 10 отдельных длинных объявлений. Размер массива
не кодируется на проводе.
pidl также поддерживает «встроенные» массивы, которые не являются частью стандарта IDL / NDR. Эти
объявлено так:
структура typedef {
uint32 фу;
счетчик uint32;
uint32 бар;
long s [количество];
} Структура1;
Это выглядит так:
[foo] [count] [bar] [s ...]
Фиксированные массивы - это расширение, добавленное для поддержки некоторых странных встроенных структур в
дескрипторы безопасности и буферизация.
Этот раздел ни в коем случае не является полным. См. Документацию OpenGroup и MSDN для
дополнительная информация.
СОВМЕСТИМОСТЬ МИДЛ
Отсутствующий функции in пидл
Следующие функции MIDL (пока) не реализованы в pidl или реализованы с помощью
несовместимый интерфейс:
· Асинхронная связь
· Библиотеки типов (файлы .tlb)
· Поддержка дейтаграмм (ncadg_ *)
Поддержанный Атрибуты и отчетность
вход, выход, ссылка, length_is, switch_is, size_is, uuid, регистр, по умолчанию, строка, уникальный, ptr,
указатель_по умолчанию, v1_enum, объект, строка справки, диапазон, локальный, call_as, конечная точка,
switch_type, progid, coclass, iid_is, submit_as, transfer_as, импорт, включить,
cpp_quote.
ПИДЛ Конкретный свойствами
что такое варган?
Свойство [public] в структуре или объединении - это расширение pidl, которое заставляет
сгенерированные функции pull / push не статичны. Это позволяет объявлять типы, которые
может использоваться между модулями. Если вы не укажете [public], тогда функции pull / push
для функций, отличных от функций верхнего уровня, объявлены статическими.
нет отпечатка
Свойство [noprint] - это расширение pidl, которое позволяет указать, что pidl должен
не генерировать функцию ndr_print _ * () для этой структуры или объединения. Это используется, когда
вы хотите определить свою собственную функцию печати, которая лучше печатает структуру.
Хорошим примером является использование [noprint] в dom_sid, что позволяет красиво печатать
SID.
ценностное
Свойство [value (выражение)] - это расширение pidl, которое позволяет указать
значение поля, когда оно помещено на провод. Это позволяет полям, которые всегда имеют
хорошо известное значение, которое будет автоматически заполнено, что сделает API более программистским
дружелюбный. Выражение может быть любым выражением C.
относительный
Свойство [relative] может быть указано для указателя. Когда он используется, он объявляет
указатель как "относительный" указатель стиля катушки, что означает, что он отображается на проводе как
смещение в текущей инкапсулирующей структуре. Это не часть нормального
IDL / NDR, но это очень полезное расширение, поскольку оно позволяет избежать ручного кодирования многих
сложные конструкции.
подконтекст (длина)
Указывает, что размер должны быть прочитаны байты, за которыми следует капля такого размера,
который будет обработан как отчет о недоставке.
подконтекст () устарела и не должна использоваться в новом коде. Вместо этого используйте
представлять_ас () or transfer_as ().
флажок
Укажите логические параметры, в основном используемые для параметров отчета о недоставке нижнего уровня. Возможны несколько вариантов
указывается с помощью | персонаж. Обратите внимание, что флаги наследуются подструктурами!
не различающий
Свойство [nodiscriminant] на объединении означает, что обычный дискриминант uint16
поле в начале объединения на проводе опускается. Обычно это не допускается
в IDL / NDR, но используется для некоторых структур спулинга.
кодировка (имя)
Укажите, что в массиве или строке используется указанная кодировка. Если этот атрибут
указано, pidl позаботится о преобразовании символьных данных из этого формата в
формат хоста. Обычно используемые значения - UCS2, DOS и UTF8.
Не поддерживается МИДЛ свойствами or отчетность
агрегатируемый, appobject, async_uuid, привязка, элемент управления, defaultbind, defaultcollelem,
значение по умолчанию, defaultvtable, dispinterface, displaybind, двойной, запись, first_is,
helpcontext, файл справки, helpstringcontext, helpstringdll, скрытый, idl_module, idl_quote,
идентификатор, немедленная привязка, importlib, includelib, last_is, lcid, лицензированный, max_is, модуль,
ms_union, no_injected_text, nonbrowable, noncreatable, nonxtensible, odl, oleautomation,
необязательно, прагма, propget, propputref, propput, только для чтения, запрошено, ограничено, retval,
источник, uidefault, использует getlasterror, vararg, vi_progid, wire_marshal.
ПРИМЕРЫ
# Создание парсера Wireshark
$ ./pidl --ws-parser - atsvc.idl
# Создание парсера и заголовка TDR
$ ./pidl --tdr-parser --header - regf.idl
# Создание клиента и сервера Samba3
$ ./pidl --samba3-ndr-client --samba3-ndr-server - dfs.idl
# Создание анализатора Samba4 NDR, клиента и сервера
$ ./pidl --ndr-parser --ndr-client --ndr-server - samr.idl
Используйте pidlp в Интернете с помощью сервисов onworks.net