Подробности можно посмотреть, например, здесь и здесь.
В моем понимании это выглядит так:
Bash при работе использует переменные окружения, которые задаются командой env.
Помимо переменных окружения bash поддерживает список внутренних функций, также задаваемых командой env. Вот пример команды:
Насколько я понимаю, эти функции должны выполняться только при непосредственном их вызове. Однако в старых версиях bash не проверяет определение функции на корректность и интерпретирует всю строку целиком, из-за чего возникает возможность дописать после определения функции другие исполняемые команды — как-то так:
Беда-печаль состоит в том, что «дополнительные» команды исполняются не при вызове внутренней функции, а при загрузке нового экземпляра интерпретатора, что и видно из примера. Почему это так, объясняется в посте, доступном по второй ссылке.
Резюмируя, ответ на ваш вопрос получается такой: магические скобочки — это определение функции; они допускаются в заголовке, так как являются стандартной конструкцией языка; просто написать вредоносный код без них нельзя, ибо в этом случае bash посчитает вводимый параметр не функцией, а обычной строковой переменной окружения.
P.S. А вот что для меня загадка — так это назначение двоеточия и точек с запятыми. Но особенно двоеточия.
Вы не могли бы уточнить, что значит «найти строку «CommandMethod» в тексте одной из .dll библиотек»? Я так понимаю, что нужно просто текстовым редактором (к примеру) найти в DLL-файле строку CommandMethod?
Но я же заранее не знаю, в каком файле она находится. С тем же успехом можно добавить в проект все библиотеки (атрибут CommandMethod гарантированно будет определен в одной из них), а потом уже в IDE найти нужный файл через пункт меню Перейти к определению (Go to Definition).
Такое чувство, что я чего-то недопонимаю.
Про «заглушки» я не вполне осмыслил. Получается, что для AutoCAD до 2011 версии рекомендуется создавать две отдельные сборки проекта — под x86 и x64, иначе возможны проблемы?
4.
Исчерпывающего перечня сопоставлений я найти не смог, поэтому все проверялось методом научного тыка.
«Исчерпывающий перечень» тебе и не нужен — подключать следует только то, что тебе действительно необходимо.
Конечно, я подключаю не все библиотеки, а только необходимый минимум. Но проблема в том, что у меня не сразу получается понять, какой из DLL-файлов содержит нужное мне пространство имен. Вот, к примеру, возьмем тот же самый атрибут CommandMethod. Где можно посмотреть, в каком из DLL-файлов он находится?
5.
следует пользоваться статическими методами класса Autodesk.AutoCAD.ApplicationServices.Application
С ShowModal() я, похоже, действительно дал маху. Попробую исправить в проекте на ShowModalDialog(), если все получится — исправлю и в статье.
6. Все картинки у меня открываются — думаю, это был временный глюк habrastorage.org.
3. Про реестр все так — не стал здесь это упоминать, чтобы не загромождать статью. В проекте я AutoCAD запускаю из внешнего приложения — соответственно, NETLOAD выполняю программно, поэтому пользователю ничего загружать не приходится.
4. Мой недосмотр. В рабочем проекте, конечно, опция CopyLocal отключена. Добавлю этот момент в пост. Сейчас только картинку в Пэйнте отфотошоплю.)
5. Самая больная часть работы, надеюсь, уже осталась позади.) То, что я от AutoCAD хотел, он вроде делает. Больше вроде пока не надо.)
Спасибо за комментарий!
Полная версия есть здесь.
env.Помимо переменных окружения bash поддерживает список внутренних функций, также задаваемых командой
env. Вот пример команды:Насколько я понимаю, эти функции должны выполняться только при непосредственном их вызове. Однако в старых версиях
bashне проверяет определение функции на корректность и интерпретирует всю строку целиком, из-за чего возникает возможность дописать после определения функции другие исполняемые команды — как-то так:Беда-печаль состоит в том, что «дополнительные» команды исполняются не при вызове внутренней функции, а при загрузке нового экземпляра интерпретатора, что и видно из примера. Почему это так, объясняется в посте, доступном по второй ссылке.
Резюмируя, ответ на ваш вопрос получается такой: магические скобочки — это определение функции; они допускаются в заголовке, так как являются стандартной конструкцией языка; просто написать вредоносный код без них нельзя, ибо в этом случае
bashпосчитает вводимый параметр не функцией, а обычной строковой переменной окружения.P.S. А вот что для меня загадка — так это назначение двоеточия и точек с запятыми. Но особенно двоеточия.
336d95a85a273c84fc4974bd0e485d16 (with leading zero).
CommandMethod?Но я же заранее не знаю, в каком файле она находится. С тем же успехом можно добавить в проект все библиотеки (атрибут
CommandMethodгарантированно будет определен в одной из них), а потом уже в IDE найти нужный файл через пункт менюПерейти к определению(Go to Definition).Такое чувство, что я чего-то недопонимаю.
Хотелось бы прояснить несколько моментов.
1. Подскажите, а где можно почитать про обратную совместимость версий именно для .NET-плагинов?
2. Разница прочувствована.) Но в статье рассматривалось именно создание плагина, поэтому я и употребил такую формулировку.
3. Про «заглушки» я не вполне осмыслил. Получается, что для AutoCAD до 2011 версии рекомендуется создавать две отдельные сборки проекта — под x86 и x64, иначе возможны проблемы?
4. Конечно, я подключаю не все библиотеки, а только необходимый минимум. Но проблема в том, что у меня не сразу получается понять, какой из DLL-файлов содержит нужное мне пространство имен. Вот, к примеру, возьмем тот же самый атрибут
CommandMethod. Где можно посмотреть, в каком из DLL-файлов он находится?5. С
ShowModal()я, похоже, действительно дал маху. Попробую исправить в проекте наShowModalDialog(), если все получится — исправлю и в статье.6. Все картинки у меня открываются — думаю, это был временный глюк habrastorage.org.
P. S. Хочу вас поблагодарить за пример с созданием плавающей панельки — на его базе получилось очень удобное меню.
4. Мой недосмотр. В рабочем проекте, конечно, опция
CopyLocalотключена. Добавлю этот момент в пост. Сейчас только картинку в Пэйнте отфотошоплю.)5. Самая больная часть работы, надеюсь, уже осталась позади.) То, что я от AutoCAD хотел, он вроде делает. Больше вроде пока не надо.)
Спасибо за комментарий!