Чего ожидать в будущем. Часть 9.

Posted on

Май,22

 at

1:56

от

admin

Еще одна идея, которую собиралась реализовать (а может быть, уже и реализовала) компания Protection Technology, заключалась в разработке специального компилятора языка С, который бы создавал код, очень сложный для дизассемблирования.

Смысл этой идеи в том, что даже простейшие операции можно записать таким образом, что будет далеко не очевидно, что же они делают. И это очень часто получается при включении оптимизации в компиляторе. Например:

int divFn (int x) { return x / 10; )

Данная функция выполняет одну-единственную операцию — целочисленное деление аргумента на 10.

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

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

Leave a Reply