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

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


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

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

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

рдЖрдЗрдП рдЙрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦреЗрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рддреБрд░рдВрдд рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддрд╛ рдерд╛:

рдкрд╣рд▓рд╛ рдЙрджрд╛рд╣рд░рдг 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-Studio рддреБрд░рдВрдд рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХрд░реЗрдЧрд╛:

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 рдлрд╝рдВрдХреНрд╢рди рдХреЛ рджреВрд╕рд░реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдбреАрд░реЗрдХреНрд╢рди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рд╣реЛрдЧрд╛ред рдкрд░рд┐рдгрд╛рдо рджреБ: рдЦрдж рдФрд░ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╣реИ ред

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

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

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

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

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдмрдЧ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рдордп рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдиреЗ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд╕рдордп рдФрд░ рдирд╕реЛрдВ рдХреЛ рдмрдЪрд╛рдпрд╛ рд╣реЛрдЧрд╛ :)ред

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

рдХреЛрдб рддрдп рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ:

 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 " рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдЙрдореНрдореАрдж рдереА рдХрд┐ рдкрд╣рд▓реЗ vbit_location рдкреЙрдЗрдВрдЯрд░ рджреНрд╡рд╛рд░рд╛ рд╕рдВрджрд░реНрднрд┐рдд рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЗ рдорд╛рди рдореЗрдВ 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

рдореИрдВрдиреЗ " рднреМрддрд┐рдХ_рджрд╛рджреНрд░_рдд рдкрд╛ = = (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 рдЙрдЪреНрдЪрддрдо рдмрд┐рдЯреНрд╕ рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдиреЙрдирдмреЗрд▓ рдорд╛рди рд╣реЛрдЧрд╛ред рдЗрд╕ рдЪрд░ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдиреЗ рдХреЗ рдмрд╛рдж, рдпреЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдЯ рдЦреЛ рдЬрд╛рдПрдВрдЧреЗ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк x рдореЗрдВ рдЧрд▓рдд рдЬрд╛рдирдХрд╛рд░реА рд▓рд┐рдЦреА рдЧрдИ рд╣реИ ред

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

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

рдЗрд╕ рддрд░рд╣, рдПрдХ рд╕рд╣реА рдорд╛рди рд╣рдореЗрд╢рд╛ рдкрд╛ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛ ред

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



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

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


All Articles