Версия для печати

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

Дата: 2016-02-29

Добавлено: komatic

Тема: Step7



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 флаг - включать его формирование и проверку границ массивов в компиляторе нет смысла, это приведет только к увеличению размера блока.

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

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

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







Просмотров: 1845

Комментарии к материалу

Ваш будет первым.

Добавить комментарий

Ваше имя:

Текст комментария (4000 max):

Введите сумму с картинки: