
Исследование распределения константных значений в исходном коде программ на языке C
https://doi.org/10.31854/1813-324X-2024-10-5-118-128
EDN: KARAVM
Аннотация
В настоящее время ключевую роль в разработке программного обеспечения играет программная инженерия, одним из критерия развитости которой является изучение ее фактологии и различных научно-практических закономерностей. Важным аспектом данной области является логика выполнения программ, оперирующая внутренними данными, и, в частности – константными значениями, выявление закономерностей в которых и актуализирует данное исследование. В качестве основных применений данной закономерности можно отметить такие, как получение фундаментальных знаний об алгоритмах, создание новых и расширение существующих метрик оценки и сравнения программного кода, развитие методов его оптимизации, применение в генетическом программировании и др.
Целью настоящей статьи получение частотного распределения константных значений в исходном коде программ на языке программирования C.
Сущность представленного подхода заключается в создании метода статистического анализа текста исходных кодов программ, содержащихся в датасете ExeBench (который состоит из огромного количества исходного кода функций на языке программирования C, их ассемблерного кода для различных процессорных архитектур, ошибок компиляции и другой информации).
Предложенный метод базируется на применении алгоритмов лексического и синтаксического разбора функций исходного кода, семантического определения типов констант, преобразования записи символов языка программирования в соответствующие числовые или строковые значения.
Метод имеет реализацию в виде программного средства на языке программирования Python, приведенного в виде интуитивно понятного псевдокода.
Эксперименты с применением данного прототипа позволили получить искомое распределение константных значений для исходного кода программ на языке программирования C. Анализ полученных результатов позволил сделать ряд важных теоретико-практических выводов касательно наиболее часто используемых констант, соответствия полученного распределения закону Ципфа и близость к показательной функции, аномального появления ряда констант в Топ-50 и др.
Научная новизна предложенного подхода заключается в том, что распределение константных значений для исходного кода программ на языке программирования C получено впервые.
Теоретическая значимость состоит в получении новых фундаментальных знаний касательно особенностей и закономерностей конструкций исходного кода, которые могут быть расширены и на другие языки программирования.
Практическая значимость заключается в применении распределения для большого спектра задач, включая авторский генетический реверс-инжиниринг, который сам по себе является качественно новым направлением.
Ключевые слова
Об авторе
К. Е. ИзраиловРоссия
кандидат технических наук, доцент, старший научный сотрудник лаборатории проблем компьютерной безопасности Санкт-Петербургского Федерального исследовательского центра Российской академии наук
Список литературы
1. Касторнов А.Ф., Касторнова В.А. Языки программирования и их роль в становлении предметной области "Информатика" // Педагогическая информатика. 2016. № 1. С. 59‒68. EDN:VUUFHV
2. Коновалов Г.Г. Измерение качества чистого кода: метрики и инструменты анализа // Тенденции развития науки и образования. 2023. № 102-5. С. 25‒28. DOI:10.18411/trnio-10-2023-244. EDN:GDPWLC
3. Хлыстов И.С., Жарова О.Ю. Генетическое программирование // Электронный журнал: наука, техника и образование. 2016. № 4(9). С. 62‒67. EDN:XHJVHH
4. Израилов К.Е. Концепция генетической декомпиляции машинного кода телекоммуникационных устройств // Труды учебных заведений связи. 2021. Т. 7. № 4. С. 10‒17. DOI:10.31854/1813-324X-2021-7-4-95-109. EDN:AIOFPM
5. Kotenko I., Izrailov K., Buinevich M. Analytical Modeling for Identification of the Machine Code Architecture of Cyberphysical Devices in Smart Homes // Sensors. 2022. Vol. 22. Iss. 3. PP. 1017. DOI:10.3390/s22031017
6. Буйневич М.В., Израилов К.Е. Способ классификации файлов на базе технологии машинного обучения // Вестник Санкт-Петербургского государственного университета технологии и дизайна. Серия 1: Естественные и технические науки. 2020. № 1. С. 34‒41. DOI:10.46418/2079-8199_2020_1_6. EDN:MDPYTW
7. Израилов К.Е. Прогнозирование размера исходного кода бинарной программы в интересах ее интеллектуального реверс-инжиниринга // Вопросы кибербезопасности. 2024. № 4(62). С. 13‒25. DOI:10.21681/2311-3456-2024-4-13-25. EDN:NRFCND
8. Кучерова С.В. Закон Ципфа и его приложения в области лингвистики // Некоторые вопросы анализа, алгебры, геометрии и математического образования. 2020. № 10. С. 107‒108. EDN:QRNCOY
9. Leonov N., Buinevich M., Chechulin A. Top-20 Weakest from Cybersecurity Elements of the Industry Production and Technology Platform 4.0 Information Systems // Proceedings of the International Russian Smart Industry Conference (SmartIndustryCon, Sochi, Russian, 25‒29 March 2024). IEEE, 2024. PP. 668‒675. DOI:10.1109/SmartIndustryCon61328.2024.10515678
10. Фомин А.И. Оценка сложности исследования дизассемблированного кода исполняемых программ // Естественные и технические науки. 2021. № 7(158). С. 210‒211. EDN:UBNPCY
11. Ормонова Э.М. Определение качества программного продукта на основе теории графов // Наука. Образование. Техника. 2021. № 1(70). С. 37‒44. EDN:ITSANI
12. Лебедев В.В. Деобфускация control flow flattening средствами символьного исполнения // Прикладная дискретная математика. Приложение. 2021. № 14. С. 134‒138. DOI:10.17223/2226308X/14/29. EDN:ITNATQ
13. Королев В.Ю., Смелянский Р.Л., Смелянский Т.Р., Шалимов А.В. Об оценивании частоты выполнения фрагментов кода последовательной программы // Известия Российской академии наук. Теория и системы управления. 2015. № 4. С. 39. DOI:10.7868/S0002338815040095. EDN:RXZZRT
14. Armengol-Estapé J., Woodruff J., Brauckmann A., Magalhães J.W.S., O'Boyle M.F.P. ExeBench: an ML-scale dataset of executable C functions // Proceedings of the 6th ACM SIGPLAN International Symposium on Machine Programming (New York, USA, 13 June 2022). ACM, 2022. PP. 50–59. DOI:10.1145/3520312.3534867
15. Toomey W. Ctcompare: Code clone detection using hashed token sequences // Proceedings of the 6th International Workshop on Software Clones (IWSC, Zurich, Switzerland, 04 June 2012). IEEE, 2012. PP. 92‒93. DOI:10.1109/IWSC.2012.6227881
16. Samuelsson C. Comparative evaluation of the stochastic simplex bisection algorithm and the SciPy.Optimize module // Proceedings of the Federated Conference on Computer Science and Information Systems (FedCSIS, Lodz, Poland, 13‒16 September 2015). IEEE, 2015. PP. 573‒578. DOI:10.15439/2015F47
17. Барляева Е.А. Мыслительная деятельность человека в метафорах и сравнениях // Вестник Воронежского государственного университета. Серия: Лингвистика и межкультурная коммуникация. 2016. № 3. С. 15‒18. EDN:WKNUBD
Рецензия
Для цитирования:
Израилов К.Е. Исследование распределения константных значений в исходном коде программ на языке C. Труды учебных заведений связи. 2024;10(5):119-129. https://doi.org/10.31854/1813-324X-2024-10-5-118-128. EDN: KARAVM
For citation:
Izrailov K.E. Constant Values Distribution Investigation in the C Programs Source Code. Proceedings of Telecommunication Universities. 2024;10(5):119-129. (In Russ.) https://doi.org/10.31854/1813-324X-2024-10-5-118-128. EDN: KARAVM