pidlp - Інтернет у хмарі

Це команда pidlp, яку можна запустити в постачальнику безкоштовного хостингу OnWorks за допомогою однієї з наших численних безкоштовних робочих станцій, таких як Ubuntu Online, Fedora Online, онлайн-емулятор Windows або онлайн-емулятор MAC OS.

ПРОГРАМА:

ІМ'Я


pidl - компілятор IDL, написаний на Perl

СИНТАКСИС


pidl --довідка

pidl [--outputdir[=OUTNAME]] [--includedir DIR...] [--parse-idl-tree] [--dump-idl-tree]
[--dump-ndr-tree] [--header[=ВИХОД]] [--python[=ВИХОД]] [--ndr-parser[=ВИХОД]]
[--клієнт] [--сервер] [--warn-compat] [--тихий] [--дослівний] [--шаблон]
[--ws-parser[=ВИХІД]] [--diff] [--dump-idl] [--tdr-parser[=ВИХОД]]
[--samba3-ndr-client[=ВИХОД]] [--samba3-ndr-server[=ВИХОД]] [--typelib=[ВИХОД]]
[ .idl]...

ОПИС


pidl - це компілятор IDL, написаний на Perl, який прагне бути певною мірою сумісним із midl
компілятор. 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

--вихідний каталог OUTNAME
Запишіть вихідні файли до вказаного каталогу. За замовчуванням поточний каталог.

--includedir DIR
Додайте DIR до шляху пошуку, який використовує препроцесор. Цей параметр можна вказати
кілька разів.

--parse-idl-tree
Читайте внутрішню структуру дерева з вхідних файлів, а не припускаючи, що вони містять IDL.

--dump-idl
Згенеруйте новий файл IDL. Файл буде називатися OUTNAME.idl.

--заголовок
Згенеруйте файл заголовка C для вказаного інтерфейсу. Ім’я файлу за замовчуванням – OUTNAME.h.

--ndr-парсер
Згенеруйте файл C і заголовок C, що містить аналізатори NDR. Ім'я файлу для парсера
за замовчуванням ndr_OUTNAME.c. Ім'я заголовного файлу буде ім'ям файлу аналізатора з
розширення змінено з .c на .h.

--tdr-парсер
Згенеруйте файл C і заголовок C, що містить TDR-парсери. Ім'я файлу для парсера
за замовчуванням tdr_OUTNAME.c. Ім'я заголовного файлу буде ім'ям файлу аналізатора з
розширення змінено з .c на .h.

--typelib
Запишіть інформацію про тип у вказаний файл.

--сервер
Створіть шаблон для сервера RPC, який реалізує інтерфейс. Ім'я файлу
за замовчуванням ndr_OUTNAME_s.c.

--шаблон
Створення заглушок для сервера RPC, який реалізує інтерфейс. Вихід буде записано
до stdout.

--ws-парсер
Згенеруйте дисектор Wireshark (на C) і файл заголовка. Ім'я файлу дисектора
за замовчуванням має значення packet-dcerpc-OUTNAME.c, тоді як ім'я заголовного файлу за замовчуванням має значення
packet-dcerpc-OUTNAME.h.

Pidl зчитує додаткові дані з файлу відповідності Wireshark, якщо він є. Такий
Файл повинен мати те саме розташування, що й файл IDL, але з розширенням cnf швидше
ніж ідл. Дивіться Parse::Pidl::Wreshark::Відповідність, щоб дізнатися більше про формат цього
файлу.

--розн
Проаналізуйте файл 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.

ВІДПОВІДНО МАСИВИ
Конформний масив — це масив, який закінчується на [*] або []. Дивні речі про конформант
масиви полягають у тому, що вони можуть з’являтися лише як останній елемент структури (якщо немає a
вказівник на відповідний масив, звичайно), і розмір масиву з’являється перед
сама структура на дроті.

Отже, у цьому прикладі:

typedef struct {
довгий abc;
довгий рахунок;
довге foo;
[size_is(count)] long s[*];
} Структура1;

це виглядає так:

[size_is] [abc] [count] [foo] [s...]

перше поле [size_is] є розміром виділення масиву і зустрічається перед масивом
елементів і навіть до вирівнювання структури.

Зверніть увагу, що size_is() може посилатися на константу, але це не змінює провід
представництво. Це не робить масив фіксованим.

midl.exe запише наведений вище масив у вигляді такого заголовка C:

typedef struct {
довгий abc;
довгий рахунок;
довге foo;
довгий s[1];
} Структура1;

pidl використовує інший підхід і пише це так:

typedef struct {
довгий abc;
довгий рахунок;
довге foo;
довгий *s;
} Структура1;

МІНЮЄТЬСЯ МАСИВИ
Різний масив виглядає так:

typedef struct {
довгий abc;
довгий рахунок;
довге foo;
[size_is(count)] довгий *s;
} Структура1;

На дроті це буде виглядати так:

[abc] [кількість] [foo] [PTR_s] [count] [s...]

ФІКСОВАНО МАСИВИ
Фіксований масив виглядає так:

typedef struct {
довгий s[10];
} Структура1;

Представлення NDR виглядає так само, як 10 окремих довгих декларацій. Розмір масиву
не закодований на дроті.

pidl також підтримує "вбудовані" масиви, які не є частиною стандарту IDL/NDR. Це такі
оголосив так:

typedef struct {
uint32 foo;
кількість uint32;
uint32 бар;
довгий s [рахунок];
} Структура1;

Це виглядає так:

[фу] [кількість] [бар] [с...]

Фіксовані масиви — це розширення, додані для підтримки деяких дивних вбудованих структур
дескриптори безпеки та спули.

Цей розділ аж ніяк не повний. Перегляньте документацію OpenGroup та MSDN
додаткову інформацію.

СУМІСНІСТЬ З СЕРЕДНЯ


Відсутній риси in підл
Наступні функції MIDL (поки що) не реалізовані в pidl або реалізовані за допомогою an
несумісний інтерфейс:

· Асинхронна комунікація

· Typelibs (файли .tlb)

· Підтримка дейтаграм (ncadg_*)

Підтриманий Атрибути та заяви
in, out, ref, length_is, switch_is, size_is, uuid, case, default, string, unique, ptr,
pointer_default, v1_enum, об'єкт, довідковий рядок, діапазон, локальний, call_as, кінцева точка,
switch_type, progid, coclass, iid_is, represent_as, transmit_as, import, include,
cpp_quote.

PIDL питома властивості
громадськість
Властивість [public] структури або об’єднання є розширенням pidl, яке примушує
згенеровані функції pull/push бути нестатичними. Це дозволяє вам оголошувати типи
можна використовувати між модулями. Якщо ви не вказуєте [public], тоді функції pull/push
для інших функцій, ніж функції верхнього рівня, оголошуються статичними.

noprint
Властивість [noprint] є розширенням pidl, яке дозволяє вказати, що pidl має
не генерувати функцію ndr_print_*() для цієї структури або об’єднання. Це використовується, коли
ви хочете визначити свою власну функцію друку, яка друкує структуру кращим способом.
Хорошим прикладом є використання [noprint] на dom_sid, що дозволяє красиво друкувати
SID.

значення
Властивість [value(expression)] є розширенням pidl, яке дозволяє вказати
значення поля, коли воно нанесене на дріт. Це дозволяє поля, які завжди мають a
добре відоме значення, яке автоматично заповнюється, що робить API більш програмістським
дружній. Вираз може бути будь-яким виразом C.

відносний
Властивість [відносне] можна надати для покажчика. Коли він використовується, він оголошує
покажчик як "відносний" вказівник у стилі котушки, що означає, що він відображається на дроті як
зміщення в межах поточної інкапсулюючої структури. Це не є частиною нормального
IDL/NDR, але це дуже корисне розширення, оскільки воно дозволяє уникнути ручного кодування багатьох
складні конструкції.

підконтекст (довжина)
Вказує, що розмір повинні бути прочитані байти, а потім blob такого розміру,
який буде проаналізовано як NDR.

підконтекст() зараз застарів, і не повинен використовуватися в новому коді. Замість цього використовуйте
представляти_як() or transmit_as().

прапор
Вкажіть логічні параметри, які в основному використовуються для низькорівневих параметрів NDR. Варіантів може бути декілька
вказано за допомогою | характер. Зауважте, що прапори успадковуються підструктурами!

недискримінантний
Властивість [nodiscriminant] для об'єднання означає, що звичайний дискримінант uint16
поле на початку об'єднання на проводі опускається. Зазвичай це не допускається
в IDL/NDR, але використовується для деяких структур катушек.

набір символів (ім'я)
Вкажіть, що масив або рядок використовує вказаний набір символів. Якщо цей атрибут є
Вказано, pidl подбає про перетворення символьних даних із цього формату в
формат хосту. Зазвичай використовуються значення UCS2, DOS і UTF8.

Не підтримується СЕРЕДНЯ властивості or заяви
aggregatable, appobject, async_uuid, bindable, control, defaultbind, defaultcollelem,
defaultvalue, defaultvtable, dispinterface, displaybind, dual, entry, first_is,
helpcontext, helpfile, helpstringcontext, helpstringdll, прихований, idl_module, idl_quote,
id, immediatebind, importlib, includelib, last_is, lcid, ліцензія, max_is, модуль,
ms_union, no_injected_text, non browsable, noncreatable, nonextensible, odl, oleautomation,
необов'язковий, pragma, propget, propputref, propput, readonly, requestedit, limited, retval,
джерело, uidefault, usesgetlasterror, vararg, vi_progid, wire_marshal.

ПРИКЛАДИ


# Створення аналізатора Wireshark
$ ./pidl --ws-parser -- atsvc.idl

# Створення аналізатора TDR і заголовка
$ ./pidl --tdr-parser --header -- regf.idl

# Створення клієнта та сервера Samba3
$ ./pidl --samba3-ndr-клієнт --samba3-ndr-сервер -- dfs.idl

# Створення аналізатора, клієнта та сервера Samba4 NDR
$ ./pidl --ndr-parser --ndr-клієнт --ndr-сервер -- samr.idl

Використовуйте pidlp онлайн за допомогою служб onworks.net



Найновіші онлайн-програми для Linux і Windows