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

рдкрд╣рд▓реА рдореБрд╢реНрдХрд┐рд▓реЗрдВ
рдЙрд╕ рдкрд▓ рдореЗрдВ рднреА, рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдХрдо рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕реА # рдХреЛрдб рд╕реЗ рдХреЛрдбрд╛рдВрддрд░рдХ рдХреЛрдб рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдЙрдкрдХрд░рдг рд╣реИрдВ - рдпрд╣ рднрд╛рд╖рд╛ рдХреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реИ: рд╕реНрдореГрддрд┐ рд╕реБрд░рдХреНрд╖рд╛ред рдореБрджреНрджреЗ рдХреЗ рд╕рддрд╣реА рдЕрдзреНрдпрдпрди рдХреЗ рдмрд╛рдж (рдЬреЛ рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХреВрдмрдбрд╝ рдХреА рдкреБрд╖реНрдЯрд┐ рдХреА - "рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░" рдРрд╕реА рдХреЛрдИ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ), рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рд╡реИрдЪрд╛рд░рд┐рдХ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рд╡рд┐рд╢реБрджреНрдз рддрдХрдиреАрдХреА рд╕рдорд╕реНрдпрд╛ рд╣реИ: рд╕реА #, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдПрдХ рдордзреНрдпрд╡рд░реНрддреА рдмрд╛рдпреЛрдЯреЗрдХ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдЖрдЧреЗ CLR рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рджреНрд╡рд╛рд░рд╛ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЧрдИ рд╣реИред рдФрд░ рдпрд╣ рдареАрдХ рдпрд╣рд╛рдБ рд╣реИ рдХрд┐ рд╣рдо рдмрд╣реБрдд рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ: рдПрдХ рддрд░рдл, рд╕рдВрдХрд▓рдХ (рдЗрд╕рдХреЗ рдмрд╛рдж рдореИрдВ рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рд╕реЗ рд░реЛрдЬрд▓рд┐рди рдХрд╛ рдорддрд▓рдм рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реА # рд╕рдВрдХрд▓рдХ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдорд╛рдирдХ рд╣реИ), рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдкрд╣рдЪрд╛рди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдЕрд╕реЗрдВрдмрд▓рд░ рдЖрджреЗрд╢реЛрдВ рдХреЛ рдЯреЗрдХреНрд╕реНрдЯ рд╡реНрдпреВ рд╕реЗ рдмрд╛рдЗрдирд░реА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░реЗрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдорд╢реАрди рдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рд╕реАрдзреЗ рдЙрдирдХреЗ рдмрд╛рдЗрдирд░реА рдлреЙрд░реНрдо рдореЗрдВ рдПрдХ рдЗрдВрд╕рд░реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рджреВрд╕рд░реА рддрд░рдл, рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХрд╛ рдЕрдкрдирд╛ рдмрд╛рдпреЛрдЯреЗрдХ рд╣реИ рдФрд░ рдЗрд╕реЗ рдкрд╣рдЪрд╛рди рдирд╣реАрдВ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдмрдВрдбрд▓ рдЖрджреЗрд╢реЛрдВ рд╣рдо рдЙрд╕реЗ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд╕рдорд╛рдзрд╛рди рд╕реНрдкрд╖реНрдЯ рд╣реИ - рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рддреЗ рд╣реБрдП, рдкреНрд░реЛрд╕реЗрд╕рд░ рджреНрд╡рд╛рд░рд╛ рдмрд╛рдЗрдирд░реА рдЗрдВрд╕рд░реНрдЯ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рд╕рд░рд▓ рдмрд╛рдд рдЬреЛ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрддреА рд╣реИ рд╡рд╣ рд╣реИ рдмрд╛рдЗрдирд░реА рдХреЛрдб рдХреЛ рдмрд╛рдЗрдЯреНрд╕ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рдирд╛, рдЬрд┐рд╕ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕рд╣реА рд╕рдордп рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣рд╛рдБ рд╕реЗ рдкрд╣рд▓рд╛ рдХрд╛рдо рдХрд░рдШрд╛: рдЖрдкрдХреЛ рдПрдХ рдордирдорд╛рдиреЗ рд╕реНрдореГрддрд┐ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдирд┐рд╣рд┐рдд рдирд┐рдпрдВрддреНрд░рдг рдХреЛ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИред
рдкрд╣рд▓рд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк: "рдХреЙрд▓рд┐рдВрдЧ" рдПрдХ рд╕рд░рдгреА
рдпрд╣ рдХрд╛рд░реНрдп рд╕рдВрднрд╡рддрдГ рдЖрд╡реЗрд╖рдг рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЧрдВрднреАрд░ рдмрд╛рдзрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдПрд░реЗ рдХреЛ рдкреЙрдЗрдВрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднрд╛рд╖рд╛ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рд▓реЗрдХрд┐рди C # рджреБрдирд┐рдпрд╛ рдореЗрдВ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЗрд╡рд▓ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдореМрдЬреВрдж рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╕рдВрднрд╡ рд╣реИ, рдХрд╣рддреЗ рд╣реИрдВ, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рддрд╛рдХрд┐ рдЖрдк рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рдХреЙрд▓ рдХрд░ рд╕рдХреЗрдВ (рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдореБрдЭреЗ рдкрддрд╛ рдирд╣реАрдВ рдХреИрд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП)ред
рд╕реМрднрд╛рдЧреНрдп рд╕реЗ (рдпрд╛ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ), рдЪрдВрджреНрд░рдорд╛ рдХреЗ рдиреАрдЪреЗ рдХреБрдЫ рднреА рдирдпрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ "рд╕реА #" рдФрд░ "рдЕрд╕реЗрдВрдмрд▓рд░ рдЖрд╡реЗрд╖рдг" рд╢рдмреНрджреЛрдВ рдХреЗ рд▓рд┐рдП рдпреИрдВрдбреЗрдХреНрд╕ рдореЗрдВ рдПрдХ рддреНрд╡рд░рд┐рдд рдЦреЛрдЬ рдиреЗ рдореБрдЭреЗ
рдкрддреНрд░рд┐рдХрд╛ рдХреЗ
рджрд┐рд╕рдВрдмрд░ 2007 рдХреЗ рдЕрдВрдХ рдореЗрдВ рдПрдХ рд▓реЗрдЦ
]] [рдЕрдХрд░] рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ред рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рд╕рдорд╛рд░реЛрд╣ рдХреЛ рд╡рд╣рд╛рдВ рд╕реЗ рдХреЙрдкреА рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕реЗ рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛, рдореБрдЭреЗ рдорд┐рд▓ рдЧрдпрд╛
[DllImport("kernel32.dll")] extern bool VirtualProtect(int* lpAddress, uint dwSize, uint flNewProtect, uint* lpflOldProtect); public void* InvokeAsm(void* firstAsmArg, void* secondAsmArg, byte[] code) { int i = 0; int* p = &i; p += 0x14 / 4 + 1; i = *p; fixed (byte* b = code) { *p = (int)b; uint prev; VirtualProtect((int*)b, (uint)code.Length, 0x40, &prev); } return (void*)i; }
рдЗрд╕ рдХреЛрдб рдХрд╛ рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рдмрд╛рдЗрдЯ рд╕рд░рдгреА рдХреЗ рдкрддреЗ рдХреЗ рд╕рд╛рде рд╕реНрдЯреИрдХ рдкрд░
InvokeAsm()
рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд░рд┐рдЯрд░реНрди рдПрдбреНрд░реЗрд╕ рдХреЛ рдмрджрд▓рдирд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдЖрдк рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдлрд┐рд░, рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рдмрд╛рдж, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдорд╛рд░реЗ рдмрд╛рдЗрдирд░реА рдХреЛрдб рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рд╣рдо рдЙрд╕ рдЬрд╛рджреВ рд╕реЗ
InvokeAsm()
рдЬреЛ
InvokeAsm()
рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ
InvokeAsm()
рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдПрдХ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╕реНрдЯреИрдХ рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рдлрд┐рд░ рд╣рдореЗрдВ рдЗрд╕рдХрд╛ рдкрддрд╛ рдорд┐рд▓рддрд╛ рд╣реИ (рдЬрд┐рд╕рд╕реЗ рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдХрд╛ рдкрддрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ)ред рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдЗрд╕реЗ рдбрд┐рдмрдЧрд░ рдореЗрдВ рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реБрдП рджрд░реНрдж рдирд┐рд╡рд╛рд░рдХ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЬрд╛рджреВ рдХреА рд╕реНрдерд┐рд░рд╛рдВрдХ рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЬреЛ рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╡рд╛рдкрд╕реА рдкрддреЗ рдХреА рднрд░рдкрд╛рдИ рдХрд░рддрд╛ рд╣реИ, рд╡рд╛рдкрд╕реА рдкрддреЗ рдХреЛ рдмрдЪрд╛рдиреЗ рдФрд░ рд╣рдорд╛рд░реЗ рдмрд╛рдЗрдЯ рд╕рд░рдгреА рдХрд╛ рдкрддрд╛ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрдЬрд╛рдпред рд╡рд╛рдкрд╕реА рдкрддреЗ рдХреЛ рдмрдЪрд╛рдиреЗ рдХрд╛ рдкрд╡рд┐рддреНрд░ рдЕрд░реНрде рд╕реНрдкрд╖реНрдЯ рд╣реИ - рд╣рдореЗрдВ рдЕрдкрдиреЗ рд╕рдореНрдорд┐рд▓рди рдХреЗ рдмрд╛рдж рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдпрд╣ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЗрд╕рдХреЗ рдмрд╛рдж рдирд┐рдпрдВрддреНрд░рдг рдХрд╣рд╛рдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж рдХрд░реНрдиреЗрд▓ 32.dll рд▓рд╛рдЗрдмреНрд░реЗрд░реА -
VirtualProtect()
рд╕реЗ WinAPI рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдЖрддрд╛ рд╣реИред рдпрд╣ рдореЗрдореЛрд░реА рдкреЗрдЬ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рдЗрдиреНрд╕рд░реНрдЯ рдХреЛрдб рд╕реНрдерд┐рдд рд╣реИред рдмреЗрд╢рдХ, рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рдбреЗрдЯрд╛ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдореЗрдореЛрд░реА рдкреЗрдЬ рдиреЗ рдПрдХреНрд╕реЗрд╕ рдкрдврд╝рд╛ рдФрд░ рд▓рд┐рдЦрд╛ рд╣реИред рд╣рдореЗрдВ рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рдЬреЛрдбрд╝рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдВрдд рдореЗрдВ, рд╣рдо рд╕рдВрдЧреНрд░рд╣реАрдд рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд░рд┐рдЯрд░реНрди рдкрддрд╛ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред рдмреЗрд╢рдХ, рдпрд╣ рдкрддрд╛ рдЙрд╕ рдХреЛрдб рдХреЛ рдирд╣реАрдВ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрд┐рд╕реЗ
InvokeAsm()
рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐
return (void*)i;
рддреБрд░рдВрдд рдмрд╛рдж рдирд┐рд╖реНрдкрд╛рджрди
return (void*)i;
рдбрд╛рд▓рдиреЗ рдореЗрдВ "рд╡рд┐рдлрд▓"ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХреЙрд▓рд┐рдВрдЧ рдХрдиреНрд╡реЗрдВрд╢рди (рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╕рд╛рде рдЕрдиреБрдХреВрд▓рди рдФрд░ рд╕рдХреНрд╖рдо рдХреЗ рд╕рд╛рде рдлрд╛рд╕реНрдЯрдХреЙрд▓) рдХрд╛ рдЕрд░реНрде рд╣реИ рдИрдПрдПрдХреНрд╕ рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореВрд▓реНрдп рд╡рд╛рдкрд╕ рдХрд░рдирд╛, рдЕрд░реНрдерд╛рддред рдбрд╛рд▓рдиреЗ рд╕реЗ рд▓реМрдЯрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рджреЛ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
push eax
(рдХреЛрдб 0x50) рдФрд░ рд░рд┐рдЯ (рдХреЛрдб 0xC3)ред
рд╡рд┐рд╕реНрддрд╛рд░рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рд╣рдо x86 (рдпрд╛ рдмрд▓реНрдХрд┐, IA-32) рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ - рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдЙрд╕ рд╕рдордп рдореИрдВ рдХрдо рд╕реЗ рдХрдо рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдерд╛, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, x86-64ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдирд┐рдпрдВрддреНрд░рдг рд╣рд╕реНрддрд╛рдВрддрд░рдг рд╡рд┐рдзрд┐ 64-рдмрд┐рдЯ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЕрдВрдд рдореЗрдВ, рдЖрдкрдХреЛ рджреЛ рдЕрдкреНрд░рдпреБрдХреНрдд рддрд░реНрдХреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП:
void* firstAsmArg
рдФрд░
void* secondAsmArg
ред рдЙрдиреНрд╣реЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдЕрд╕реЗрдВрдмрд▓рд░ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпреЗ рддрд░реНрдХ рдпрд╛ рддреЛ рд╕реНрдЯреИрдХ (stdcall) рдкрд░ рдПрдХ рдЬреНрдЮрд╛рдд рд╕реНрдерд╛рди рдкрд░ рд╕реНрдерд┐рдд рд╣реЛрдВрдЧреЗ, рдпрд╛, рдлрд┐рд░ рд╕реЗ, рдЬрд╛рдиреЗ-рдорд╛рдиреЗ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ (Fastcall) рдореЗрдВред
рдЕрдиреБрдХреВрд▓рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛рдЪреВрдВрдХрд┐, рд╕рдВрдХрд▓рдХ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдХреЛрдб рдореЗрдВ рдХреНрдпрд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдпрд╣ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ, рдпрд╣ рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ рдХреБрдЫ рдореМрд▓рд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХреЙрд▓ рдХреЛ рдмрд╛рд╣рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ / рдХреБрдЫ рдЗрдирд▓рд╛рдЗрди рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИ / рдХреБрдЫ "рдЕрдкреНрд░рдпреБрдХреНрдд" рддрд░реНрдХ рдХреЛ рдирд╣реАрдВ рдмрдЪрд╛ рд╕рдХрддрд╛ рд╣реИ / рдХрд┐рд╕реА рддрд░рд╣ рд╣рдорд╛рд░реА рдпреЛрдЬрдирд╛ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред рдпрд╣ [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
рд╡рд┐рд╢реЗрд╖рддрд╛ рджреНрд╡рд╛рд░рд╛ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдРрд╕реА рд╕рд╛рд╡рдзрд╛рдирд┐рдпрд╛рдВ рднреА рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рджреЗрддреА рд╣реИрдВ: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдерд╛рдиреАрдп рдЪрд░ i
, рдЬреЛ рдкреВрд░реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдЬреЛ рдЕрдЪрд╛рдирдХ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддрд╛ рд╣реИ, рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдм рдХреБрдЫ рджрд░реНрдЬ рдХрд░рддрд╛ рд╣реИред ред рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреБрдЫ рдЧрд▓рдд рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдЖрдкрдХреЛ рдЕрдиреБрдХреВрд▓рди рдЕрдХреНрд╖рдо рдХреЗ рд╕рд╛рде рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдпрд╛ рддреЛ рдЗрд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЧреБрдгреЛрдВ рдореЗрдВ рдЕрдХреНрд╖рдо рдХрд░реЗрдВ рдпрд╛ рдбреАрдмрдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ)ред рдирддреАрдЬрддрди, stdcall рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдореИрдВ рдЗрд╕ рдХреЙрд▓рд┐рдВрдЧ рд╕рдореНрдореЗрд▓рди рд╕реЗ рдЖрдЧреЗ рдмрдврд╝реВрдВрдЧрд╛ред
рд╕реБрдзрд╛рд░
рд╕реБрд░рдХреНрд╖рд┐рдд рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ
рдмреЗрд╢рдХ, рдХрд┐рд╕реА рднреА рд╕реБрд░рдХреНрд╖рд╛ рдХрд╛ рдХреЛрдИ рд╕рд╡рд╛рд▓ рдирд╣реАрдВ рд╣реИ (рдЬрд┐рд╕ рдЕрд░реНрде рдореЗрдВ рдпрд╣ рд╢рдмреНрдж C # рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдКрдкрд░ рд╡рд░реНрдгрд┐рдд
InvokeAsm()
рд╡рд┐рдзрд┐ рд╕рдВрдХреЗрдд рдкрд░ рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреЗрд╡рд▓
unsafe
рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдмреНрд▓реЙрдХ рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рд╣рдореЗрд╢рд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ - рдХрдо рд╕реЗ рдХрдо рдЗрд╕реЗ / рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╕реНрд╡рд┐рдЪ (рдпрд╛ рд╡реАрдПрд╕ рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЧреБрдгреЛрдВ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдЪреЗрдХрдорд╛рд░реНрдХ) рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдПрдХ рд╢реЗрд▓ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рддрд░реНрдХрд╕рдВрдЧрдд рд▓рдЧрддрд╛ рд╣реИ рдЬреЛ рдХрдо рд╕реЗ рдХрдо рдЗрдВрдЯрдкреНрд░реЗрдЯ (рд╕рдмрд╕реЗ рдЦрд░рд╛рдм) рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдФрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯрдиреЗ рдХреЗ рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЦреИрд░, рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ, рд╣рдо рд╕рд╛рдорд╛рдиреНрдп рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдФрд░ рдХреНрдпрд╛ рд╣реИ, рдПрдХ рдкреВрдЫрддрд╛ рд╣реИ, рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП? рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ - рдХреБрдЫ рд╣реИред
рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ: рдХреИрд╕реЗ рдПрдХ рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрддрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕рдХрд╛ рдкреНрд░рдХрд╛рд░ рдЕрдЬреНрдЮрд╛рдд рд╣реИ?
T* ptr = &arg
#
T* ptr = &arg
рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдЕрдиреБрдорддрд┐ C # рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдФрд░, рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЗрд╕ рдХрд╛рд░рдг рдХреЛ рд╕рдордЭрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдмрдВрдзрд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдЬрд┐рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рдорд╛рдзрд╛рди
unmanaged
рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдХреЗрд╡рд▓ C # 7.3 рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рдпрд╣ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рддрд╛рд░ рдФрд░ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐
fixed
рдСрдкрд░реЗрдЯрд░ рдЙрдиреНрд╣реЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (рд╣рдо рдкрд╣рд▓реЗ рдХреЗ рд▓рд┐рдП рдкреЙрдЗрдВрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ) рдХреНрд░рдорд╢рдГ рд╡рд░реНрдг рдпрд╛ рд╕рд░рдгреА рддрддреНрд╡)ред рдЦреИрд░, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рд╕рд╣рд┐рдд рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ - рдЪреВрдВрдХрд┐ рд╣рдордиреЗ рднрд╛рд╖рд╛ рдХреЗ рдирд┐рдпрдореЛрдВ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рд╣рдо рдЙрдиреНрд╣реЗрдВ рдЕрдВрдд рддрдХ рдЙрд▓реНрд▓рдВрдШрди рдХрд░реЗрдВрдЧреЗ!
рдХрд┐рд╕реА рдкреНрд░рдмрдВрдзрд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдкреЙрдЗрдВрдЯрд░ рдФрд░ рдкреЙрдЗрдВрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛
рдФрд░ рдлрд┐рд░, рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╡рд┐рдЪрд╛рд░-рд╡рд┐рдорд░реНрд╢ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЕрдВрддрд┐рдо рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рдЦреЛрдЬ рд╢реБрд░реВ рдХрд░ рджреАред рдЗрд╕ рдмрд╛рд░
рд╣реИрдмреЗ рдХреЗ
рд▓реЗрдЦ рдиреЗ рдореЗрд░реА рдорджрдж рдХреАред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЗрд╕рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕рд╣рд╛рдпрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд▓рд┐рдЦрдирд╛ рд╣реИ, рдФрд░ рд╕реА # рдореЗрдВ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рд╕реАрдзреЗ рдЖрдИрдПрд▓ рдореЗрдВ рд╣реИред рдЗрд╕рдХрд╛ рдХрд╛рд░реНрдп рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рд╕реНрдЯреИрдХ рдкрд░ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрджрд░реНрдн) рдХреЛ рдзрдХреНрдХрд╛ рджреЗрдирд╛ рд╣реИ, рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╕реНрдЯреИрдХ рд╕реЗ рдХреБрдЫ рдФрд░ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдирдВрдмрд░ рдпрд╛
IntPtr
ред рд░рд┐рд╡рд░реНрд╕ рдСрд░реНрдбрд░ рдореЗрдВ рд╕рдорд╛рди рдЪрд░рдгреЛрдВ рдХреЛ рдХрд░рдХреЗ, рдЖрдк рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдкреЙрдЗрдВрдЯрд░ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрд╕реЗрдореНрдмрд▓рд░ рдЗрдВрд╕рд░реНрдЯ рд╕реЗ рд▓реМрдЯреЗ) рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рддрд░реАрдХрд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЬреЛ рдХреБрдЫ рднреА рд╣реЛрддрд╛ рд╣реИ рд╡рд╣ рд╕реНрдкрд╖реНрдЯ рдФрд░ рдкрд╛рд░рджрд░реНрд╢реА рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдПрдХ рдорд╛рдЗрдирд╕ рд╣реИ: рдореИрдВ рдЬрд┐рддрдиреА рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдиреА рдХрдо рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдореИрдВрдиреЗ рдореБрдЦреНрдп рдореЗрдВ рдЖрдИрдПрд▓ рдХреЛрдб рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рд╣реИ рдХрд┐ рд╕реА # рдореЗрдВ рд╕реНрдЯрдм рдореЗрдердбреНрд╕ рд▓рд┐рдЦрдирд╛, рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛, рдмрд╛рдЗрдирд░реА рдХреЛ ildasm рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдирд╛, рд╕реНрдЯрдм рдореЗрдердбреНрд╕ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдФрд░ рдЗрд▓реНрдорд╛рд╕ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдПрдХ рд╕рд╛рде рд░рдЦрдирд╛ред рдпреЗ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреНрд░рд┐рдпрд╛рдПрдВ рд╣реИрдВ, рдФрд░ рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдЖрдкрдХреЛ рдХреЛрдб рдореЗрдВ рдХреЛрдИ рднреА рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЖрдкрдХреЛ рд╣рд░ рдмрд╛рд░ рдЙрдиреНрд╣реЗрдВ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ... рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВ рдмрд╣реБрдд рдЬрд▓реНрджреА рдердХ рдЧрдпрд╛, рдФрд░ рдореИрдВрдиреЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рддрд▓рд╛рд╢ рд╢реБрд░реВ рдХрд░ рджреАред
рдмрд╕ рдЙрд╕ рд╕рдордп, рдПрдХ рдЕрджреНрднреБрдд рдкреБрд╕реНрддрдХ рдореЗрд░реЗ рд╣рд╛рдереЛрдВ рдореЗрдВ рдЧрд┐рд░ рдЧрдИ, рдЬрд┐рд╕рдХреА рдмрджреМрд▓рдд рдореИрдВрдиреЗ рдЦреБрдж рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рд╕реАрдЦрд╛ - "рдЬреЗрдПрд▓рдЖрд░ рд░рд┐рдХреНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рд╕реАрдПрд▓рдЖрд░ # рд╕реАрдПрд▓рдЖрд░"ред рдЗрд╕рдореЗрдВ, рдмреАрд╕рд╡реЗрдВ рдЕрдзреНрдпрд╛рдп рдХреЗ рдЖрд╕рдкрд╛рд╕, рд╣рдордиреЗ
GCHandle
рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА, рдЬрд┐рд╕рдореЗрдВ рдПрдХ
Alloc()
рдкрджреНрдзрддрд┐ рд╣реИ рдЬреЛ рдПрдХ рд╡рд╕реНрддреБ рдФрд░ рдПрдХ
GCHandleType
рдПрдиреНрдпреВрдорд░реЗрд╢рди
GCHandleType
рдХреЛ
GCHandleType
ред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рд╡рд╛рдВрдЫрд┐рдд рд╡рд╕реНрддреБ рдФрд░
GCHandle.Pinned
рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рддреЛ, рдЖрдк рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдкрддрд╛ рд╕реНрдореГрддрд┐ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛,
GCHandle.Free()
рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ
GCHandle.Free()
рдСрдмреНрдЬреЗрдХреНрдЯ рддрдп рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░ рдХреЗ рдкреНрд░рднрд╛рд╡ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрд░рдХреНрд╖рд┐рддред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ,
GCHandle
рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ "рдкреЙрдЗрдВрдЯрд░ тЖТ рдСрдмреНрдЬреЗрдХреНрдЯ" рд░реВрдкрд╛рдВрддрд░рдг, рдХреЗрд╡рд▓ "рдСрдмреНрдЬреЗрдХреНрдЯ тЖТ рдкреЙрдЗрдВрдЯрд░" рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ,
GCHandleType.Pinned
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
GCHandleType.Pinned
рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд╡рд░реНрдЧ рдпрд╛ рд╕рдВрд░рдЪрдирд╛ рдЬрд┐рд╕рдХрд╛ рдкрддрд╛ рд╣рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрд╕рдХреЗ рдкрд╛рд╕
[StructLayout(LayoutKind.Sequential)]
рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдЬрдмрдХрд┐
LayoutKind.Auto
рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рддреЛ рдпрд╣ рд╡рд┐рдзрд┐ рдХреЗрд╡рд▓ рдХреБрдЫ рдорд╛рдирдХ рдкреНрд░рдХрд╛рд░реЛрдВ рдФрд░ рдЙрди рдХрд╕реНрдЯрдо рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдХрд░ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдереЗред рдареАрдХ рдЙрд╕реА рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╡рд┐рдзрд┐ рд╕реЗ рдирд╣реАрдВ рдЬрд┐рд╕реЗ рд╣рдо рдЦреЛрдЬрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ, рд╣реИ рдирд╛?
рдЦреИрд░, рдлрд┐рд░ рд╕реЗ рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред рдЕрдм рджреЛ
__makeref()
рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ, рдЬреЛ, рдлрд┐рд░ рднреА, рд░реЛрд╕рд▓рд┐рди рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ:
__makeref()
рдФрд░
__refvalue()
ред рдЙрдирдореЗрдВ рд╕реЗ рдкрд╣рд▓рд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЯрд╛рдЗрдк рдХреА рдЧрдИ рд╕рдВрджрд░реНрдн рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реИ рдЬреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдФрд░ рдЗрд╕рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рджреВрд╕рд░рд╛ рдЯреНрд░рд╛рдВрд╕рдорд┐рдЯ рдХрд┐рдП рдЧрдП
typedReference
рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИред рдпреЗ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХреНрдпреЛрдВ рд╣реИрдВ? рдХреНрдпреЛрдВрдХрд┐
TypedReference
рдПрдХ рд╕рдВрд░рдЪрдирд╛ рд╣реИ! рдЪрд░реНрдЪрд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдПрдХ рд╕рдВрдХреЗрддрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╕рдВрдпреЛрдЬрди рдореЗрдВ, рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдкрд╣рд▓реЗ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрддрдХ рд╣реЛрдЧрд╛ред рдЕрд░реНрдерд╛рддреН, рдпрд╣ рдЙрд╕ рд╡рд╕реНрддреБ рдХреА рдмрд╣реБрдд рдХрдбрд╝реА рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рд░реБрдЪрддреА рд╣реИред рдлрд┐рд░, рдХрд┐рд╕реА рдкреНрд░рдмрдВрдзрд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЗ рдорд╛рди рдХреЛ рдкрдврд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐
__makeref()
рдХреНрдпрд╛ рд▓реМрдЯреЗрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдкреЙрдЗрдВрдЯрд░ рдореЗрдВ рдмрджрд▓ рджреЗрдЧрд╛ред рдкреЙрдЗрдВрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ рдЦрд╛рд▓реА рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ
__makeref()
рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рд▓реМрдЯрд╛рдП рдЧрдП
TypedReference
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рдЙрд╕ рдкрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рд▓рд┐рдЦреЗрдВ, рдФрд░ рдлрд┐рд░
__refvalue()
рдХреЙрд▓ рдХрд░реЗрдВред рдкрд░рд┐рдгрд╛рдо рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реИ:
public static Tout ToInstance<Tout>(IntPtr ptr) { Tout temp = default; TypedReference tr = __makeref(temp); Marshal.WriteIntPtr(*(IntPtr*)(&tr), ptr); Tout instance = __refvalue(tr, Tout); return instance; } public static void* ToPointer<T>(ref T obj) { if (typeof(T).IsValueType) { return *(void**)&tr; } else { return **(void***)&tr; } }
рдЯрд┐рдкреНрдкрдгреАInvokeAsm()
рд▓рд┐рдП рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдЖрд╡рд░рдг рд▓рд┐рдЦрдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдкрд░ рд▓реМрдЯрддреЗ рд╣реБрдП, рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ GCHandle.Alloc(GCHandleType.Pinned)
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдкрд░реАрдд, __makeref()
рдФрд░ __refvalue()
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрдХреЗрдд рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐ рдпрд╣ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗрддреА рд╣реИ рдХрд┐ рд╣рдорд╛рд░рд╛ рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░ рдХрд╣реАрдВ рдирд╣реАрдВ рд╣реИред рд╡рд╕реНрддреБ рдирд╣реАрдВ рдЪрд▓реЗрдЧреАред рдЗрд╕рд▓рд┐рдП, рд░реИрдкрд░ рдХреЛ рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░ рдХреЛ рдмрдВрдж рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЗрд╕рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдмрд╣рд╛рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рдорд╛рдзрд╛рди рдмрд▓реНрдХрд┐ рдХрдареЛрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рднрд╛рд╡реА рд╣реИред
рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ рдСрдкрдХреЛрдб рдпрд╛рдж рдирд╣реАрдВ рд╣реИ
рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рдмрд╛рдЗрдирд░реА рдХреЛрдб рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рд╕реАрдЦрд╛, рди рдХреЗрд╡рд▓ рддрд╛рддреНрдХрд╛рд▓рд┐рдХ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдЦрд╛, рдмрд▓реНрдХрд┐ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рд╕реА рднреА рдЪреАрдЬ рдХреА рдУрд░ рд╕рдВрдХреЗрдд рдХрд┐рдпрд╛ ... рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рд╕рдорд╛рди рдмрд╛рдЗрдирд░реА рдХреЛрдб рдХрд╣рд╛рдВ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ? рдЖрдк рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдПрдХ рдкреЗрдВрд╕рд┐рд▓, рдПрдХ рдиреЛрдЯрдкреИрдб рдФрд░ рдПрдХ рдУрдкрдХреЛрдб рддрд╛рд▓рд┐рдХрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рдпрд╣ рдПрдХ ) рдХреЗ рд╕рд╛рде рд╣рд╛рде рдореЗрдВ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ x86 рдХреЛрдбрд╛рдВрддрд░рдХ рд╕рдорд░реНрдерди рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рдкреВрд░реНрдг рдЕрдиреБрд╡рд╛рджрдХ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реЗрдХреНрд╕ рд╕рдВрдкрд╛рджрдХ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрди рд╕рднреА рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рд╡рд╣ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдореИрдВ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдЕрдиреБрд╡рд╛рджрдХ рдХреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬрд┐рд╕реЗ рдкрд░рдВрдкрд░рд╛рдЧрдд рд░реВрдк рд╕реЗ рдПрд╕рдПрдПрд╕рдПрдо (рд╕реНрдЯреИрдХ рдЕрд╕реЗрдВрдмрд▓рд░ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреНрд╖рд┐рдкреНрдд; рдЗрд╕рдХрд╛
рдЖрдИрдбреАрдИ рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИ) рд╣реИред
рддреНрдпрд╛рдЧрдореИрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдЕрдиреБрд╡рд╛рджрдХ рдХреЛрдб ... рдареАрдХ рд╣реИ, рдЕрдкреВрд░реНрдг, рдХрдо рд╕реЗ рдХрдо рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рдордЬрдмреВрдд рдирд╣реАрдВ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рд╡реЗ рд╡рд╣рд╛рдВ рдирд╣реАрдВ рд╣реИрдВред рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ - рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдкрд╛рд░реНрд╕рд░ред
рдореИрдВ рд╢рд╛рдпрдж рдЗрд╕ "рдЪрдорддреНрдХрд╛рд░" рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ - рдЗрд╕ рдХрд╣рд╛рдиреА рдореЗрдВ рдХреБрдЫ рднреА рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ред рдЕрдзрд┐рдХрд╛рдВрд╢ x86 рдирд┐рд░реНрджреЗрд╢ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВред рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдирдВрдмрд░реЛрдВ рдФрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди (MMX, SSE, AVX) рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдЧрдгрд┐рддреАрдп рдЧрдгрд┐рддреАрдп рдирд┐рд░реНрджреЗрд╢ рдЕрднреА рддрдХ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИрдВред рд╕реНрдерд┐рд░рд╛рдВрдХ, рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ, рд╕реНрдерд╛рдиреАрдп рд╕реНрдЯреИрдХ рдЪрд░, рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдХреЛ рдмрд╛рдЗрдирд░реА рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА рдореЗрдВ рд╕реАрдзреЗ рдЕрдиреБрд╡рд╛рдж рдХреЗ рджреМрд░рд╛рди рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрджрд┐ рдЗрди рдЪрд░ рдХреЛ рд▓реЗрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд╛рдо рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХреЙрд▓рд┐рдВрдЧ рд╡рд┐рдзрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдореНрдорд┐рд▓рди рдХреЗ рдмрд╛рдж рдЙрдирдХрд╛ рдорд╛рди C # рд╕реЗ рднреА рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
GetBYTEVariable()
,
GetWORDVariable()
,
GetDWORDVariable()
,
GetAStringVariable()
рдФрд░
GetWStringVariable()
SASMCode
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА),
addr
рдФрд░
SASMCode
рдореИрдХреНрд░реЛрдЬрд╝ рдореМрдЬреВрдж рд╣реИрдВред рдмрд╛рд╣рд░реА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рд╕реЗ рдЖрдпрд╛рдд рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдмрд╛рд╣рд░реА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЖрдпрд╛рдд
extern < > lib < >
рдирд┐рд░реНрдорд╛рдгред
asmret
рдореИрдХреНрд░реЛ рдПрдХ рдЕрд▓рдЧ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдХреЗ рдпреЛрдЧреНрдп рд╣реИред рдЕрдиреБрд╡рд╛рдж рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдпрд╣ рдЙрдкрд╕рдВрд╣рд╛рд░ рдмрдирд╛рддреЗ рд╣реБрдП 11 рдирд┐рд░реНрджреЗрд╢реЛрдВ рдореЗрдВ рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдиреБрд╡рд╛рджрд┐рдд рдХреЛрдб рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдкреНрд░реЛрд▓реЙрдЧ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрдирдХрд╛ рдХрд╛рд░реНрдп рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрдЪрд╛рдиреЗ / рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛ рдореЗрдВ рдЪрд╛рд░ рд╕реНрдерд┐рд░рд╛рдВрдХ -
$first
,
$second
,
$this
рдФрд░
$return
ред рдЕрдиреБрд╡рд╛рдж рдХреЗ рджреМрд░рд╛рди, рдЗрди рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЛ рд╕реНрдЯреИрдХ рдкрд░ рдкрддреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕ рдкрд░, рдХреНрд░рдорд╢рдГ, рдкрд╣рд▓реА рдФрд░ рджреВрд╕рд░реА рджрд▓реАрд▓реЗрдВ рдХреЛрдбрд╛рдВрддрд░рдХ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВ, рдкрд╣рд▓реА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХрдорд╛рдВрдб рдХрд╛ рдкрддрд╛ рдФрд░ рд╡рд╛рдкрд╕реА рдкрддрд╛ред
рдкрд░рд┐рдгрд╛рдо
рдХреЛрдб рд╢рдмреНрджреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХрд╣реЗрдВрдЧреЗ, рдФрд░ рдпрд╣ рдХрд╛рдлреА рдЕрдЬреАрдм рд╣реЛрдЧрд╛ рдХрд┐ рдХрд╛рдлреА рд▓рдВрдмреЗ рдХрд╛рдо рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╕рд╛рдЭрд╛ рди рдХрд░реЗрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЙрди рд╕рднреА рдХреЛ рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдЬрд┐рдирдХреА рдореБрдЭреЗ
GitHub рдореЗрдВ рд░реБрдЪрд┐
рд╣реИ ред
рдпрджрд┐, рдлрд┐рд░ рднреА, рдореИрдВ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╕рдм рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐, рдХреБрдЫ рд╣рдж рддрдХ, рдмреЗрдХрд╛рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рдирд┐рдХрд▓реА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, C # рдореЗрдВ рдЖрд╡реЗрд╖рдг рдЫрд╛рдВрдЯрдиреЗ рдФрд░ рдХреЛрдбрд╛рдВрддрд░рдХ рдЖрд╡реЗрд╖рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рджреЛ рдмрд╛рд░ рд╕реЗ рдЕрдзрд┐рдХ рдЧрддрд┐ рдореЗрдВ рднрд┐рдиреНрди рд╣реЛрддреЗ рд╣реИрдВ (рдмреЗрд╢рдХ, рдХреЛрдбрд╛рдВрддрд░рдХ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ)ред рдЧрдВрднреАрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ (рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕ рд╕рдВрднрд╡ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдмрд╣реБрдд рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ), рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрд╡рдпрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╕рдВрднрд╡ рд╣реИред