Реверс в SCL: распознавание настроек компилятора

По просьбе наших посетителей, данный материал перенесен с сайта plc4good.org.ua, в связи с полной его потерей. Всё возражения принимаются через форму обратной связи.

plc4good.org.ua/view_post.php?id=273

SCL
Настройки, влияющие на генерируемый компилятором код.

Как по внешнему виду STL кода узнать с какими настройками компилятора SCL, его сгенерировали?
Также материал будет интересен тем кто хочет разобраться в настройках компилятора SCL.

Все возможные варианты опций компилятора SCL приведены ниже. Только четыре из них влияют непосредсвенно на вид сгенерируемого кода.

{
Scl_ResetOptions ,
Scl_OverwriteBlocks:=           ‘y’ ,
Scl_GenerateReferenceData :=    ‘y’ ,
Scl_S7ServerActive:=            ‘y’ ,
Scl_CreateObjectCode:=          ‘y’ ,
Scl_OptimizeObjectCode:=        ‘y’ ,
Scl_MonitorArrayLimits:=        ‘n’ ,
Scl_CreateDebugInfo :=          ‘n’ ,
Scl_SetOKFlag:=                 ‘n’ ,
Scl_SetMaximumStringLength:=    ‘254’
}

Set OK flag или Scl_SetOKFlag

Будучи включенной, опция генерирует дополнительный код, который контролирует внутренние операции и при появлении ошибок в них сбрасывает флаг OK в false.

Визуально, о том, что код был сгенерирован с этой установленной опцией говорят следующие вставки:

SCL
Адрес флага OK – верхняя граница локального стека, области TEMP.
Флаг OK можно проверить как в самом блоке, так и после выполнения блока, в коде из которого был вызван блок.

Monitor array limits или Scl_MonitorArrayLimits

Созданный дополнительный код, при установки данной опции, контролирует индекс на выход за границы, объявленные в массиве, и при нарушении сбрасывает флаг OK в false.

Визуально, о том, что код был сгенерирован с этой установленной опцией говорят следующие вставки:

SCL
После работы с массивом, корректность работы можно оценить с помощью OK флага
и обработать событие дополнительным кодом.

Optimize object code или Scl_OptimizeObjectCode

При включении данной опции, компилятор пытается сократить код, используя разные трюки ).

Визуально, разницу можно увидеть на следующем примере:

SCL
Если оптимизация выключена – компилятор перестает использовать аккумуляторы и другие регистры для промежуточного хранения результатов.
Данные для работы достаются только оттуда где они должны лежать.

Create debug info или Scl_CreateDebugInfo

При включении данной опции, в код добавляются вставки позволяющие выполнять онлайн мониторинг значений из редактора SCL в online.

Визуально, разницу можно увидеть на следующем примере:

SCL
При включении опции, в код включаются загрузки без использования различных переменных,
а также прибавление нулей к переменным, для последующего их отображения в окне online просмотра.

Вывод:

Если в тексте вашего блока не используется OK флаг – включать его формирование и проверку границ массивов в компиляторе нет смысла, это приведет только к увеличению размера блока.
Включать оптимизацию кода имеет смысл всегда – у меня нет идей, по которым этого не следовало бы делать.

Опция генерация отладочной информации нужна только на этапе отладки блока, после проверок ее можно отключить, уменьшив размер блока.
Также можно отметить, что максимально увеличив размер кода, за счет использования этих опций, добиться затруднения анализа сгенерированного кода невозможно, так как все вставки легко опознаются и отфильтровываются.

0 0 голоса

Оцените статью!

guest
0 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии