ΠΠ½Π°Π»ΠΈΠ· ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΠΈ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠ°ΠΌΡΡΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΡΠ΅ΠΎΡΠΈΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΡ
Π³ΡΠ°ΡΠΎΠ² ΠΏΠ°ΠΌΡΡΠΈ ΠΏΡΠ΅Π΄ΠΈΠΊΠ°ΡΠ°ΠΌΠΈ Π½Π°Π΄ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ Π.Π. ΠΠ°ΡΠΈΠ»ΡΠ΅Π², ORCID: 0000-0002-5738-9171 Π.Π‘. ΠΡΡΠΈΠ»ΠΈΠ½, ORCID: 0000-0003-3097-8512 ΠΠ½ΡΡΠΈΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΠΌ. Π.Π. ΠΠ²Π°Π½Π½ΠΈΠΊΠΎΠ²Π° Π ΠΠ, 109004, Π ΠΎΡΡΠΈΡ, Π³. ΠΠΎΡΠΊΠ²Π°, ΡΠ». Π. Π‘ΠΎΠ»ΠΆΠ΅Π½ΠΈΡΡΠ½Π°, Π΄. 25 ΠΠ½Π½ΠΎΡΠ°ΡΠΈΡ. Π ΡΠ°Π±ΠΎΡΠ΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π²Π΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° ΠΏΡΠ΅Π΄ΠΌΠ΅Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠ°ΠΌΡΡΡΡ. ΠΠ΅ΡΠΎΠ΄ ΠΎΡΠ½ΠΎΠ²ΡΠ²Π°Π΅ΡΡΡ Π½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΡ
Π³ΡΠ°ΡΠΎΠ² Π΄Π»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π ΡΠ°Π±ΠΎΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΎ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΡ
Π³ΡΠ°ΡΠΎΠ² ΠΏΠ°ΠΌΡΡΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ΅Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠ΅Π΄ΠΈΠΊΠ°ΡΡ Π½Π°Π΄ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ Π΄Π»Ρ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΡΠΎΡΠ½ΠΎΡΡΠΈ Π°Π½Π°Π»ΠΈΠ·Π°. ΠΡΠ΅Π΄ΠΈΠΊΠ°ΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΎΡΡΠ΅ΠΊΠ°ΡΡ Π½Π΅Π΄ΠΎΡΡΠΈΠΆΠΈΠΌΡΠ΅ ΠΏΡΡΠΈ, ΡΠΌΠ΅Π½ΡΡΠ°Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π»ΠΎΠΆΠ½ΡΡ
ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ
, Π° ΡΠ°ΠΊΠΆΠ΅ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡ Π½ΠΎΠ²ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ Π·Π° ΡΡΠ΅Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π½ΠΎΠ²ΡΡ
ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ Π½Π° ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΡΡ
. ΠΠ΅ΡΠΎΠ΄ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° CPAchecker. ΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΡΡΡ ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°Π½Π° Π½Π° Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ°Ρ
ΡΠ΄ΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Linux. ΠΠ»ΡΡΠ΅Π²ΡΠ΅ ΡΠ»ΠΎΠ²Π°: ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΠ΅ Π³ΡΠ°ΡΡ ΠΏΠ°ΠΌΡΡΠΈ; Π²Π΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ; ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΠ°ΠΌΡΡΠΈ; ΠΏΡΠ΅Π΄ΠΈΠΊΠ°ΡΠ½ΡΠ΅ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ; Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ
ΠΠ»Ρ ΡΠΈΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ: ΠΠ°ΡΠΈΠ»ΡΠ΅Π² Π.Π, ΠΡΡΠΈΠ»ΠΈΠ½ Π.Π‘. ΠΠ½Π°Π»ΠΈΠ· ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΠΈ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠ°ΠΌΡΡΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΡΠ΅ΠΎΡΠΈΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΡ
Π³ΡΠ°ΡΠΎΠ² ΠΏΠ°ΠΌΡΡΠΈ ΠΏΡΠ΅Π΄ΠΈΠΊΠ°ΡΠ°ΠΌΠΈ Π½Π°Π΄ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ. Π’ΡΡΠ΄Ρ ΠΠ‘Π Π ΠΠ, ΡΠΎΠΌ 31, Π²ΡΠΏ. 6, 2019 Π³., ΡΡΡ. 7-20.Abstract. Safety-critical systems require additional effort to comply with specifications. One of the required specification is correct memory usage. The article describes an efficient method for static verification against memory safety errors as a combination of Symbolic Memory Graphs and predicate abstraction on symbolic values used in graph. In this article, we introduce an extension of Symbolic Memory Graphs. In addition to symbolic values, the graph stores predicates over symbolic values, which allow to track the relationship between symbolic values in the graph. We also expand existing vertex types to support arbitrary abstract regions, which allow us to represent such dynamic data structures as lists and trees. One of the types of abstract regions is also the ODM region, which presents a special kind of on-demand memory that occurs when analyzing incomplete programs. For this memory, the size and structure of the contents are not known in advance, but it is believed that such memory can be operated safely. The method is implemented in CPAchecker Vasilyev A.A., Mutilin V.S. Predicate extension of symbolic memory graphs for analysis of memory safety correctness. Trudy ISP RAN/Proc. ISP RAS, vol. 31, issue 6, 2019. pp. 7-20 8 tool. Practical usage is demonstrated on Linux kernel modules. The practical contribution of our work is to reduce false error messages by constructing more accurate abstractions using predicates over symbolic values.For citation: Vasilyev A.A., Mutilin V.S. Predicate extension of symbolic memory graphs for analysis of memory safety correctness. Trudy ISP RAN/Proc.