
рд▓реЗрдЦ рд▓реЗрдЦрдХ: 0x64rem
рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐
рдбреЗрдврд╝ рд╕рд╛рд▓ рдкрд╣рд▓реЗ, рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рдореЗрдВ рдереАрд╕рд┐рд╕ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрдиреЗ рдлреЗрдЬрд░ рдХреЛ рдорд╣рд╕реВрд╕ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдерд╛ред рдореИрдВрдиреЗ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдЧреНрд░рд╛рдлрд╝, рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рдЧреНрд░рд╛рдлрд╝, рдкреНрд░рддреАрдХрд╛рддреНрдордХ рдирд┐рд╖реНрдкрд╛рджрди рдЖрджрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ред рдЗрд╕рдХреЗ рдмрд╛рдж рдЯреВрд▓реНрд╕ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдЖрдпрд╛, рд╡рд┐рднрд┐рдиреНрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдПрдХ рдирдореВрдирд╛ (Angr, Triton, Pin, Z3)ред рдЕрдВрдд рдореЗрдВ рдХреБрдЫ рднреА рдареЛрд╕ рдирд╣реАрдВ рд╣реБрдЖ, рдЗрд╕ рдЧрд░реНрдореА рддрдХ рдореИрдВ рдбрд┐рдЬрд┐рдЯрд▓ рд╕реБрд░рдХреНрд╖рд╛ рд╕рдорд░ рдСрдл рд╣реИрдХ 2019 рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдЧрдпрд╛, рдЬрд╣рд╛рдВ рдореБрдЭреЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдереАрдо рдХреЗ рд░реВрдк рдореЗрдВ рдХреНрд▓реИрдВрдЧ рд╕реНрдЯреЗрдЯрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреА рдкреЗрд╢рдХрд╢ рдХреА рдЧрдИред рдРрд╕рд╛ рд▓рдЧ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдпрд╣ рд╡рд┐рд╖рдп рдореБрдЭреЗ рдЕрдкрдиреЗ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдЬреНрдЮрд╛рди рдХреЛ рд╕рдорддрд▓ рдкрд░ рд░рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛, рдХреБрдЫ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдЧрд╛ рдФрд░ рдЕрдиреБрднрд╡реА рдЖрдХрд╛рдУрдВ рд╕реЗ рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ред рдЖрдЧреЗ, рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдкреНрд▓рдЧ-рдЗрди рд▓рд┐рдЦрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреИрд╕реЗ рд╣реБрдИ рдФрд░ рдЗрдВрдЯрд░реНрдирд╢рд┐рдк рдорд╣реАрдиреЗ рдХреЗ рджреМрд░рд╛рди рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рдкрд╛рдареНрдпрдХреНрд░рдо рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВред
рдХреНрд▓реИрдВрдЧ рд╕реНрдЯреИрдЯрд┐рдХ рдПрдирд╛рд▓рд╛рдЗрдЬрд░
рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП, рдХреНрд▓реИрдВрдЧ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рддреАрди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:
- LibClang рдПрдХ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рд╕реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдПрдПрд╕рдЯреА рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВред рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рдпрджрд┐ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рднрд╛рд╖рд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди) рдпрд╛ рдПрдХ рд╕реНрдерд┐рд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
- рдХреНрд▓реИрдВрдЧ рдкреНрд▓рдЧрдЗрдиреНрд╕ - рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдмреБрд▓рд╛рдпрд╛ рдЧрддрд┐рд╢реАрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВред рдЖрдкрдХреЛ рдПрдПрд╕рдЯреА рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
- рд▓рд┐рдмрдЯреВрд▓рд┐рдВрдЧ - рдХреНрд▓реИрдВрдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрд▓рдЧ рдЙрдкрдХрд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпред рдПрдПрд╕рдЯреА рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рдкрд╣реБрдВрдЪ рднреА рджреЗрддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдореА рдХреЛрдб рдХреЛ рдЪреЗрдХ рдХрд┐рдП рдЧрдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдмрд┐рд▓реНрдб рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рдмрд╛рд╣рд░ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЪреВрдВрдХрд┐ рд╣рдо рдХреНрд▓реИрдВрдЧ рд╕реНрдЯреЗрдЯрд┐рдХ рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдкреНрд▓рдЧрдЗрди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВред рдЖрдк C ++ рдпрд╛ Python рдореЗрдВ рдкреНрд▓рдЧрдЗрди рдХреЗ рд▓рд┐рдП рдХреЛрдб рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдХреЗ рд▓рд┐рдП, рдмрд╛рдЗрдВрдбрд░реНрд╕ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╕рд╛рд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЯреНрд░реА рдХреЗ рдиреЛрдбреНрд╕ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░рддреЗ рд╣реИрдВ, рдиреЛрдбреНрд╕ рдХреЗ рдЧреБрдгреЛрдВ рддрдХ рднреА рдкрд╣реБрдВрдЪ рд░рдЦрддреЗ рд╣реИрдВ рдФрд░ рдиреЛрдб рдХреЛ рд╕реНрд░реЛрдд рдХреЛрдб рдХреА рдкрдВрдХреНрддрд┐ рдореЗрдВ рдореИрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рд╕реЗрдЯ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЪреЗрдХрд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИред рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП llvm рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рджреЗрдЦреЗрдВред
рдореЗрд░реЗ рдХрд╛рд░реНрдп рдХреЛ рдХреЛрдб рдХреЗ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП C ++ рдХреЛ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдЧрд▓рд╛ рдЙрдкрдХрд░рдг рдХрд╛ рдПрдХ рдкрд░рд┐рдЪрдп рд╣реИред
рдХреНрд▓реИрдВрдЧ рд╕реНрдЯреИрдХ рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ (рдЗрд╕рдХреЗ рдмрд╛рдж CSA) рдкреНрд░рддреАрдХрд╛рддреНрдордХ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ C / C ++ / Objective-C рдХреЛрдб рдХреЗ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рд╣реИред рдПрдирд╛рд▓рд╛рдЗрдЬрд░ рдХреЛ Clang рдлреНрд░рдВрдЯрдПрдВрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ -c1 рдФрд░ -analyze рдЭрдВрдбреЗ рдХреЛ рдмрд┐рд▓реНрдб рдХрдорд╛рдВрдб рдореЗрдВ, рдпрд╛ рдПрдХ рдЕрд▓рдЧ рд╕реНрдХреИрди-рдмрд┐рд▓реНрдб рдмрд┐рдирд╛рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдЕрд▓рд╛рд╡рд╛, CSA рд╡рд┐рдЬрд╝реБрдЕрд▓ HTML рд░рд┐рдкреЛрд░реНрдЯ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред

рд╕реАрдПрд╕рдП рдореЗрдВ рдПрдПрд╕рдЯреА (рдПрдмреНрд╕рдЯреНрд░реИрдХреНрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЯреНрд░реА), рд╕реАрдПрдлрдЬреА (рдХрдВрдЯреНрд░реЛрд▓ рдлреНрд▓реЛ рдЧреНрд░рд╛рдл) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИред рд╕рдВрд░рдЪрдирд╛рдУрдВ рд╕реЗ рдЖрдк рдЖрдЧреЗ рдЪрд░ рдХреА рдШреЛрд╖рдгрд╛рдУрдВ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рдкреНрд░рдХрд╛рд░, рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдФрд░ рдЕрдирд┐рдпрд╛рд░реА рдСрдкрд░реЗрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ, рдЖрдк рдкреНрд░рддреАрдХрд╛рддреНрдордХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрджрд┐ред рдореЗрд░рд╛ рдкреНрд▓рдЧрдЗрди рдПрдПрд╕рдЯреА рдХрдХреНрд╖рд╛рдУрдВ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛, рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдЖрдЧреЗ рднреА рдЙрдЪрд┐рдд рд╣реЛрдЧрд╛ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд░реНрдЧреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ рдЬреЛ рдкреНрд▓рдЧрдЗрди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ рдереА, рдпрд╣ рд╕реВрдЪреА рд╕реАрдПрд╕рдП рдХреА рдкреНрд░рд╛рдердорд┐рдХ рд╕рдордЭ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧреА:
Stmt - рдЗрд╕рдореЗрдВ рдмрд╛рдЗрдирд░реА рдСрдкрд░реЗрд╢рди рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
Decl - рдЪрд░ рдХреА рдШреЛрд╖рдгрд╛ред
Expr - рднрд╛рд╡реЛрдВ рдХреЗ рдмрд╛рдПрдБ, рджрд╛рдПрдБ рднрд╛рдЧ, рдЙрдирдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред
ASTContext - рдкреЗрдбрд╝, рд╡рд░реНрддрдорд╛рди рдиреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реАред
рд╕реНрд░реЛрдд рдкреНрд░рдмрдВрдзрдХ - рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЬреЛ рдкреЗрдбрд╝ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред
RecursiveASTVisitor, ASTMatcher - рдПрдХ рдкреЗрдбрд╝ рдХреЛ рдкрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛рдПрдВред
рдореИрдВ рджреЛрд╣рд░рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рд╕реАрдПрд╕рдП рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдХреЛрдб рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреА рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдКрдкрд░ рд╕реВрдЪреАрдмрджреНрдз рдХрдХреНрд╖рд╛рдПрдВ рдЙрдкрд▓рдмреНрдз рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рднреА рдбреЗрдЯрд╛ рдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреНрд▓реИрдВрдЧ рдХреЗ рдЕрдкрдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдкреНрд░рд▓реЗрдЦрди рдХреЛ рджреЗрдЦрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ; рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдХреБрдЫ рдЙрдкрдпреБрдХреНрдд рдкрд╣рд▓реЗ рд╣реА рд▓рд┐рдЦрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИред
рдЗрдВрдЯреЗрдЧрд░ рдУрд╡рд░рдлреНрд▓реЛ рд╕рд░реНрдЪ
рдкреНрд▓рдЧрдЗрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрд╕ рдХрд╛рд░реНрдп рдХреЛ рдЪреБрдирдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рд╕реЗ рд╡рд╣ рд╣рд▓ рдХрд░реЗрдЧрд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, llvm рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕рдВрднрд╛рд╡рд┐рдд рдЪреЗрдХрд░реНрд╕ рдХреА рд╕реВрдЪреА рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ ; рдЖрдк рдореМрдЬреВрджрд╛ рд╕реНрдерд┐рд░ рдпрд╛ рдЕрд▓реНрдлрд╛ рдЪреЗрдХрд░реНрд╕ рдХреЛ рднреА рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрдкрд▓рдмреНрдз рдЪреЗрдХрд░реНрд╕ рдХреЗ рдХреЛрдб рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдореЗрдВ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рд▓рд┐рдмрдХреНрд▓рд╛рдВрдЧ рдХреЗ рдЕрдзрд┐рдХ рд╕рдлрд▓ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдЪреЗрдХрд░ рдХреЛ рдЦрд░реЛрдВрдЪ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкрд╕рдВрдж рдХреЛ рдЕрд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреА рд╕реВрдЪреА рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдкреВрд░реНрдгрд╛рдВрдХ рдУрд╡рд░рдлрд╝реНрд▓реЛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪреЗрдХрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдк рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕ рднреЗрджреНрдпрддрд╛ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓реИрдВрдЧ рдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рд░реНрдпрд╢реАрд▓рддрд╛ рд╣реИ (рдЭрдВрдбреЗ-рдкрдЯреНрдЯрд╛рдкрд░реНрд╡, -fwrapv рдФрд░ рдЬреИрд╕реЗ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреЗрдд рджрд┐рдП рдЧрдП рд╣реИрдВ), рдпрд╣ рд╕рдВрдХрд▓рдХ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдирд┐рдХрд╛рд╕ рдХреЛ рдЪреЗрддрд╛рд╡рдиреА рдореЗрдВ рдбрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЕрдХреНрд╕рд░ рд╡рд╣рд╛рдВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдпреВрдмреАрдПрд╕рдПрди рдЕрднреА рднреА рд╣реИ , рд▓реЗрдХрд┐рди рдпреЗ рд╕реИрдирд┐рдЯрд╛рдЗрдЬрд╝рд░ рд╣реИрдВ, рд╣рд░ рдХреЛрдИ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╡рд┐рдзрд┐ рд░рдирдЯрд╛рдЗрдо рдкрд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, рдФрд░ рд╕реАрдПрд╕рдП рдкреНрд▓рдЧ-рдЗрди рд╕рдордп рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╕реВрддреНрд░реЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддрд╛ рд╣реИред
рдЕрдЧрд▓рд╛ рдЪрдпрдирд┐рдд рднреЗрджреНрдпрддрд╛ рдкрд░ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рд╕рдВрдЧреНрд░рд╣ рд╣реИред рдкреВрд░реНрдгрд╛рдВрдХ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдХреБрдЫ рд╕рд░рд▓ рдФрд░ рдЧрдВрднреАрд░ рдирд╣реАрдВ рд╣реБрдЖ рдХрд░рддрд╛ рдерд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рднреЗрджреНрдпрддрд╛ рдордиреЛрд░рдВрдЬрдХ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рдкрд░рд┐рдгрд╛рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрдВрдЯреЗрдЧрд░ рдУрд╡рд░рдлреНрд▓реЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рднреЗрджреНрдпрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЕрдирдкреЗрдХреНрд╖рд┐рдд рдорд╛рди рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдореЗрдВ рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдУрд╡рд░рдлреНрд▓реЛ - рдпрджрд┐ рдЪрд░ рдЗрд░рд╛рджрд╛ рд╕реЗ рдмрдбрд╝рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЕрдВрдбрд░рдлреНрд▓реЛ - рдЕрдкрдиреЗ рдореВрд▓ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдХрдоред рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдХрд╛рд░рдг рдФрд░ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рдХрд╛рд░рдг рдРрд╕реА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддреА рд╣реИрдВред
C ++ рдореЗрдВ, рдПрдХ рдЕрдВрдХрдЧрдгрд┐рддреАрдп рддреБрд▓рдирд╛ рдСрдкрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди, рдкреВрд░реНрдгрд╛рдВрдХ рдорд╛рди рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдбрд╛рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдмрд┐рдЯ рдЧрд╣рд░рд╛рдИ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЕрдзрд┐рдХ рдмрд╛рд░ред рдФрд░ рдРрд╕реЗ рднреВрдд рд╣рд░ рдЬрдЧрд╣ рдФрд░ рд▓рдЧрд╛рддрд╛рд░ рд╣реЛрддреЗ рд╣реИрдВ, рд╡реЗ рд╕реНрдкрд╖реНрдЯ рдпрд╛ рдирд┐рд╣рд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдХрдИ рдирд┐рдпрдо рд╣реИрдВ рдЬрд┐рдирдХреЗ рджреНрд╡рд╛рд░рд╛ рднреВрдд рд╣реЛрддреЗ рд╣реИрдВ [1]:
- рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд╕реЗ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛрдХрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд, рд▓реЗрдХрд┐рди рдмрдбрд╝рд╛ рдмрд┐рдЯ: рдмрд╕ рдЙрдЪреНрдЪ рдХреНрд░рдо рдЬреЛрдбрд╝реЗрдВред
- рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреВрд░реНрдгрд╛рдВрдХ рдХреЛ рд╕рдорд╛рди рдХреНрд╖рдорддрд╛ рдХреЗ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреВрд░реНрдгрд╛рдВрдХ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛: рдЛрдгрд╛рддреНрдордХ рдХреЛ рдзрдирд╛рддреНрдордХ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдирдпрд╛ рдЕрд░реНрде рдЧреНрд░рд╣рдг рдХрд░рддрд╛ рд╣реИред DirectFB рдореЗрдВ рдПрдХ рд╕рдорд╛рди рддреНрд░реБрдЯрд┐ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг CVE-2014-2977 рд╣реИ ред
- рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреВрд░реНрдгрд╛рдВрдХ рдХреЛ рдПрдХ рдмрдбрд╝реА рдмрд┐рдЯ рдХреНрд╖рдорддрд╛ рдХреЗ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреВрд░реНрдгрд╛рдВрдХ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛: рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдереЛрдбрд╝реА рдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реЛрдЧрд╛, рдлрд┐рд░ рдпрджрд┐ рд╕рдВрдЦреНрдпрд╛ рдирдХрд╛рд░рд╛рддреНрдордХ рд╣реИ, рддреЛ рдпрд╣ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдореВрд▓реНрдп рдмрджрд▓ рджреЗрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: 0xff (-1) 0xffffffff рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
- рдПрдХ рд╣реА рдмрд┐рдЯ рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рдВрдХреЗрдд рдХреЗ рд╕рд╛рде рдПрдХ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреВрд░реНрдгрд╛рдВрдХ: рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдЙрдЪреНрдЪ рдмрд┐рдЯ рдХреЗ рдореВрд▓реНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдореВрд▓реНрдп рдХреЛ рдмрджрд▓ рд╕рдХрддреА рд╣реИред
- рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреВрд░реНрдгрд╛рдВрдХ рдЬрд┐рд╕рдореЗрдВ рдЕрдзрд┐рдХ рдХреНрд╖рдорддрд╛ рдХрд╛ рд╕рдВрдХреЗрдд рд╣реЛрддрд╛ рд╣реИ: рдкрд╣рд▓реЗ, рдПрдХ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд╕рдВрдЦреНрдпрд╛ рдХреА рдХреНрд╖рдорддрд╛ рдмрдврд╝ рдЬрд╛рддреА рд╣реИ, рдлрд┐рд░ рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд░реВрдкрд╛рдВрддрд░рдгред
- рдиреАрдЪреЗ рд░реВрдкрд╛рдВрддрд░рдг: рдмрд┐рдЯреНрд╕ рдХреЛ рдХреЗрд╡рд▓ рдХрд╛рдЯ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдорд╛рдиреЛрдВ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдирдХрд╛рд░рд╛рддреНрдордХ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред PHP рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рднреЗрджреНрдпрддрд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдгред
рдпрд╛рдиреА рднреЗрджреНрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЯреНрд░рд┐рдЧрд░ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ, рдЧрд▓рдд рдЕрдВрдХрдЧрдгрд┐рдд, рдЧрд▓рдд рдкреНрд░рдХрд╛рд░ рдХрд╛ рд░реВрдкрд╛рдВрддрд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЕрдиреБрдХреВрд▓рди рдХреЗ рджреМрд░рд╛рди рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдпрд╛ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рдХрд╛рд░рдг рд╣реЛрддрд╛ рд╣реИред рд╕рдордп рдмрдо рд╡рд┐рдХрд▓реНрдк рднреА рд╕рдВрднрд╡ рд╣реИ, рдЬрдм рдХреЛрдб рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рд╕рдВрдХрд▓рдХ рдХреЗ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рд╣рд╛рдирд┐рд░рд╣рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдирдП рдЕрдиреБрдХреВрд▓рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рд░рд┐рд╣рд╛рдИ рдХреЗ рд╕рд╛рде "рд╡рд┐рд╕реНрдлреЛрдЯ" рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред рдЗрддрд┐рд╣рд╛рд╕ рдореЗрдВ, SafeInt рд╡рд░реНрдЧ (рдмрд╣реБрдд рд╡рд┐рдбрдВрдмрдирд╛рдкреВрд░реНрдг) [5, 6.5.2] рдХреЗ рд╕рд╛рде рдЗрд╕ рддрд░рд╣ рдХрд╛ рдорд╛рдорд▓рд╛ рдкрд╣рд▓реЗ рднреА рдЖ рдЪреБрдХрд╛ рд╣реИред
рдЗрдВрдЯреАрдЬрд░ рдУрд╡рд░рдлреНрд▓реЛ рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╡реЗрдХреНрдЯрд░ рдЦреЛрд▓рддреЗ рд╣реИрдВ: рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдПрдХ рдЕрд▓рдЧ рдкрде рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ (рдпрджрд┐ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рд╕рд╢рд░реНрдд рдмрдпрд╛рдиреЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ), рдПрдХ рдмрдлрд░ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЕрдкрдиреЗ рдЖрдк рдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реАрд╡реАрдИ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рдХрд╛рд░рдгреЛрдВ, рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдУрдкрди рд╕реЛрд░реНрд╕ рдЙрддреНрдкрд╛рджреЛрдВ рдореЗрдВ рдкреВрд░реНрдгрд╛рдВрдХ рдУрд╡рд░рдлрд╝реНрд▓реЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИ, рддрд╛рдХрд┐ рдЖрдк рди рдХреЗрд╡рд▓ рд╡рд┐рд╡рд░рдг рдкрдврд╝реЗрдВ, рдмрд▓реНрдХрд┐ рдХреЛрдб рднреА рджреЗрдЦреЗрдВред
- CVE-2019-3560 - Fizz рдореЗрдВ рдкреВрд░реНрдгрд╛рдВрдХ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ (рдлреЗрд╕рдмреБрдХ рдХреЗ рд▓рд┐рдП TLS рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ) рдПрдХ рддрдВрдЧ рдиреЗрдЯрд╡рд░реНрдХ рдкреИрдХреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ DoS рднреЗрджреНрдпрддрд╛ рдХрд╛ рдлрд╛рдпрджрд╛ рдЙрдард╛ рд╕рдХрддрд╛ рд╣реИред
- CVE-2018-14618 - рдкрд╛рд╕рд╡рд░реНрдб рд▓рдВрдмрд╛рдИ рдХреЗ рдХрд╛рд░рдг рдкреВрд░реНрдгрд╛рдВрдХ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдХреЗ рдХрд╛рд░рдг рдХрд░реНрд▓ рдореЗрдВ рдмрдлрд░ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ред
- CVE-2018-6092 - 32-рдмрд┐рдЯ рд╕рд┐рд╕реНрдЯрдо рдкрд░, рдХреНрд░реЛрдо рдХреЗ рд▓рд┐рдП WebAssembly рдореЗрдВ рдПрдХ рднреЗрджреНрдпрддрд╛ RCE рдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ HTML рдкреГрд╖реНрда рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдкрд╣рд┐рдпрд╛ рдХреЛ рд╕реБрджреГрдврд╝ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, CppCheck рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдореЗрдВ рдкреВрд░реНрдгрд╛рдВрдХ рдУрд╡рд░рдлрд╝реНрд▓реЛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЙрдирдХрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
- рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдмрд╛рдЗрдирд░реА рдСрдкрд░реЗрдЯрд░ рд╣реИред
- рдпрджрд┐ рд╣рд╛рдБ, рддреЛ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рджреЛрдиреЛрдВ рддрд░реНрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реИрдВред
- рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЖрдХрд╛рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВред
- рдЧрдгрдирд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдореВрд▓реНрдп рдЗрд╕рдХреА рдЕрдзрд┐рдХрддрдо рдпрд╛ рдиреНрдпреВрдирддрдо рд╕реАрдорд╛ рд╕реЗ рдЖрдЧреЗ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдЗрд╕ рд╕реНрддрд░ рдкрд░ рдЗрд╕рдиреЗ рд╕реНрдкрд╖реНрдЯрддрд╛ рдирд╣реАрдВ рджреАред рдпрд╣ рдмрд╣реБрдд рд╕реА рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╣рд╛рдирд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рд╕реЗ рд╕реВрдЪрдирд╛рдУрдВ рдХрд╛ рд╡реНрдпрд╡рд╕реНрдерд┐рддрдХрд░рдг рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд╕реНрдерд╛рди рдкрд░ рд╣рд░ рдЪреАрдЬ рдиреЗ CWE рдХреА рд╕реВрдЪреА рдореЗрдВ рдЬрдЧрд╣ рдмрдирд╛рдИред рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рд╕рд╛рдЗрдЯ рдкрд░ 9 рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреВрд░реНрдгрд╛рдВрдХ рдУрд╡рд░рдлрд╝реНрд▓реЛ рдЖрдмрдВрдЯрд┐рдд рд╣реИрдВ:
- 190 - рдкреВрд░реНрдгрд╛рдВрдХ oveflow
- 191 - рдкреВрд░реНрдгрд╛рдВрдХ рдЕрдВрдбрд░рдлрд╝реНрд▓реЛ
- 192 - рдкреВрд░реНрдгрд╛рдВрдХ рдЬрдорд╛рд╡ рддреНрд░реБрдЯрд┐
- 193 - рдСрдл-рдмрд╛рдп-рд╡рди
- 194 - рдЕрдирдкреЗрдХреНрд╖рд┐рдд рд╕рд╛рдЗрди рдПрдХреНрд╕рдЯреЗрдВрд╢рди
- 195 - рдЕрдирд╕рд╛рдЗрдиреНрдЯреЗрдб рдХрдирд╡рд░реНрдЬрд╝рди рдПрд░рд░ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд┐рдП
- 196 - рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд░реВрдкрд╛рдВрддрд░рдг рддреНрд░реБрдЯрд┐ рдХреЛ рдЕрдирд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛
- 197 - рдиреНрдпреВрдореЗрд░рд┐рдХ рдЯреНрд░рдВрдХреЗрд╢рди рдПрд░рд░
- 198 - рдЧрд▓рдд рдмрд╛рдЗрдЯ рдСрд░реНрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ
рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рдХрд╛рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рдУрд╡рд░рдлреНрд▓реЛ рдЧрд▓рдд рд╕реНрдкрд╖реНрдЯ / рдирд┐рд╣рд┐рдд рдЬрд╛рддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╣реЛрддрд╛ рд╣реИред рдФрд░ рдХреНрдпреЛрдВрдХрд┐ рдЕрдореВрд░реНрдд рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЯреНрд░реА рдХреА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдХрд┐рд╕реА рднреА рдЬрд╛рддрд┐ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рдо рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдПрдПрд╕рдЯреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЪрд┐рддреНрд░ (рдЫрд╡рд┐ 3) рдореЗрдВ, рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдкреЗрдбрд╝ рдореЗрдВ рдбрд╛рд▓реА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдХреЛрдИ рднреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдПрдХ рдЕрд▓рдЧ рдиреЛрдб рд╣реИ, рдФрд░, рдкреЗрдбрд╝ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдШреВрдорддреЗ рд╣реБрдП, рд╣рдо рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдкрд╛рдВрддрд░рдгреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓рдЧрддрд╛ рд╣реИ: рд╣рдо рдХрд╛рд╕реНрдЯ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрдВрдЯреАрдЧреНрд░рд▓рдХреИрд╕реНрдЯ (рдкреВрд░реНрдгрд╛рдВрдХ рд░реВрдкрд╛рдВрддрд░рдг) рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдПрдХ рдЙрдкрдпреБрдХреНрдд рдиреЛрдб рдкрд╛рддреЗ рд╣реИрдВ, рддреЛ рдмрд╛рдЗрдирд░реА рдСрдкрд░реЗрд╢рди рдпрд╛ рдбреЗрдХреНрд▓реЗ (рдЪрд░ рдШреЛрд╖рдгрд╛) рдХреЗ рд╡рдВрд╢рдЬ рдХреЛ рджреЗрдЦреЗрдВред рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рд╕рд╛рдЗрди рдФрд░ рдмрд┐рдЯ рдЧрд╣рд░рд╛рдИ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдмрд╛рдЗрдирд░реА рдСрдкрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреЗрд╡рд▓ рдШреЛрд╖рдгрд╛ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВред
рдЪреЗрдХрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдЖрдЗрдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЙрддрд░реЗрдВред рд╣рдореЗрдВ рдПрдХ рдЪреЗрдХрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдВрдХрд╛рд▓ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдПрдХ рд╕реНрдЯреИрдВрдб-рдЕрд▓реЛрди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдХреНрд▓реИрдВрдЧ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХреЛрдб рдореЗрдВ, рдЕрдВрддрд░ рдЫреЛрдЯрд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдкреНрд▓рдЧрдЗрди рд▓рд┐рдЦрдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рддреБрд░рдВрдд рдПрдХ рдЫреЛрдЯрд╛ рдкреАрдбреАрдПрдл рдкрдврд╝реЗрдВ: "рдХреНрд▓реИрдВрдЧ рд╕реНрдЯреИрдЯрд┐рдХ рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░: рдП рдЪреЗрдХрд░ рдбреЗрд╡рд▓рдкрд░ рдЧрд╛рдЗрдб" , рдореВрд▓ рдмрд╛рддреЗрдВ рд╡рд╣рд╛рдБ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреБрдЫ рднреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рдХреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рддреБрд░рдВрдд рдкрдХрдбрд╝ рд▓реЛред
рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдЪреЗрдХрд░ рдХреЛ рдЕрдкрдиреЗ рдХреНрд▓реИрдВрдЧ рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдирд┐рдореНрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
рд▓рдЧрднрдЧ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рд╕реНрд╡рдпрдВ рдкрд░реАрдХреНрд╖рдХ рдХреЛ рд▓рд┐рдЦреЗрдВ:
namespace { class SuperChecker : public Checker<check::PreStmt<BinaryOperator>> {
рдлрд┐рд░, CMakeLists.txt
рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ, рдЖрдкрдХреЛ CMakeLists.txt
рдФрд░ Checkers.td
рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдпрд╣рд╛рдБ ${llvm-source-path}/clang/lib/StaticAnalyzer/Checkers/CMakeLists.txt
рдЖрд╕рдкрд╛рд╕ рд░рд╣рддреЗ рд╣реИрдВ ${llvm-source-path}/clang/lib/StaticAnalyzer/Checkers/CMakeLists.txt
рдФрд░ рдпрд╣рд╛рдБ ${llvm-source-path}/clang/include/clang/StaticAnalyzer/Checkers/Checkers.td
ред
рдкрд╣рд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдмрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛, рджреВрд╕рд░реЗ рдореЗрдВ рдЖрдкрдХреЛ рдПрдХ рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рд╡рд┐рд╡рд░рдг рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛:
#Checkers.td def SuperChecker : Checker<"SuperChecker">, HelpText<"test checker">, Documentation<HasDocumentation>;
рдпрджрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ Checkers.td
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЗрд╕ рдмрд╛рдд рдХреЗ рдкрд░реНрдпрд╛рдкреНрдд рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ рдФрд░ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИред
рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЖрдк рдХреНрд▓реИрдВрдЧ рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ, рдФрд░ рдЖрдк рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЕрд╕реЗрдВрдмрд▓реА (рдЗрд╕рд▓рд┐рдП / рдбреАрдПрд▓) рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд▓реНрдк рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓реЗрдВрдЧреЗред рдлрд┐рд░ рдЪреЗрдХрд░ рдХреЗ рдХреЛрдб рдореЗрдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
namespace { class SuperChecker : public Checker<check::PreStmt<BinaryOperator>> {
рдЕрдЧрд▓рд╛, рдЕрдкрдирд╛ рдХреЛрдб рдЗрдХрдЯреНрдард╛ рдХрд░реЗрдВ, рдЖрдк рдЕрдкрдиреА рдЦреБрдж рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рд▓реЗрдЦрдХ рдХреЗ рдкрд╛рд╕ :) рдерд╛), рддреЛ рдЖрдк рдХреНрд▓реИрдЧ рд╕реЛрд░реНрд╕ рдХреЛрдб рдореЗрдВ рдореЗрдХрдлрд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдЕрдЬреАрдм рддрд░реАрдХреЗ рд╕реЗ clangStaticAnalyzerCerers рдХрдорд╛рдВрдб рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдЧрд▓рд╛, рдкрд░реАрдХреНрд╖рдХ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ:
рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЪреЗрдХрд░реНрд╕ рдХреЗ рд▓рд┐рдП
clang++ -cc1 -analyze -analyzer-checker=core.DivideZero test.cpp
рдмрд╛рд╣рд░реА рдХреЗ рд▓рд┐рдП
clang++ -cc1 -load ${PATH_TO_CHECKER}/SuperChecker.so -analyze -analyzer-checker=test.Me -analyzer-config test.Me:UsrInp1="foo" test.Me:Inp1="bar" -analyzer-config test.Me:Inp2=123 test.cpp
рдЗрд╕ рд╕реНрддрд░ рдкрд░, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрд░рд┐рдгрд╛рдо (рдЫрд╡рд┐ 4) рд╣реИрдВ, рд▓реЗрдХрд┐рди рд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЗрд╡рд▓ рд╕рдВрднрд╛рд╡рд┐рдд рдУрд╡рд░рдлреНрд▓реЛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЭреВрдареА рд╕рдХрд╛рд░рд╛рддреНрдордХрддрд╛ред

рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
- рдЧреНрд░рд╛рдлрд╝ рдХреЗ рдкреАрдЫреЗ-рдкреАрдЫреЗ рдШреВрдордирд╛ рдФрд░ рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЪрд░ рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореВрд▓реНрдпреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдЬрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рд╣реИред
- рдПрдПрд╕рдЯреА рдЯреНрд░реИрд╡рд░реНрд╕рд▓ рдХреЗ рджреМрд░рд╛рди, рдЪрд░ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдиреЛрдВ рдХреЛ рддреБрд░рдВрдд рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рдЬрдм рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдЙрдиреНрд╣реЗрдВ рдЬрд╛рдВрдЪреЗрдВред
- рджрд╛рдЧреА рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдЖрдЧреЗ рдХреЗ рддрд░реНрдХреЛрдВ рдХреЛ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдХреНрд▓реИрдВрдЧ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╕рдордп, #include
рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рднреА рдлрд╛рдЗрд▓реЗрдВ рднреА рдкрд╛рд░реНрд╕ рд╣реЛрддреА рд╣реИрдВ, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдПрдПрд╕рдЯреА рдХрд╛ рдЖрдХрд╛рд░ рдмрдврд╝ рдЬрд╛рддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ, рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реИ:
- рдкрд╣рд▓реЗ, рдЗрд╕реЗ рдкреВрд░рд╛ рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред рдПрдХ рдкреЗрдбрд╝ рдореЗрдВ рдШреВрдордирд╛, рдЖрдкрдХреА рдЬрд╝рд░реВрд░рдд рдХреА рд╣рд░ рдЪреАрдЬрд╝ рдХреЛ рдЦреЛрдЬрдирд╛ рдФрд░ рдЧрд┐рдирдирд╛ рдХрд╛рдлреА рд╕рдордп рд▓реЗрдЧрд╛, рдРрд╕реЗ рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдХреЛрдб рдореЗрдВ рдкреЗрдбрд╝ рдкрд░ рдЪрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо
clang::RecursiveASTVisitor
рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рдПрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдЧрд╣рд░рд╛рдИ рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рдордп рдХрд╛ рдПрдХ рдЕрдиреБрдорд╛рди рд╣реЛрдЧрд╛
, рдЬрд╣рд╛рдВ V рд╢реАрд░реНрд╖ рд░реЗрдЦрд╛рдУрдВ рдХрд╛ рд╕рдореВрд╣ рд╣реИ, рдФрд░ E рдЧреНрд░рд╛рдлрд╝ рдХреЗ рдХрд┐рдирд╛рд░реЛрдВ рдХрд╛ рд╕рдореВрд╣ рд╣реИред - рджреВрд╕рд░рд╛ - рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдЯреЛрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рд╣рдореЗрдВ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдХреНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреЗрдбрд╝ рдЦреБрдж рдХреЛ рд╕рдВрд░рдЪрдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╣рдо рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реНрдореГрддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреБрдЫ рдЕрдиреНрдп рдкрд░ рдРрд╕реЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЦрд░реНрдЪ рдХрд░рдирд╛ рдПрдХ рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред
- рддреАрд╕рд░рд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЗ рд▓рд┐рдП рдЖрдк рдкрд░реНрдпрд╛рдкреНрдд рд╢реЛрдз рдФрд░ рдЙрджрд╛рд╣рд░рдг рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╕реАрдПрд╕рдП рдореЗрдВ рдХреЛрдИ рддреИрдпрд╛рд░ рджрд╛рдЧреА рдирд╣реАрдВ рд╣реИред рдПрдХ рдЪреЗрдХрд░ рд╣реИ , рдЬрд┐рд╕реЗ рдмрд╛рдж рдореЗрдВ рд╕реНрд░реЛрддреЛрдВ рдореЗрдВ рдЕрд▓реНрдлрд╛ рдЪреЗрдХрд░реНрд╕ (Alpha.security.taint.TaintPropagation) рдХреА рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛, рдпрд╣ рдлрд╝рд╛рдЗрд▓
GenericTaintChecker.cpp
рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИред рдЪреЗрдХрд░ рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рд╕реА рд╕реЗ рдЬреНрдЮрд╛рдд рдЕрд╕реБрд░рдХреНрд╖рд┐рдд I / O рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ "рдирд┐рд╢рд╛рди" рдЪрд░ рд╣реИрдВ рдЬреЛ рдЦрддрд░рдирд╛рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рддрд░реНрдХ рдпрд╛ рдкрд░рд┐рдгрд╛рдо рдереЗред рд╡рд░реНрдгрд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ "рд╡рд┐рддрд░рдг" рдореЙрдбрд▓ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдмрд╣рд╛рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░, рд╡рд░реНрдЧ рдлрд╝реАрд▓реНрдб рдЖрджрд┐ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред
рдЗрдВрдЯрд░реНрдирд╢рд┐рдк рдХреЗ рд▓рд┐рдП рд╢реЗрд╖ рд╕рдордп GenericTaintChecker.cpp
рдкрдврд╝рдиреЗ рдФрд░ рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд░реАрдореЗрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдореЗрдВ рдмрд┐рддрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рдЕрд╡рдзрд┐ рдХреЗ рдЕрдВрдд рддрдХ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдбреАрдПрд╕рдИрд╕реА рдореЗрдВ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣реА рд╢реЛрдзрди рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдп рдмрди рдЧрдпрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рдЦрддрд░рдирд╛рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдирд╛ рдПрдХ рдЕрд▓рдЧ рдХрд╛рдо рд╣реИ, рди рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╣рдореЗрд╢рд╛ рдЦрддрд░рдирд╛рдХ рд╕реНрдерд╛рди рдХреБрдЫ рдорд╛рдирдХ рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдЖрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдПрдХ рдЭрдВрдбреЗ рдХреЛ рдкрд░реАрдХреНрд╖рдХ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ рддрд╛рдХрд┐ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдЬрд┐рдиреНрд╣реЗрдВ "рдЬрд╣рд░" / "рдЪрд┐рд╣реНрдирд┐рдд" рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ред рджрд╛рдЧреА рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рджреМрд░рд╛рдиред
рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪреЗрдХ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рдЪрд░ рдереЛрдбрд╝рд╛ рдХреНрд╖реЗрддреНрд░ рд╣реИред рдорд╛рдирдХ CSA рдЯреВрд▓ рджреНрд╡рд╛рд░рд╛, рдЖрдХрд╛рд░ рдкреНрд░рдХрд╛рд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рд╣рдо рдереЛрдбрд╝рд╛ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХреЗ рдЖрдХрд╛рд░ рдореЗрдВ рдкреВрд░реЗ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдмрд┐рдЯ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдореВрд▓реНрдп рд╣реЛрдЧрд╛, рди рдХрд┐ рдЪрд░ рдШреЛрд╖рдгрд╛ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдмрд┐рдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ред
рдкрд░рд┐рдгрд╛рдо рдХреНрдпрд╛ рд╣реИ?
рдлрд┐рд▓рд╣рд╛рд▓, рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкрд░реАрдХреНрд╖рдХ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рд╕рдВрднрд╛рд╡рд┐рдд рдкреВрд░реНрдгрд╛рдВрдХ рдУрд╡рд░рдлреНрд▓реЛ рдХреЛ рдЪреЗрддрд╛рд╡рдиреА рджреЗ рд╕рдХрддрд╛ рд╣реИред рджрд╛рдЧреА рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрд╢реЛрдзрд┐рдд рд╡рд░реНрдЧ, рдЬрд┐рд╕рдореЗрдВ рдЕрднреА рднреА рдмрд╣реБрдд рдХрд╛рдо рдХрд░рдирд╛ рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдУрд╡рд░рдлреНрд▓реЛ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд╕рдПрдордЯреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП, рдЬреЗрдб 3 рдПрд╕рдПрдордЯреА рд╕реЙрд▓реНрд╡рд░ рдЙрдкрдпреБрдХреНрдд рд╣реИ, рдЬрд┐рд╕реЗ 5.0.0 рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдХреНрд▓реИрдВрдЧ рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ ( рдиреЛрдЯреНрд╕ рдЬрд╛рд░реА рдХрд░рдХреЗ)ред рд╕реЙрд▓реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ CLANG_ANALYZER_BUILD_Z3=ON
рдХреЛ CLANG_ANALYZER_BUILD_Z3=ON
рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЬрд╛рдП, рдФрд░ рдЬрдм CSA рдкреНрд▓рдЧ-рдЗрди рдХреЛ рд╕реАрдзреЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, -Xanalyzer -analyzer-constraints=z3
рдЭрдВрдбреЗ рдкреНрд░рд╕рд╛рд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред
рдЧрд┐рдЯрд╣рдм рдкрд░рд┐рдгрд╛рдо рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА
рд╕рдВрджрд░реНрдн:
рд╣рд╛рд╡рд░реНрдб рдПрдоред, рд▓реЗрдмреНрд▓рд╛рдВрдХ рдбреАред, рд╡реАрдЧрд╛ рдЬреЗред "рдж 24 рд╕рд┐рдиреНрд╕ рдСрдлрд╝ рдХрдВрдкреНрдпреВрдЯрд░ рд╕рд┐рдХреНрдпреЛрд░рд┐рдЯреА"
24 рдШрдВрдЯреЗ рдореЗрдВ рдПрдХ рдкрд░реАрдХреНрд╖рдХ рдХреИрд╕реЗ рд▓рд┐рдЦреЗрдВ
рдХреНрд▓реИрдВрдЧ рд╕реНрдЯреИрдЯрд┐рдХ рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░: рдП рдЪреЗрдХрд░ рдбреЗрд╡рд▓рдкрд░ рдЧрд╛рдЗрдб
рд╕реАрдПрд╕рдП рдЪреЗрдХрд░ рд╡рд┐рдХрд╛рд╕ рдореИрдиреБрдЕрд▓
рдбрд┐рдЯреНрдЬрд╝ рдбрдмреНрд▓реНрдпреВ рдПрдЯ рдЕрд▓ред C / C ++ рдореЗрдВ рдкреВрд░реНрдгрд╛рдВрдХ рдУрд╡рд░рдлрд╝реНрд▓реЛ рдХреЛ рд╕рдордЭрдирд╛