Помощник
Здравствуйте, гость ( Вход | Регистрация )
29.4.2016, 2:30
Сообщение
#226104
|
|
Группа: Real User Сообщений: 1837 Спасибо сказали: 806 раз |
Может кто подскажет как можно в свою программу добавить выполнение Си-подобных скриптов, причем что-бы кроме стандартных инструкций, можно было сделать некоторые свои команды, вызывать свои функции,
я так понял придется в программу запихать какой-то простенький си интерпретатор, может кому попадались примеры реализации такой идеи? |
|
|
1 из 2»
|
Ответить |
29.4.2016, 3:19
Сообщение
#226106
|
|
Special Группа: Главные администраторы Сообщений: 13275 Спасибо сказали: 2042 раза |
Это не быстрое дело, посидеть нужно основательно. В принципе реализация не сложная, просто создаешь свое API между пользователем и твоим софтом.
Тебе придется создать свой парсер. Перечень своих методов, их реализацию, описание возможностей, чтобы пользователи, используюя твою функцию, знали, что она будет делать на выходе. По сути все просто, называешь один метод например __hochuEepromDelete(), вызывая который, будет польностью стерта еепром. Или например __hochuAllEepromFill(hex), вызывая который, этот метод перепишет весь еепром указанном в параметре hex значением. Далее пишешь реализацию этой функции, так сказать в свою lib (библиотеку). Потом пишешь свой парсер, в котором пошагово будешь считывать "команды" из скрипта и выполнять их, подгружая свои функции. Реализация парсера, самая важная часть, будет ли это просто построчный скрипт (это самое простое), или будет это серьезный парсер с возможностью парсинга вложенных команд, например ты дашь пользователям возможность не пошагово выполнять команды, а сможешь распознавать реальную эмуляцию циклов for, while и вложенных в них неограниченно других циклов и команд. Можно конечно заюзать что-то наподобие eval, но я бы не разрешил пользователям исполнять свой произвольный код. API, оно и в африке API. Если кратко, то примерно так.. Далее по задачам. |
|
|
29.4.2016, 12:55
Сообщение
#226122
|
|
Группа: Участник Сообщений: 275 Спасибо сказали: 51 раз |
Есть смысл посмотреть в сторону промежуточного преобразования в байт-код, написав свой интерпретатор. Это позволит избежать анализа синтаксиса и семантики, при этом все стандартные операции уже будут представлены двоичными кодами, а внешние функции названиями. При грамотном подходе получится изоляция чужого кода в неком подобии собственной виртуальной машины, пересечение только на уровне функций API, а их уже можно жестко контролировать по входным параметрам.
Как вариант, использовать байт-код java-машины, лень искать, но наверняка есть и трансляторы готовые, и открытые исходники машины-интерпретатора, которые можно под себя адаптировать. |
|
|
29.4.2016, 13:28
Сообщение
#226124
|
|
Special Группа: Главные администраторы Сообщений: 13275 Спасибо сказали: 2042 раза |
Подгонять под себя порою выходит дольше, чем написать самому. Конечно наверняка есть подобные готовые интерпретаторы, может кто кинет ссылки для ознакомления. Но лично по мне, если писать интерпретатор самому, пользователю можно предоставить выбор языка для написания скрипта, как это сделано например в программаторе UPA, но можно и не выпедриваться, ограничить лишь одним типом языка программирования.
Впрочем, все зависит от задач, кому-то за глаза распознавание нескольких команд, простой пример, это обычный терминал, а реализовать построчное выполнение, и на регулярках сделать распознование вложенных if с циклами, вобще за глаза, да и за пару вечеров такой парсер пишется. И кстати синтаксический анализ нужен обязательно, это просто правило хорошего тона, предупреждать пользователя о ошибках. P.S. а ставить софт и пользователя в зависимость от Java, я лично против такого подхода. Тогда уж изначально весь софт писать на Java и быть морально готовым к "принудительно-обязательной" установке Java на машину, понимая, что без нее не пойдет софт. |
|
|
29.4.2016, 13:30
Сообщение
#226125
|
|
Группа: Real User Сообщений: 61 Спасибо сказали: 6 раз |
Может кто подскажет как можно в свою программу добавить выполнение Си-подобных скриптов, причем что-бы кроме стандартных инструкций, можно было сделать некоторые свои команды, вызывать свои функции, я так понял придется в программу запихать какой-то простенький си интерпретатор, может кому попадались примеры реализации такой идеи? Тебе нужно в адаптер els запихнуть озу с батарейкой, в нем у тебя будут ключи. Все остальное сломают. Не трать попросту время. |
|
|
29.4.2016, 13:32
Сообщение
#226126
|
|
Special Группа: Главные администраторы Сообщений: 13275 Спасибо сказали: 2042 раза |
Тебе нужно в адаптер els запихнуть озу с батарейкой, в нем у тебя будут ключи. Все остальное сломают. Не трать попросту время. Я ему уже это говорил, но в таком случае придется только свой адаптер лепить, а это уже другая история. Да и в ELS не "воткнешь" батарейку, производством ELS занимаются другие люди. P.S. Думаю скрипты нужны не для защиты, а по защите с удовольствием в другой теме пообщаемся, правда по сути все сказано вами одной фразой.. |
|
|
29.4.2016, 13:47
Сообщение
#226129
|
|
Группа: Real User Сообщений: 61 Спасибо сказали: 6 раз |
Я ему уже это говорил, но в таком случае придется только свой адаптер лепить, а это уже другая история. Да и в ELS не "воткнешь" батарейку, производством ELS занимаются другие люди. P.S. Думаю скрипты нужны не для защиты, а по защите с удовольствием в другой теме пообщаемся, правда по сути все сказано вами одной фразой.. Я имел в виду в адаптер ELS встраивать криптомодуль , что бы не городить отдельный адаптер |
|
|
29.4.2016, 14:33
Сообщение
#226134
|
|
Группа: Участник Сообщений: 275 Спасибо сказали: 51 раз |
Подгонять под себя порою выходит дольше, чем написать самому. И да, и нет. Что-то простое - да. А в деле синтаксического анализа гораздо проще полагаться на готовые отлаженные решения, чтобы не ходить гордо по ранее отложенным другими в сторону граблям :) пользователю можно предоставить выбор языка для написания скрипта, как это сделано например в программаторе UPA, но можно и не выпедриваться, ограничить лишь одним типом языка программирования Для возможности выбора языка придется делать интерпретатор для каждого, если это писать самому. Тут хотя бы си сделать, как я понимаю :) Но даже и в рамкаж одного языка предусмотреть все варианты написания практически невозможно. Мне приходилось мучиться с подобными системами, когда всё вроде бы написано правильно, а не работает, потому что по-какой-то причине разработчик предусмотрел только другой, отличный от этого, формат описания. Впрочем, все зависит от задач, кому-то за глаза распознавание нескольких команд Чем больше ограничений, тем сложнее будет реализовать хоть что-то. Многие ли захотят готовые скрипты специально адаптировать? И кстати синтаксический анализ нужен обязательно, это просто правило хорошего тона, предупреждать пользователя о ошибках. Но я и предлагаю возложить это на сторонний софт, а программе подсовывать уже скомпилированный байт-код. Что-то похожее вроде есть в айпрог+ (подробно не изучал, исключительно общее впечатление). P.S. а ставить софт и пользователя в зависимость от Java, я лично против такого подхода. Тогда уж изначально весь софт писать на Java и быть морально готовым к "принудительно-обязательной" установке Java на машину, понимая, что без нее не пойдет софт. Во-первых, никто не говорит, что нужно брать именно формат байт-кода JVM, это лишь один из вариантов. Во-вторых, если интерпретировать будет сама программа, зачем ей Java на машине? Grrek, вопрос именно про возможность расширения функционала сторонними скриптами. При чем тут защита? :) Давайте по теме. А о защите лучше в привате общаться )) запихнуть озу с батарейкой, в нем у тебя будут ключи. Все остальное сломают Не вижу никаких проблем сломать и такой вариант. Вообще, надо исходить из того, что не бывает абсолютно стойких систем. Вопрос исключительно в соизмеримости затрат с результатом. Если только это не дело принципа )) |
|
|
29.4.2016, 14:50
Сообщение
#226135
|
|
Special Группа: Главные администраторы Сообщений: 13275 Спасибо сказали: 2042 раза |
Многие ли захотят готовые скрипты специально адаптировать? Так я и говорю, зависит от задач. Если задача не просто дать пользователям какие-то дополнительные возможности, а еще и возможность чужие скрипты подсовывать, это тогда еще нужно и не просто скрипты реализовать, но и возможность GUI, окошек диалога, но это уже в другую степь идем, тут то не для программатора скрипты, да и сами скрипты тогда должны быть по стандарту, ибо например скрипты от Оранжа уже не подойдут, у них свой "язык", впрочем и удругих тоже, под всех не подстроишься. Это только если все будут придерживаться единого стандарта, либо потеть разработчику над унификацией, конвертацией. Но что либо можно советовать только тогда, когда мы услышим саму задачу, а то нас сейчас понесет))) Давайте по теме. А о защите лучше в привате общаться )) Вот и я говорю, не нужно тему расчленять на разные вопросы, если охота на этот счет пообщаться, то отдельной темой, например пока здесь Разное, специально создал сейчас раздел. А на счет привата, об общих способах защиты можно и нужно пообщаться на виду, а о конечной реализации, уже в привате конечно. |
|
|
29.4.2016, 14:51
Сообщение
#226136
|
|
Special Группа: Главные администраторы Сообщений: 13275 Спасибо сказали: 2042 раза |
А в деле синтаксического анализа гораздо проще полагаться на готовые отлаженные решения, чтобы не ходить гордо по ранее отложенным другими в сторону граблям Это еще кстати зависит от типа SDK, на котором пишешь софт, может таких библиотек, модулей просто не будет для того SDK, на котором пишешь. |
|
|
30.4.2016, 0:28
Сообщение
#226194
|
|
Special Группа: Главные администраторы Сообщений: 13275 Спасибо сказали: 2042 раза |
slalex, Естестественно примеры легче подгонять и подстраивать, но некоторых примеров просто нет, например хекс редактор, мне все пришлось вручную писать, каждый шаг, ибо сколько не искал, готовых компонентов нет для Embarcadero, и когда сам написал, понял, почему. Потому что нужно все движения отслеживать, отрисовывать и тд, масса процедур из вне и прочее. Со скриптами проще, только понять, что ты хочешь сделать, для каких целей. Тут кстати еще вопрос, как их криптовать, ибо у тебя нет адаптера с процессором, в котором есть криптомодуль, а без крипто оно не имеет смысла. Криптовать вручную, ломанут софт и расшифрую все скомпилированные исходники. Ну и тд. Хотя впрочем и так не имеет смысла скрипты вводить, это же не программатор, а только для ОБД делать скрипты, это вешалка будет, не имея крипто оборудования, привязки. Плюс чисто на си делать не имеет смысла, кто может делать на СИ, сам напишет софт для ELS, а свой формат скриптов, большинство не будет заморачиваться с конвертацией, а будут писать скрипты именно под твой софт. Хотя идея со скриптами старая, давно реализованная, от оранжа, айпрога до упы и даже тритона, не вижу смысла в скриптах. Если в личных целях, не для пользователей, может быть, тогда это все меняет. Но все ответы на эти вопросы и будущие можно было получить в теме, если бы ты общался, а не молчал))
|
|
|
30.4.2016, 0:58
Сообщение
#226195
|
|
Группа: Real User Сообщений: 1837 Спасибо сказали: 806 раз |
даже без криптования, скрипты были-бы полезны, например многие используют софт для русификации, когда надо поправить байтик и контрольку или изменение комплектации, например индикация круиз контроля и т д, людям приходится в сторонних редакторах править дампы и запоминить алгоритмы, а так-бы они могли для себя оформлять свои наработки и наблюдения в виде скриптов и удобно работать.
или те-же функции включение-отключения бортовика на Логанах, делаются одной кан командой, можно и другие команды отловить в клипе и оформить в виде скриптов. по реализации, похоже надо искать какие-то исходники компиляторов, когда-то видел типа рефератов с такими проектами. идея думаю хорошая и давно назрела. то как сделаны скрипты в Оранже, наводит на мысль что там всё сделано с нуля через длинный IF, в том числе и их интересные циклы, а в Айпроге можно писать сложные конструкции, как буд-то применено какое-то стандартное решение. не хотелось-бы пойти по какому-то не правильному пути. |
|
|
30.4.2016, 1:27
Сообщение
#226196
|
|
Special Группа: Главные администраторы Сообщений: 13275 Спасибо сказали: 2042 раза |
те-же функции включение-отключения бортовика на Логанах, делаются одной кан командой Одно дело, когда нечем это делать, другое дело, что послать эту команду может человек любого уровня развития через любой канхакер и ему подобные девайсы и со скриптами (типа UPA-CAN) и без jyys[, просто из своего файлика вставил пакет и все дела. идея думаю хорошая и давно назрела. В целом лишним не будет, всегда хорошо, когда есть больше возможностей, чем меньше)) Другое дело, будет ли реально востребовано. На первый взгляд не имеет смысла, твои доводы не повод, но меня не слушайте, старого зажравшегося дядьку, может кому и понадобится)) да и наверное обсуждать, нужно или не нужно, не имеет смысла, хочется, надо, значит идем по главному вопросу темы и не отклоняемся. Это мы уже тут надумали, пока ждали от тебя пояснений и целей) И то не все есть на данный момент) по реализации, похоже надо искать какие-то исходники компиляторов Конечно нужны примеры, чтобы понять и допилить, но ты написал свой вопрос в теме по C++, а модули, компоненты и примеры нужно искть для Delphi. Твой вопрос в разделе C++ сбил с толку, непонятно, что искать. Интерпретатор СИ для С++, или интерпретаро СИ для Delphi.. Если это просто будут исходники, можно покряхтеть и конвертировать, хотя дело неприятное, переписывать под другой язык, а если это еще и компонент, тем более нет смысла. |
|
|
30.4.2016, 1:36
Сообщение
#226197
|
|
Special Группа: Главные администраторы Сообщений: 13275 Спасибо сказали: 2042 раза |
то как сделаны скрипты в Оранже, наводит на мысль что там всё сделано с нуля через длинный IF IF не IF, а в оранже действительно сделано с нуля, и я лично так-же предпочитаю в своих проектах, мне нравится такой подход, я очень жестко отношусь к навешиванию чужих библиотек в проект. Правда порою это выходит дольше и затяжнее по времени. Хотя бывает очень часто и наоборот, самому написать быстрее. а в Айпроге можно писать сложные конструкции, как буд-то применено какое-то стандартное решение. Вполне возможно, что и применено стандартное решение, но разбираясь в регулярках, можно обрабатывать любые конструкции, любой вложенности и с обратными вызовами (callback). Хотя по моим прикидкам, у разработчика айпрога предполагаю методика более быстрых решений, скорее всего там действительно готовое решение встроено или оно просто написано на заказ кем-то, что тоже неплохой способ сэкономить времечко. |
|
|
30.4.2016, 2:25
Сообщение
#226198
|
|
Группа: Real User Сообщений: 1837 Спасибо сказали: 806 раз |
Интерпретатор СИ для С++, или интерпретаро СИ для Delphi.. я на С++ пишу, поэтому в идеале нужен "Интерпретатор СИ для С++" но если исходник интерпретатора будет очень понятный, что-бы по образу и подобию делать, то думаю на любом языке не помешает для общего развития или чтобы какую идею почерпнуть. |
|
|
30.4.2016, 2:34
Сообщение
#226199
|
|
Группа: Real User Сообщений: 1837 Спасибо сказали: 806 раз |
вот кажется то что надо http://sources.codenet.ru/download/4269/LittleC.html
|
|
|
1 из 2»
|
Ответить |
|
28.11.2024, 6:34 Посл. ответ от slalex |
||
|
3.1.2024, 5:58 Посл. ответ от Александр |
||
|
25.7.2022, 7:21 Посл. ответ от Fedorov |
||
|
16.3.2022, 12:28 Посл. ответ от Saveliy |
||
|
10.5.2019, 16:43 Посл. ответ от Saveliy |
|
Сегодня, 0:13 Посл. ответ от Saveliy |
||
|
Вчера, 21:08 Посл. ответ от pipomka1998 |
||
|
Вчера, 7:34 Посл. ответ от mihnokuzia |
||
|
Вчера, 0:23 Посл. ответ от Patryk |
||
|
2.12.2024, 7:00 Посл. ответ от jinoweb |
Сейчас: 4.12.2024, 11:02 |