рд╕реА # рдореЗрдВ рдкрд░реНрджреЗ рдХреЗ рдкреАрдЫреЗ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ: рд╕реНрдЯреИрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ

рдореИрдВ рдЙрди рд╕рднреА рдЪреАрдЬреЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ рдЬреЛ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреА рд╕рд░рд▓ рд▓рд╛рдЗрдиреЛрдВ, рдХреЙрд▓рд┐рдВрдЧ рдореЗрдердбреНрд╕ рдФрд░ рдкрд╛рд╕рд┐рдВрдЧ рдкреИрд░рд╛рдореАрдЯрд░реНрд╕ рдХреЗ рдкреАрдЫреЗ рд╣реИрдВред рдмреЗрд╢рдХ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдХреЙрд▓рд┐рдВрдЧ рд╡рд┐рдзрд┐ рдХреЗ рдвреЗрд░ рдХреЛ рдШрдЯрд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рддреНрдпрд╛рдЧ


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

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

рдореИрдВ рдпрд╣ рднреА рдЪреЗрддрд╛рд╡рдиреА рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдРрд╕реА рд╕рд╛рдордЧреНрд░реА рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕рд┐рджреНрдзрд╛рдВрдд рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ


рдХреЛрдИ рднреА рдХреЛрдб рдЕрдВрддрддрдГ рдорд╢реАрди рдХрдорд╛рдВрдб рдХрд╛ рдПрдХ рд╕реЗрдЯ рдмрди рдЬрд╛рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рд╕рдордЭ рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реА рд╡рд┐рдзрд╛рдирд╕рднрд╛ рднрд╛рд╖рд╛ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдирдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╣реИ рдЬреЛ рд╕реАрдзреЗ рдПрдХ (рдпрд╛ рдХрдИ) рдорд╢реАрди рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИред


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

рдЕрдм рдЕрд╕реЗрдВрдмрд▓рд░ рднрд╛рд╖рд╛ рдореЗрдВ рдХреЛрдб рдХреЗ рдЕрдЧрд▓реЗ рдЯреБрдХрдбрд╝реЗ рдХреЛ рджреЗрдЦреЗрдВ (рдореИрдВрдиреЗ рдбрд┐рдмрдЧ рдореЛрдб рдореЗрдВ рдирд┐рд╣рд┐рдд рдХреБрдЫ рдХреЙрд▓реЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛)ред

C #:

public class StubClass { public static int StubMethod(int fromEcx, int fromEdx, int fromStack) { int local = 5; return local + fromEcx + fromEdx + fromStack; } public static void CallingMethod() { int local1 = 7, local2 = 8, local3 = 9; int result = StubMethod(local1, local2, local3); } } 

рдПрдПрд╕рдПрдо:

 StubClass.StubMethod(Int32, Int32, Int32) 1: push ebp 2: mov ebp, esp 3: sub esp, 0x10 4: mov [ebp-0x4], ecx 5: mov [ebp-0x8], edx 6: xor edx, edx 7: mov [ebp-0xc], edx 8: xor edx, edx 9: mov [ebp-0x10], edx 10: nop 11: mov dword [ebp-0xc], 0x5 12: mov eax, [ebp-0xc] 13: add eax, [ebp-0x4] 14: add eax, [ebp-0x8] 15: add eax, [ebp+0x8] 16: mov [ebp-0x10], eax 17: mov eax, [ebp-0x10] 18: mov esp, ebp 19: pop ebp 20: ret 0x4 StubClass.CallingMethod() 1: push ebp 2: mov ebp, esp 3: sub esp, 0x14 4: xor eax, eax 5: mov [ebp-0x14], eax 6: xor edx, edx 7: mov [ebp-0xc], edx 8: xor edx, edx 9: mov [ebp-0x8], edx 10: xor edx, edx 11: mov [ebp-0x4], edx 12: xor edx, edx 13: mov [ebp-0x10], edx 14: nop 15: mov dword [ebp-0x4], 0x7 16: mov dword [ebp-0x8], 0x8 17: mov dword [ebp-0xc], 0x9 18: push dword [ebp-0xc] 19: mov ecx, [ebp-0x4] 20: mov edx, [ebp-0x8] 21: call StubClass.StubMethod(Int32, Int32, Int32) 22: mov [ebp-0x14], eax 23: mov eax, [ebp-0x14] 24: mov [ebp-0x10], eax 25: nop 26: mov esp, ebp 27: pop ebp 28: ret 

рдкрд╣рд▓реА рдмрд╛рдд рдЬрд┐рд╕ рдкрд░ рдЖрдкрдХреЛ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рд╡рд╣ рд╣реИ рдИрдмреАрдкреА рдФрд░ рдИрдПрд╕рдкреА рд░рдЬрд┐рд╕реНрдЯрд░ рдФрд░ рдЙрдирдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд▓рдиред

рдореЗрд░реЗ рджреЛрд╕реНрддреЛрдВ рдХреЗ рдмреАрдЪ рдПрдХ рдЧрд▓рдд рдзрд╛рд░рдгрд╛ рдпрд╣ рд╣реИ рдХрд┐ EBP рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдкреЙрдЗрдВрдЯрд░ рд╕реЗ рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рдореБрдЭреЗ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред

рдИрдПрд╕рдкреА рд░рдЬрд┐рд╕реНрдЯрд░ рдкреЙрдЗрдВрдЯрд░ рдХреЗ рдвреЗрд░ рдХреЗ рд╢реАрд░реНрд╖ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рдкреНрд░рддреНрдпреЗрдХ PUSH рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде (рдпрд╣ рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдореВрд▓реНрдп рд░рдЦрддрд╛ рд╣реИ), рдЗрд╕ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд╛ рдореВрд▓реНрдп рдШрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╕реНрдЯреИрдХ рдирд┐рдЪрд▓реЗ рдкрддреЛрдВ рдХреА рдУрд░ рдмрдврд╝рддрд╛ рд╣реИ), рдФрд░ рдкреНрд░рддреНрдпреЗрдХ POP рдСрдкрд░реЗрд╢рди рдХреЗ рд╕рд╛рде, рдпрд╣ рд╡реГрджреНрдзрд┐ рдХрд░рддрд╛ рд╣реИред рдХреЙрд▓ рдХрдорд╛рдВрдб рднреА рд╕реНрдЯреИрдХ рдкрд░ рд░рд┐рдЯрд░реНрди рдПрдбреНрд░реЗрд╕ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдИрдПрд╕рдкреА рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд╛ рдореВрд▓реНрдп рднреА рдШрдЯ рдЬрд╛рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдИрдПрд╕рдкреА рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЛ рдмрджрд▓рдирд╛ рдХреЗрд╡рд▓ рддрдм рд╣реА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЗрди рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдХреЙрд▓ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╡рд╣реА рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдХреЙрд▓ рдирд┐рд░реНрджреЗрд╢ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ)ред

StubMethod рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ, EBP рд░рдЬрд┐рд╕реНрдЯрд░ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╕реНрдЯреИрдХ рдкрд░ рдзрдХреЗрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд▓реМрдЯрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдорд╛рди рдмрд╣рд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

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

рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдХреЛ рдПрдХ рдкреНрд░реЛрд▓реЛрдб рдлрд╝рдВрдХреНрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

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

Fastcall рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдиреБрд╕реНрдорд╛рд░рдХ: рджреЗрд╢реА .net рдлрд╛рд╕реНрдЯрдХреЙрд▓ рдХреЙрд▓рд┐рдВрдЧ рдХрдиреНрд╡реЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рд╕рдордЭреМрддрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдкрд╛рд░рд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕реНрдерд╛рди рдФрд░ рдЖрджреЗрд╢ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдлрд╛рд╕реНрдЯрдХреЙрд▓ рдХреЗ рд╕рд╛рде , рдкрд╣рд▓реЗ рдФрд░ рджреВрд╕рд░реЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдХреНрд░рдорд╢рдГ рдИрд╕реАрдПрдХреНрд╕ рдФрд░ рдИрдбреАрдПрдХреНрд╕ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдмрд╛рдж рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕реНрдЯреИрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЧреИрд░-рд╕реНрдереИрддрд┐рдХ рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рд╣рд┐рдд рд╣реИ рдФрд░ рдЙрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдкрддрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рд╡рд┐рдзрд┐ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрд╣ рдкрддрд╛)ред

рд▓рд╛рдЗрдиреЛрдВ 4 рдФрд░ 5 рдореЗрдВ, рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ (рдкрд╣рд▓реЗ 2) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░реЗрд╖рд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рд╕реНрдЯреИрдХ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреЗ рд╣реИрдВред

рдЕрдЧрд▓рд╛ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреИрдХ рд╕реНрдерд╛рди рдХреА рд╕рдлрд╛рдИ рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЛ рдЖрд░рдВрдн рдХрд░ рд░рд╣рд╛ рд╣реИред

рдпрд╣ рдпрд╛рдж рд░рдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо EAX рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рд╣реИред

12-16 рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ, рдЖрд╡рд╢реНрдпрдХ рдЪрд░ рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВред рдореИрдВ рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рд░реЗрдЦрд╛ 15 рдХреА рдУрд░ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реВрдВред рдкрддреЗ рдХреА рдПрдХ рдХреЙрд▓ рд╣реЛрддреА рд╣реИ, рдЬреЛ рд╕реНрдЯреИрдХ рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рдЬреНрдпрд╛рджрд╛ рд╣реЛрддреА рд╣реИ, рдпрд╛рдиреА рдкрд┐рдЫрд▓реА рдкрджреНрдзрддрд┐ рдХреЗ рд╕реНрдЯреИрдХ рдХреЗ рд▓рд┐рдПред рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдХреЙрд▓рд┐рдВрдЧ рд╡рд┐рдзрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдзрдХреЗрд▓ рджреЗрддреА рд╣реИред рдпрд╣рд╛рдБ рд╣рдо рдЗрд╕реЗ рдкрдврд╝рддреЗ рд╣реИрдВред рдЬреЛрдбрд╝ рдХрд╛ рдкрд░рд┐рдгрд╛рдо EAX рд░рдЬрд┐рд╕реНрдЯрд░ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рд╕реНрдЯреИрдХ рдкрд░ рдзрдХреЗрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ред рдЪреВрдВрдХрд┐ рдпрд╣ StubMethod рдХрд╛ рд░рд┐рдЯрд░реНрди рдорд╛рди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ EAX рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдмреЗрд╢рдХ, рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдРрд╕реЗ рдмреЗрддреБрдХреЗ рд╕реЗрдЯ рдХреЗрд╡рд▓ рдбрд┐рдмрдЧ рдореЛрдб рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рдХреЛрдб рд╕реНрдорд╛рд░реНрдЯ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ рдХреЗ рдмрд┐рдирд╛ рдмрд┐рд▓реНрдХреБрд▓ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ рдЬреЛ рдХрд╛рдо рдХрд╛ рд╢реЗрд░ рд╕рд╛рдЭрд╛ рдХрд░рддрд╛ рд╣реИред

рд▓рд╛рдЗрдиреЗрдВ 18 рдФрд░ 19 рдкрд┐рдЫрд▓реЗ рдИрдмреАрдкреА (рдХреЙрд▓рд┐рдВрдЧ рд╡рд┐рдзрд┐) рдФрд░ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреА рд╣реИрдВ (рдЬрд┐рд╕ рд╕рдордп рд╡рд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛)ред

рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рд▓реМрдЯрддреА рд╣реИред рдореВрд▓реНрдп 0x4 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рдереЛрдбрд╝рд╛ рдХрдо рдмрддрд╛рдКрдВрдЧрд╛ред
рдХрдорд╛рдВрдб рдХреЗ рдЗрд╕ рдХреНрд░рдо рдХреЛ рдлрдВрдХреНрд╢рди рдПрдкрд┐рд▓реЙрдЧ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЕрдм CallingMethod рдкрд░ рдПрдХ рдирдЬрд░ рдбрд╛рд▓рддреЗ рд╣реИрдВред рдЪрд▓реЛ рд╕реАрдзреЗ рд▓рд╛рдЗрди 18 рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рд╣рдордиреЗ рд╕реНрдЯреИрдХ рдХреЗ рдКрдкрд░ рддреАрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд░рдЦрд╛ рд╣реИред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдо рдЗрд╕реЗ PUSH рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдХрд░рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд, ESP рдорд╛рди рдХреЛ рдШрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдиреНрдп 2 рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд░рдЬрд┐рд╕реНрдЯрд░ ( рдлрд╛рд╕реНрдЯрдХреЙрд▓ ) рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдЧрд▓рд╛ StubMethod рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рд╣реИред рдЕрдм рд░реАрдЯ 0x4 рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдпрд╛рдж рдХрд░реЗрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╢реНрди рдпрд╣рд╛рдВ рд╕рдВрднрд╡ рд╣реИ: 0x4 рдХреНрдпрд╛ рд╣реИ? рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рд╣рдордиреЗ рд╕реНрдЯреИрдХ рдкрд░ рдХреЙрд▓ рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдзрдХреНрдХрд╛ рджрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рдЕрдм рд╣рдореЗрдВ рдЙрдирдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред 0x4 рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рдмрд╛рдж рдмрд╛рдЗрдЯ рдХреЛ рд╕реНрдЯреИрдХ рд╕реЗ рд╕рд╛рдлрд╝ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдерд╛, рдЖрдкрдХреЛ 4 рдмрд╛рдЗрдЯреНрд╕ рд╕рд╛рдлрд╝ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдпрд╣рд╛рдБ рдПрдХ рдирдореВрдирд╛ рд╕реНрдЯреИрдХ рдЫрд╡рд┐ рд╣реИ:



рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЕрдЧрд░ рд╣рдо рдЪрд╛рд░реЛрдВ рдУрд░ рдореБрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рд╕реНрдЯреИрдХ рдХреЗ рдкреАрдЫреЗ рдХреНрдпрд╛ рд╣реИ, рддреЛ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдИрдмреАрдкреА рдХреЛ рд╕реНрдЯреИрдХ рдкрд░ рдзрдХреЗрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд╡рд░реНрддрдорд╛рди рд╡рд┐рдзрд┐ рдХреА рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдкрд░ рд╣реБрдЖ рдерд╛)ред рдЗрд╕рдХреЗ рдмрд╛рдж, рдПрдХ рд╡рд╛рдкрд╕реА рдкрддрд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдирд┐рд╖реНрдкрд╛рджрди рдЬрд╛рд░реА рд░рд╣реЗрдЧрд╛ ( рдЖрд░рдИрдЯреА рдирд┐рд░реНрджреЗрд╢ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдФрд░ рдЗрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдо рдЦреБрдж рдХреЛ рд╡рд░реНрддрдорд╛рди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рджреЗрдЦреЗрдВрдЧреЗ (3 рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░, рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╣рд▓реЗ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░реЗрд╖рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ)ред рдФрд░ рдЙрдирдХреЗ рдкреАрдЫреЗ рдХреЙрд▓рд┐рдВрдЧ рд╡рд┐рдзрд┐ рдХрд╛ рдвреЗрд░ рд╣реИ!
рдкрд╣рд▓реЗ рдФрд░ рджреВрд╕рд░реЗ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ + 0x8 рдкрд░ рдСрдлрд╕реЗрдЯ рд╕рдордЭрд╛рддрд╛ рд╣реИред
рддрджрдиреБрд╕рд╛рд░, рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдлрд╝рдВрдХреНрд╢рди рдХрд╣реЗ рдЬрд╛рдиреЗ рдкрд░ рдХрдбрд╝рд╛рдИ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреНрд░рдо рдореЗрдВ рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд╕реНрдерд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рд▓рд┐рдП, рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдкреНрд░рддреНрдпреЗрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╕реНрдЯреИрдХ рдкрд░ рдзрдХреЗрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдзрдХреНрдХрд╛ рдирд╣реАрдВ рджреЗрдВрдЧреЗ, рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдЕрднреА рднреА рдЙрдиреНрд╣реЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдЧрд╛?

рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЙрджрд╛рд╣рд░рдг


рдЗрд╕рд▓рд┐рдП, рдКрдкрд░ рдмрддрд╛рдП рдЧрдП рд╕рднреА рддрдереНрдпреЛрдВ рдиреЗ рдореБрдЭреЗ рдПрдХ рдРрд╕реА рдкрджреНрдзрддрд┐ рдХреЗ рдвреЗрд░ рдХреЛ рдкрдврд╝рдиреЗ рдХреА рдПрдХ рдЕрдердХ рдЗрдЪреНрдЫрд╛ рджреА рд╣реИ рдЬреЛ рдореЗрд░реЗ рдХрд╛рд░реНрдп рдХреЛ рдХрд╣реЗрдЧрд╛ред рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд┐ рд╡рд╕реНрддреБрддрдГ рддреАрд╕рд░реЗ рддрд░реНрдХ рд╕реЗ рдПрдХ рд╕реНрдерд┐рддрд┐ рдореЗрдВ (рдпрд╣ рдХреЙрд▓рд┐рдВрдЧ рд╡рд┐рдзрд┐ рдХреЗ рдвреЗрд░ рдХреЗ рд╕рдмрд╕реЗ рдХрд░реАрдм рд╣реЛрдЧрд╛) рдХрд╝реАрдорддреА рдбреЗрдЯрд╛ рд╣реИ рдЬреЛ рдореБрдЭреЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рдЪрд╛рд╣рд┐рдП, рдореБрдЭреЗ рд╕реЛрдиреЗ рдирд╣реАрдВ рджрд┐рдпрд╛ред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдХреЙрд▓рд┐рдВрдЧ рд╡рд┐рдзрд┐ рдХреЗ рдвреЗрд░ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдорд╛рдкрджрдВрдбреЛрдВ рд╕реЗ рдереЛрдбрд╝рд╛ рдЖрдЧреЗ рдирд┐рдХрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддреЗ рд╕рдордп, рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдкрддреЗ рдХреА рдЧрдгрдирд╛ рдХреЗрд╡рд▓ рдЗрд╕ рддрдереНрдп рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрддреА рд╣реИ рдХрд┐ рдХреЙрд▓рд┐рдВрдЧ рд╡рд┐рдзрд┐ рдиреЗ рдЙрди рд╕рднреА рдХреЛ рд╕реНрдЯреИрдХ рдкрд░ рдзрдХреЗрд▓ рджрд┐рдпрд╛ред

рд▓реЗрдХрд┐рди EDX рдкреИрд░рд╛рдореАрдЯрд░ (рдЬреЛ рдЕрдВрддрд┐рдо рд▓реЗрдЦ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ) рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИ, рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред

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

рд╣рдо рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рд╕рднреА рд╕рдорд╛рди рдкрд╕рдВрджреАрджрд╛ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рдЙрд╕реА рд╕рдордп, рдпрджрд┐ рдУрд╡рд░рд▓реИрдкрд┐рдВрдЧ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдПрдХ рдЕрд▓рдЧ рд╕рдВрдЦреНрдпрд╛ рд╣реИ, рддреЛ рд╣рдо рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ рд╕рдВрдХрд▓рдХ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдзрдХреНрдХрд╛ рдирд╣реАрдВ рджреЗрдЧрд╛ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЬрд╝рд░реВрд░рдд рд╣реИ рд╕реНрдЯреИрдХ рдкрд░ (рдХрд╛рд▓реНрдкрдирд┐рдХ рдХреА рддрд░рд╣, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдирд╣реАрдВ рдкрддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рд╣реИрдВ)ред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд┐рдзрд┐ рдЬрд┐рд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ (рджреВрд╕рд░реЗ рдкреНрд░рдХрд╛рд░ рд╕реЗ рд╕рдорд╛рди рдСрдлрд╕реЗрдЯ рдХреЗ рд╕рд╛рде) рдЗрд╕рдХреЗ рдвреЗрд░ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдкреНрд▓рд╕ рдкрддреЗ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, рдЬрд╣рд╛рдВ рдпрд╣ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реИред

рд▓реЗрдХрд┐рди рд╡рд╣рд╛рдВ рд╡рд╣ рдЙрдиреНрд╣реЗрдВ рдирд╣реАрдВ рдкрд╛рддрд╛ рд╣реИ рдФрд░ рдХреЙрд▓рд┐рдВрдЧ рд╡рд┐рдзрд┐ рдХреЗ рдвреЗрд░ рдХреЛ рдкрдврд╝рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИред

рд╕реНрдкрд╛рдпрд▓рд░ рдХреЛрдб
 using System; using System.Runtime.InteropServices; namespace Magic { public class StubClass { public StubClass(int id) { Id = id; } public int Id; } [StructLayout(LayoutKind.Explicit)] public class CustomStructWithLayout { [FieldOffset(0)] public Test1 Test1; [FieldOffset(0)] public Test2 Test2; } public class Test1 { public virtual void Useless(int skipFastcall1, int skipFastcall2, StubClass adressOnStack) { adressOnStack.Id = 189; } } public class Test2 { public virtual int Useless() { return 888; } } class Program { static void Main() { Test2 objectWithLayout = new CustomStructWithLayout { Test2 = new Test2(), Test1 = new Test1() }.Test2; StubClass adressOnStack = new StubClass(3); objectWithLayout.Useless(); Console.WriteLine($"MAGIC - {adressOnStack.Id}"); // MAGIC - 189 } } } 


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

рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдпрд╣ рдХрд╛рдо рдХреА рд╕рд╛рдорд╛рдиреНрдп рдпреЛрдЬрдирд╛ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

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


All Articles