рд╕реНрдерд┐рд░ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдирд╣реАрдВ рдорд┐рд▓реА рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

рд╕рдордп-рд╕рдордп рдкрд░, рдУрдкрди рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдкрд░ рд╣рдорд╛рд░реЗ рд▓реЗрдЦреЛрдВ рдХреЗ рдкрд╛рдардХ рдзреНрдпрд╛рди рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕реНрдЯреИрдЯрд┐рдХ рдХреЛрдб рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рдкреНрд░рддрд┐рд╢рдд рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ рдЬреЛ рдорд╣рддреНрд╡рд╣реАрди рд╣реИрдВ рдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реИред рдореИрдиреНрдпреБрдЕрд▓ рдкрд░реАрдХреНрд╖рдг, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдореАрдХреНрд╖рд╛ рдФрд░ рдЕрдиреНрдп рдорд╣рдВрдЧреА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХреАрдбрд╝реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рддрдп рдХрд┐рдП рдЧрдП рд╣реИрдВред рдЗрд╕реА рд╕рдордп, рдЗрдирдореЗрдВ рд╕реЗ рдХрдИ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рдЪрд░рдг рдореЗрдВ рднреА рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ рдФрд░ рд╕рдордп, рдкреНрд░рддрд┐рд╖реНрдард╛, рдзрди рдХреЗ рдиреНрдпреВрдирддрдо рдиреБрдХрд╕рд╛рди рдХреЗ рд╕рд╛рде рд╕рд╣реА рд╣реЛ рдЬрд╛рддреА рд╣реИрдВред рдпрд╣ рдЖрд▓реЗрдЦ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ рдЬреЛ рдХрд┐ рдЕрднреА рддрдп рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ рдпрджрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓реЗрдЦрдХ рд╕реНрдерд┐рд░ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред


рд╡рд┐рдЪрд╛рд░ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдЪрд▓реЛ рдкреБрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП GitHub рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдЯрд┐рдкреНрдкрдгреА рд╕реЗ рд╕рдВрдХреЗрдд рдорд┐рд▓рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмрдЧ рдлрд┐рдХреНрд╕ рд╣реИред рдФрд░ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕реНрдерд┐рд░ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред рдпрджрд┐ рд╕рд╣реА рддреНрд░реБрдЯрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рджреНрд╡рд╛рд░рд╛ рдкрд╛рдИ рдЬрд╛рддреА рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рдЪрд░рдг рдореЗрдВ рднреА рдЗрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рддреНрд░реБрдЯрд┐ рддрдп рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдЙрддрдирд╛ рд╕рд╕реНрддрд╛ рд╣реИред

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, GitHub рдиреЗ рд╣рдореЗрдВ рдирд┐рд░рд╛рд╢ рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдПрдХ рд╢рд╛рдирджрд╛рд░ рд╕реНрдорд╛рд░реНрдЯ рд▓реЗрдЦ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреАред GitHub рдореЗрдВ рд╕реНрд╡рдпрдВ рдПрдХ рдЧрдбрд╝рдмрдбрд╝ (рдпрд╛ рд╕реБрд╡рд┐рдзрд╛) рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдХреБрдЫ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд▓рд┐рдЦреА рдЧрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдкреБрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдареАрдХ рд╣реИ, рдпрд╛ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ "рдЗрд╕реЗ рдХреИрд╕реЗ рдкрдХрд╛рдирд╛ рд╣реИред" рднрд▓реЗ рд╣реА рдореИрдВ рдЖрдкрдХреЛ C ++, C # рдпрд╛ Java рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реВрдВ, рд▓реЗрдХрд┐рди рдкрд░рд┐рдгрд╛рдо рд╕рднреА рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ PHP, Python, JavaScript рдФрд░ рдЗрддрдиреЗ рдкрд░ред рдирддреАрдЬрддрди, рдЙрдкрдпреБрдХреНрдд рдорд╛рдорд▓реЛрдВ рдХреА рддрд▓рд╛рд╢ рдПрдХ рдмреЗрд╣рдж рдердХрд╛рдК рдХрд╛рдо рдерд╛, рдФрд░ рдореИрдВ рдЦреБрдж рдХреЛ рд╕рд┐рд░реНрдл рдХреБрдЫ рдЙрджрд╛рд╣рд░рдгреЛрдВ рддрдХ рд╕реАрдорд┐рдд рд░рдЦреВрдВрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡реЗ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рд╕реНрдерд┐рд░ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЯреВрд▓ рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВред

рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рддреНрд░реБрдЯрд┐ рдЬрд▓реНрджреА рдкрдХрдбрд╝реА рдЧрдИ? рдЗрд╕рдХрд╛ рдЙрддреНрддрд░ рд╕рд░рд▓ рд╣реИ: рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдЗрд╕рдХреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдлрд┐рд░ рджреЛрд╖рдкреВрд░реНрдг рдХреЛрдб рдХреЛ рдвреВрдВрдврдирд╛ рдФрд░ рдареАрдХ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдЖрдЗрдП рдЙрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦреЗрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рддреБрд░рдВрдд рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реИ:

рдкрд╣рд▓рд╛ рдЙрджрд╛рд╣рд░рдг SatisfactoryModLoader рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рддреНрд░реБрдЯрд┐ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

// gets an API function from the mod handler SML_API PVOID getAPIFunction(std::string name) { bool found = false; for (Registry reg : modHandler.APIRegistry) { if (reg.name == name) { found = true; } } if (!found) { std::string msg = ...; MessageBoxA(NULL, msg.c_str(), "SatisfactoryModLoader Fatal Error", MB_ICONERROR); abort(); } } 

рдЗрд╕ рдХреЛрдб рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдереА рдХрд┐ PVS- рд╕реНрдЯреВрдбрд┐рдпреЛ рддреБрд░рдВрдд рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рджреЗрдЧрд╛:

V591 рдЧреИрд░-рд╢реВрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХ рдорд╛рди рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред ModFunctions.cpp 44

рдЙрдкрд░реЛрдХреНрдд рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╡рд╛рдкрд╕реА рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдорд╛рди рд▓реМрдЯрд╛рдПрдЧрд╛ред рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдиреЗ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдЙрд╕реЗ рдЕрдкрдиреЗ рджрдо рдкрд░ рддреНрд░реБрдЯрд┐ рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреА рдереАред рд╕рдВрдкрд╛рджрди рдХреЗ рдмрд╛рдж рдХрд╛рд░реНрдп:

 // gets an API function from the mod handler SML_API PVOID getAPIFunction(std::string name) { bool found = false; PVOID func = NULL; for (Registry reg : modHandler.APIRegistry) { if (reg.name == name) { func = reg.func; found = true; } } if (!found) { std::string msg = ...; MessageBoxA(NULL, msg.c_str(), "SatisfactoryModLoader Fatal Error", MB_ICONERROR); abort(); } return func; } 

рдЙрддреНрд╕реБрдХрддрд╛ рд╕реЗ, рдХрдорд┐рдЯ рдореЗрдВ, рд▓реЗрдЦрдХ рдиреЗ рдмрдЧ рдХреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрддрд╛рдпрд╛: " рдлрд┐рдХреНрд╕реНрдб рдХреНрд░рд┐рдЯрд┐рдХрд▓ рдмрдЧ рдЬрд╣рд╛рдВ рдПрдкреАрдЖрдИ рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ "ред

Mc6809 рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЗрддрд┐рд╣рд╛рд╕ рд╕реЗ рджреВрд╕рд░реА рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛рдУрдВ рдореЗрдВ , рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд┐рдП рдЧрдП рдереЗ:

 void mc6809dis_direct( mc6809dis__t *const dis, mc6809__t *const cpu, const char *const op, const bool b16 ) { assert(dis != NULL); assert(op != NULL); addr.b[MSB] = cpu->dp; addr.b[LSB] = (*dis->read)(dis, dis->next++); ... if (cpu != NULL) { ... } } 

рд▓реЗрдЦрдХ рдиреЗ рдХреЗрд╡рд▓ рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЛ рд╕реБрдзрд╛рд░рд╛ред рдЙрд╕рдиреЗ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреА рдЬрдЧрд╣ рд▓реЗ рд▓реА

 addr.b[MSB] = cpu->dp; 

рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдкрд░

 addr.b[MSB] = cpu != NULL ? cpu->dp : 0; 

рдХреЛрдб рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдирд▓ рдкреЙрдЗрдВрдЯрд░ рдХреА рд╕рдорд╛рдирддрд╛ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕реАрдкреАрдпреВ рдЪреЗрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрджрд┐ рдпрд╣ рдЕрдЪрд╛рдирдХ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдПрдХ null рдкреЙрдЗрдВрдЯрд░ рдХреЛ рджреВрд╕рд░реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди mc6809dis_direct рдкрд░ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмреЙрдбреА рдореЗрдВ рдбреАрд░реЗрдлрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдкрд░рд┐рдгрд╛рдо рджреБ: рдЦрдж рдФрд░ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╣реИ ред

рдирд▓ рдкреЙрдЗрдВрдЯрд░ рдбреЗрд░реЗрдлреЗрд░рд┐рдВрдЧ рд╕рдмрд╕реЗ рдЖрдо рдкреИрдЯрд░реНрди рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ: тАЬрдпрд╣ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИред рдареАрдХ рд╣реИ, рд╡рд╣ рдХреЛрдб рдореЗрдВ рд░рд╣рддреА рд╣реИ рдФрд░ рд░рд╣рддреА рд╣реИ, рдФрд░ рдпрджрд┐ рдбреЗрд░реЗрдлреЗрд░рд┐рдВрдЧ рд╣реЛрддреА рд╣реИ, рддреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЪреБрдкрдЪрд╛рдк рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдпрд╣ рд╕рдм рд╣реЛ рдЬрд╛рдПрдЧрд╛ред тАЭ рд╕реА ++ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╕реЗ рдпрд╣ рд╕реБрдирдирд╛ рдЕрдЬреАрдм рдФрд░ рджреБрдЦрдж рд╣реИ, рд▓реЗрдХрд┐рди рдЬреАрд╡рди рдЬреАрд╡рди рд╣реИред

рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдбреЗрд░реЗрдлреНрд░реЗрдВрд╕рд┐рдВрдЧ рдЕрднреА рднреА рдмрдЧ рдореЗрдВ рдмрджрд▓ рдЧрдП рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдкреНрд░рддрд┐рдмрджреНрдз рд╣реЗрдбрд░ рд╣рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИ: " рдмрдЧ рдлрд┐рдХреНрд╕ --- NULL рдбреЗрд░реЗрдлреЗрд░реЗрдВрд╕ "ред

рдпрджрд┐ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдбреЗрд╡рд▓рдкрд░ рдиреЗ PVS-Studio рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдЕрдкрдиреЗ рдХреЛрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдФрд░ рдврд╛рдИ рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ (рдЬреЛ рдХрд┐ рддреНрд░реБрдЯрд┐ рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рдмрд╛рдж рдХрд┐рддрдирд╛ рдмреАрдд рдЪреБрдХрд╛ рд╣реИ):

N5ptr рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ V595 'cpu' рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 1814, 1821. mc6809dis.c 1814

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рддреНрд░реБрдЯрд┐ рдХреЛ рдЗрд╕рдХреЗ рд╕реНрд╡рд░реВрдк рдХреЗ рд╕рдордп рднреА рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рд╕рдордп рдХреА рдмрдЪрдд рдХрд░реЗрдЧрд╛ рдФрд░ рд╕рдВрднрд╡рддрдГ, рдбреЗрд╡рд▓рдкрд░ рдХреА рдирд╕реЛрдВ рдХреЛ :)ред

рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рд╕рдВрдкрд╛рджрди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг libmorton рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдорд┐рд▓рд╛ред

рд╕рд╣реА рдХреЛрдб:

 template<typename morton> inline bool findFirstSetBitZeroIdx(const morton x, unsigned long* firstbit_location) { #if _MSC_VER && !_WIN64 // 32 BIT on 32 BIT if (sizeof(morton) <= 4) { return _BitScanReverse(firstbit_location, x) != 0; } // 64 BIT on 32 BIT else { *firstbit_location = 0; if (_BitScanReverse(firstbit_location, (x >> 32))) { // check first part firstbit_location += 32; return true; } return _BitScanReverse(firstbit_location, (x & 0xFFFFFFFF)) != 0; } #elif _MSC_VER && _WIN64 .... #elif __GNUC__ .... #endif } 

рдЕрдкрдиреЗ рд╕рдВрдкрд╛рджрди рдореЗрдВ, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ " * рдлрд░реНрд╕реНрдЯрдмрд┐рдЯ_рд▓реЛрдХреЗрд╢рди + 32 " рдХреЗ рд╕рд╛рде " рдлрд░реНрд╕реНрдЯрдмрд┐рдЯ_рд▓реЛрдХреЗрд╢рди + = 32 " рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ 32 рдирдВрдмрд░ рдХреЛ рд╡реИрд░рд┐рдПрдмрд▓ рдХреЗ рдорд╛рди рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рдлрд░реНрд╕реНрдЯрдмрд┐рдЯ_рд▓реЛрдХреЗрд╢рди рдкреЙрдЗрдВрдЯрд░ рдмрд╛рдЙрдВрдб рд╣реИ , рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╕реАрдзреЗ рдкреЙрдЗрдВрдЯрд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред рд╕реВрдЪрдХ рдХрд╛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдореВрд▓реНрдп рдХрд╣реАрдВ рдФрд░ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдЪрд░ рдХрд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд рдореВрд▓реНрдп рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рд╣рд╛ред

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЗрд╕ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХрд░реЗрдЧрд╛:

V1001 'Firstbit_location' рдЪрд░ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрдд рддрдХ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред morton_common.h 22

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕рдВрд╢реЛрдзрд┐рдд, рд▓реЗрдХрд┐рди рдЖрдЧреЗ рдЕрдкреНрд░рдпреБрдХреНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рдХреНрдпрд╛ рднрдпрд╛рдирдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? V1001 рдХреЗ рдирд┐рджрд╛рди рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рджрд┐рдЦрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЦрддрд░рдирд╛рдХ рдХреАрдбрд╝реЗ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдирд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдЙрд╕реЗ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рддреНрд░реБрдЯрд┐ рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛ рдЬрд┐рд╕рдиреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рддрд░реНрдХ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдпрд╣ рддреНрд░реБрдЯрд┐ рдвреВрдВрдврдирд╛ рдЗрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рдерд╛! рди рдХреЗрд╡рд▓ рд╡рд╣ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдереА, рдЙрд╕реА рдХреНрд╖рдг рд╕реЗ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдИ рдЧрдИ рдереА, рд╡рд╣ рдЖрд╕рдиреНрди рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдХрдИ рд╕рдВрдкрд╛рджрди рд╕реЗ рднреА рдмрдЪ рдЧрдИ рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ 3 ( ! ) рд╡рд░реНрд╖реЛрдВ рддрдХ рдореМрдЬреВрдж рд░рд╣реАред рдЗрд╕ рдмрд╛рд░, рдХрд╛рд░реНрдпрдХреНрд░рдо рддрд░реНрдХ рдЯреВрдЯ рдЧрдпрд╛ рдерд╛, рдФрд░ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рд╡реИрд╕рд╛ рдирд╣реАрдВ рд╣реБрдЖ рдЬреИрд╕рд╛ рдХрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЙрдореНрдореАрдж рдереАред рдпрджрд┐ рд╡реЗ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рддреНрд░реБрдЯрд┐ рдмрд╣реБрдд рдкрд╣рд▓реЗ рд╣реА рдкрддрд╛ рдЪрд▓ рдЬрд╛рддреА рдереАред

рдЕрдВрдд рдореЗрдВ, рдПрдХ рдФрд░ рд╕реБрдВрджрд░ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдЬрдм рдореИрдВ GitHub рдкрд░ рдмрдЧ рдлрд┐рдХреНрд╕ рдПрдХрддреНрд░ рдХрд░ рд░рд╣рд╛ рдерд╛, рддреЛ рдореБрдЭреЗ рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдХрдИ рдмрд╛рд░ рдПрдХ рдлрд┐рдХреНрд╕ рдорд┐рд▓рд╛ред рдмрдЧ рдпрд╣рд╛рдБ рддрдп:

 int kvm_arch_prepare_memory_region(...) { ... do { struct vm_area_struct *vma = find_vma(current->mm, hva); hva_t vm_start, vm_end; ... if (vma->vm_flags & VM_PFNMAP) { ... phys_addr_t pa = (vma->vm_pgoff << PAGE_SHIFT) + vm_start - vma->vm_start; ... } ... } while (hva < reg_end); ... } 

PVS-Studio рдиреЗ рдХреЛрдб рдХреЗ рдЗрд╕ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХреА:

V629 'vma-> vm_pgoff << 12' рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред 64-рдмрд┐рдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рдж рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд╕рд╛рде 32-рдмрд┐рдЯ рдореВрд▓реНрдп рдХрд╛ рдмрд┐рдЯ рд╢рд┐рдлреНрдЯрд┐рдВрдЧред mmu.c 1795

рдореИрдВрдиреЗ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ " physical_addr_t pa = (vma-> vm_pgoff << PAGE_SHIFT) + vm_start - vma-> vm_start; " рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд рдЪрд░ рдШреЛрд╖рдгрд╛рдУрдВ рдХреЛ рджреЗрдЦрд╛ рдФрд░ рдкрд╛рдпрд╛ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдирд┐рдореНрди рд╕рд┐рдВрдереЗрдЯрд┐рдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рдорд╛рди рд╣реИ:

 void foo(unsigned long a, unsigned long b) { unsigned long long x = (a << 12) + b; } 

рдпрджрд┐ 32-рдмрд┐рдЯ рдЪрд░ рдХрд╛ рдорд╛рди 0xFFFFF рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ, рддреЛ 12 рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдЯреНрд╕ рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдЧреИрд░- рдЕрдХреНрд╖реАрдп рдорд╛рди рд╣реЛрдЧрд╛ред рдЗрд╕ рдЪрд░ рдореЗрдВ рдмрд╛рдИрдВ рдкрд╛рд░реА рдСрдкрд░реЗрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпреЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдЯ рдЦреЛ рдЬрд╛рдПрдВрдЧреЗ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЧрд▓рдд рдЬрд╛рдирдХрд╛рд░реА рдПрдХреНрд╕ рдХреЛ рд▓рд┐рдЦреА рдЬрд╛рдПрдЧреАред

рдЙрдЪреНрдЪ рдмрд┐рдЯреНрд╕ рдХреЗ рдиреБрдХрд╕рд╛рди рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЯрд╛рдЗрдк рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рд╢рд┐рдлреНрдЯ рдСрдкрд░реЗрд╢рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

 pa = (phys_addr_t)vma->vm_pgoff << PAGE_SHIFT; pa += vm_start - vma->vm_start; 

рддрдм pa рд╣рдореЗрд╢рд╛ рд╕рд╣реА рдорд╛рди рд▓рд┐рдЦреЗрдЧрд╛ред

рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдмрдЧ, рд▓реЗрдЦ рд╕реЗ рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреА рддрд░рд╣, рдпрд╣ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд┐рдХрд▓рд╛, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддрд┐рдмрджреНрдз рд▓реЗрдЦрдХ рдиреЗ рдЕрдкрдиреА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдЕрд▓рдЧ рд╕реЗ рд▓рд┐рдЦрд╛ рдерд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рддреНрд░реБрдЯрд┐ рд╕рд┐рд░реНрдл рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдорд┐рд▓реАред рддреНрд░рд╛рд╕рджреА рдХреЗ рдкреИрдорд╛рдиреЗ рдХреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд░рд╛рд╣рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ GitHub рдкрд░ рдЗрд╕ рдмрдЧрдлрд┐рдХреНрд╕ рдХреА рдЦреЛрдЬ рдХрд░рддреЗ рд╕рдордп рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рджреЗрдЦрдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВред рдбрд░рд╛рд╡рдирд╛, рд╣реИ рдирд╛?



рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рд╕реНрдерд┐рд░ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд▓рд┐рдпрд╛ред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЕрдЪреНрдЫрд╛ рд▓рдЧрд╛ рд╣реЛрдЧрд╛ред рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕реНрдЯреИрдЯрд┐рдХ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рд▓реЗрдЦрди рдХреЗ рд╕рдордп, рдЗрд╕рдиреЗ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рддреНрд░реБрдЯрд┐ рдкреИрдЯрд░реНрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ 700 рдиреИрджрд╛рдирд┐рдХ тАЛтАЛрдирд┐рдпрдореЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИред C, C ++, C # рдФрд░ Java рд╕рдорд░реНрдерд┐рдд рд╣реИрдВред



рдпрджрд┐ рдЖрдк рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдЕрдВрдЧреНрд░реЗрдЬреА рдмреЛрд▓рдиреЗ рд╡рд╛рд▓реЗ рджрд░реНрд╢рдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: рдЬреЙрд░реНрдЬ рдЧреНрд░рд┐рдмрдХреЛрд╡ред рд╕реНрдерд┐рд░ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдирд╣реАрдВ рдкрд╛рдИ рдЬрд╛рддреА рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

Source: https://habr.com/ru/post/hi460119/


All Articles