30 Апреля, 2011

Статика/Динамика в НДВ

SWAN
Уважаемые коллеги! Мы часто слышим о том, что какие то испытательные лаборатории проводят испытания ПО на отсутствие НДВ (не декларированные функциональные возможности). При этом проводится статический анализ исходников и динамический анализ ПО в процессе выполнения. Все это проделывают на "высоком уровне абстракции". Ну вот давайте покажу на примере. Берем программу которая выводит на экран сообщение типа "MessageBox" и больше ничего. Написана она аж на ассемблере, чтобы уменьшить избыточность вносимую компиляторами с языков высокого уровня. Итого в программе "MSGBOX.EXE" одна заявленная функция "MessageBox" (exit не в счет) которая в программе выглядит так (дизассемблировал специально всего ): С точки зрения статики - все честно функция "MessageBox" и выход. С динамикой тоже проблем нет - можно вставить датчик и убедиться что функция выполнилась. Однако, это только на высоком уровне абстракции! Давайте попробуем посмотреть - сколько же функционала выполняется при выполнении этой программки. Берем программу "numcod.exe" (2560 байт) и из нее запускаем программу "MessageBox.exe" (тоже 2560 байт). Дело в том, что "numcod.exe" запускает "MessageBox.exe" и начинает считать число ВСЕХ машинных команд которые выполняются в системе в процессе выполнения "MessageBox.exe". Ждем (у меня около 3х минут) и получаем результат: Удивительно! Для выполнения такой махонькой программки потребовалось выполнить вот столько машинных команд в реальной системе. Выводов очень много, не так ли... Скажу только что на высоком уровне абстракции код с разным качеством прогоняется до 100% а в реальной системе статика/динамика мы только что оценили около 0,000433% реально выполняемого кода. P.S. если кому интересно погонять - могу программку дать.
или введите имя

CAPTCHA