рдореИрдВ рдЙрди рдЗрдВрдЯрд░реНрдирд▓ рдХреЛ рджреЗрдЦрдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд╢реБрд░реБрдЖрддреА рд▓рд╛рдЗрдиреЛрдВ, рдХреЙрд▓рд┐рдВрдЧ рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рдкрд╛рд╕рд┐рдВрдЧ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд╕рд░рд▓ рд░реЗрдЦрд╛рдУрдВ рдХреЗ рдкреАрдЫреЗ рд╣реИрдВред рдФрд░, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рд╣рдо рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ - рд╣рдо рдХреЙрд▓рд┐рдВрдЧ рд╡рд┐рдзрд┐ рдХреЗ рдвреЗрд░ рдХреЛ рдШрдЯрд╛рдПрдВрдЧреЗред
рддреНрдпрд╛рдЧ
рдХрд╣рд╛рдиреА рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рджреГрдврд╝рддрд╛ рд╕реЗ рдЖрдкрдХреЛ
рд╕реНрдЯреНрд░рдХреНрдЪрд░рд▓рдЖрдЙрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╣рд▓реА рдкреЛрд╕реНрдЯ рдкрдврд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛
рд╣реВрдВ , рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдПрдХ рдХреЗ рдкреАрдЫреЗ рд╕рднреА рдХреЛрдб
рдбрд┐рдмрдЧ рдореЛрдб рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡реИрдЪрд╛рд░рд┐рдХ рдЖрдзрд╛рд░ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред 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 рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд┐рд╕реА рддрд░рд╣ рдкреЙрдЗрдВрдЯрд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдЬреЛ рдХрд┐ рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд╣реИ, рдореЗрд░реЗ рджреЛрд╕реНрддреЛрдВ рдХреЗ рдмреАрдЪ рдЖрдо рд╣реИред рдореБрдЭреЗ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рдирд╣реАрдВ рд╣реИред
ESP рд░рдЬрд┐рд╕реНрдЯрд░ рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдкреНрд░рддреНрдпреЗрдХ
PUSH рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╕рд╛рде (рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рдореВрд▓реНрдп рдбрд╛рд▓рддреЗ рд╣реБрдП)
ESP рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд╛ рдореВрд▓реНрдп рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ (рд╕реНрдЯреИрдХ рдЫреЛрдЯреЗ рдкрддреЗ рдХреА рдУрд░ рдмрдврд╝рддрд╛ рд╣реИ), рдФрд░ рдкреНрд░рддреНрдпреЗрдХ
POP рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛,
рдХреЙрд▓ рдХрдорд╛рдВрдб рд╕реНрдЯреИрдХ рдкрд░ рд░рд┐рдЯрд░реНрди рдПрдбреНрд░реЗрд╕ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ
рдИрдПрд╕рдкреА рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд╛ рдореВрд▓реНрдп рдШрдЯ рдЬрд╛рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ,
рдИрдПрд╕рдкреА рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд╛ рдкрд░рд┐рд╡рд░реНрддрди рди рдХреЗрд╡рд▓ рддрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЗрди рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рд░реБрдХрд╛рд╡рдЯ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣реА рдмрд╛рдд
рдХреЙрд▓ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рд╣реЛрддреА рд╣реИ)ред
StubMethod () рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред
рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ,
рдИрдмреАрдкреА рд░рдЬрд┐рд╕реНрдЯрд░ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдмрдЪрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЗрд╕реЗ рд╕реНрдЯреИрдХ рдкрд░ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд▓реМрдЯрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЗрд╕ рдорд╛рди рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐ рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдХреЗ рдкрддреЗ рдХреЗ рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдп рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреА рд╣реИ (рд░рдЬрд┐рд╕реНрдЯрд░
рдИрдПрд╕рдкреА рдХрд╛ рдореВрд▓реНрдп
рдИрдмреАрдкреА рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ)ред рдЕрдЧрд▓рд╛, рд╣рдо рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдХреЛ рдЙрддрдиреЗ рдкрджреЛрдВ рдкрд░ рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рддрдиреЗ рдореЗрдВ рд╣рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдФрд░ рдорд╛рдкрджрдВрдбреЛрдВ (рддреАрд╕рд░реА рдкрдВрдХреНрддрд┐) рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╕рднреА рд╕реНрдерд╛рдиреАрдп рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрди рдЬреИрд╕рд╛ рдХреБрдЫ -
рд╕реНрдЯреИрдХ рдлреНрд░реЗрдо ред рдЗрд╕реА рд╕рдордп,
рдИрдмреАрдкреА рд░рдЬрд┐рд╕реНрдЯрд░ рд╡рд░реНрддрдорд╛рди рдХреЙрд▓ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмрд┐рдВрджреБ рд╣реИред рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдирд╛ рдЗрд╕ рдореВрд▓реНрдп рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред
рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдХреЛ
рдлрд╝рдВрдХреНрд╢рди рдкреНрд░реЛрд▓реЙрдЧ рдХрд╣рд╛ рдЬрд╛рддрд╛
рд╣реИ ред
рдЙрд╕рдХреЗ рдмрд╛рдж, рд╕реНрдЯреИрдХ рдкрд░ рдЪрд░ рд╕рдВрдЧреНрд░рд╣реАрдд
рдИрдмреАрдкреА рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдЙрд╕ рд╕реНрдерд╛рди рдкрд░ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЗ рдЪрд░ рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрд╛рдж рд╕реНрдерд╛рдиреАрдп рд╡реИрд░рд┐рдПрдмрд▓ рдХреА рд╢реБрд░реБрдЖрдд рд╣реЛрддреА рд╣реИред
Fastcall рдЕрдиреБрд╕реНрдорд╛рд░рдХ: .net рдореЗрдВ,
Fastcall рдХреЙрд▓рд┐рдВрдЧ рдХрдиреНрд╡реЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХреЙрд▓рд┐рдВрдЧ рдХрдиреНрд╡реЗрдВрд╢рди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рджрд┐рдП рдЧрдП рд╕реНрдерд╛рди рдФрд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдХреНрд░рдо рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдкрд╣рд▓реЗ рдФрд░ рджреВрд╕рд░реЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдХреНрд░рдорд╢рдГ
ECX рдФрд░
EDX рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдмрд╛рдж рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕реНрдЯреИрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред (рдпрд╣ 32-рдмрд┐рдЯ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рд╣реИ, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ред 64-рдмрд┐рдЯ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЪрд╛рд░ рдкреИрд░рд╛рдореАрдЯрд░ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ (
RCX ,
RDX ,
R8 ,
R9 ) рд╕реЗ рд╣реЛрдХрд░ рдЧреБрдЬрд░реЗ рд╣реИрдВ)
рдЧреИрд░-рд╕реНрдереИрддрд┐рдХ рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рд╣рд┐рдд рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдЙрд╕ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдкрддрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рд╡рд┐рдзрд┐ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрд╣ рдкрддрд╛)ред
рд▓рд╛рдЗрдиреЛрдВ 4 рдФрд░ 5 рдореЗрдВ, рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ (рдкрд╣рд▓реЗ 2) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЧрдП рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕реНрдЯреИрдХ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЕрдЧрд▓рд╛ рд╕реНрдерд╛рдиреАрдп рдЪрд░ (
рд╕реНрдЯреИрдХ рдлреНрд░реЗрдо ) рдХреЗ рд▓рд┐рдП рд╕реНрдЯреИрдХ рдкрд░ рдЬрдЧрд╣ рдХреА рд╕рдлрд╛рдИ рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЛ рд╢реБрд░реВ рдХрд░ рд░рд╣рд╛ рд╣реИред
рдпрд╣ рдЙрд▓реНрд▓реЗрдЦ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд░рдЬрд┐рд╕реНрдЯрд░
EAX рдореЗрдВ рд╣реИ ред
12-16 рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ, рд╡рд╛рдВрдЫрд┐рдд рдЪрд░ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╣реЛрддрд╛ рд╣реИред рдореИрдВ рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рд░реЗрдЦрд╛ резрел рдХреА рдУрд░ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реВрдВред рдкрддреЗ рдХреА рдкрд╣реБрдБрдЪ рдореВрд▓реНрдп рд╣реИ рдЬреЛ рдХрд┐ рд╕реНрдЯреИрдХ рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ, рдЕрд░реНрдерд╛рдд, рдкрд┐рдЫрд▓реА рдкрджреНрдзрддрд┐ рдХреЗ рд╕реНрдЯреИрдХ рд╕реЗред рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдХреЙрд▓рд░ рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдзрдХреНрдХрд╛ рджреЗрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рд╣рдо рдЗрд╕реЗ рдкрдврд╝рддреЗ рд╣реИрдВред рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд░рдЬрд┐рд╕реНрдЯрд░
EAX рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕реНрдЯреИрдХ рдкрд░ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдпрд╣
StubMethod () рдХрд╛ рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рд╣реИ, рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ
EAX рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдмреЗрд╢рдХ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдмреЗрддреБрдХреЗ рдирд┐рд░реНрджреЗрд╢ рд╕реЗрдЯ рдХреЗрд╡рд▓ рдбрд┐рдмрдЧ рдореЛрдб рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рдХреЛрдб рд╕реНрдорд╛рд░реНрдЯ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ рдХреЗ рдмрд┐рдирд╛ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ рдЬреЛ рдХрд╛рдо рдХрд╛ рд╢реЗрд░ рд╕рд╛рдЭрд╛ рдХрд░рддрд╛ рд╣реИред
18 рдФрд░ 19 рдХреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ, рдкрд┐рдЫрд▓реЗ
рдИрдмреАрдкреА (рдХреЙрд▓рд┐рдВрдЧ рд╡рд┐рдзрд┐) рдФрд░ рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд╕реВрдЪрдХ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬрд┐рд╕ рд╕рдордп рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд▓реМрдЯрдиреЗ рд╡рд╛рд▓реА рд╣реИред рдореВрд▓реНрдп 0x4 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рдереЛрдбрд╝рд╛ рдмрд╛рдж рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ред
рдЖрджреЗрд╢реЛрдВ рдХреЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЙрдкрд╕рдВрд╣рд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЕрдм
CallingMethod () рдкрд░ рдПрдХ рдирдЬрд╝рд░
рдбрд╛рд▓рддреЗ рд╣реИрдВ ред рдЪрд▓реЛ рд╕реАрдзреЗ рд▓рд╛рдЗрди 18 рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рд╣рдордиреЗ рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рддреАрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд░рдЦрд╛ рд╣реИред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдо рдЗрд╕реЗ
PUSH рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдХрд░рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд,
ESP рдорд╛рди рдХреЛ рдШрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдиреНрдп 2 рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ (
рдлрд╛рд╕реНрдЯрдХреЙрд▓ ) рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж
StubMethod () рдореЗрдердб рдХреЙрд▓ рдЖрддрд╛ рд╣реИред рдЕрдм
рдЖрд░рдИрдЯреА 0x4 рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╢реНрди рд╕рдВрднрд╡ рд╣реИ: 0x4 рдХреНрдпрд╛ рд╣реИ? рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рд╣рдордиреЗ рд╕реНрдЯреИрдХ рдкрд░ рдХреЙрд▓ рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдзрдХреНрдХрд╛ рджрд┐рдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдм рд╣рдореЗрдВ рдЙрдирдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред 0x4 рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рдмрд╛рдж рд╕реНрдЯреИрдХ рд╕реЗ рдХрд┐рддрдиреЗ рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдПрдХ рдерд╛, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ 4 рдмрд╛рдЗрдЯреНрд╕ рд╕рд╛рдлрд╝ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдпрд╣рд╛рдБ рд╕реНрдЯреИрдХ рдХреА рдПрдХ рдореЛрдЯреА рдЫрд╡рд┐ рд╣реИ:

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрджрд┐ рд╣рдо рдЪрд╛рд░реЛрдВ рдУрд░ рдореБрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХреЗ рдареАрдХ рдмрд╛рдж рд╕реНрдЯреИрдХ рдкрд░ рдХреНрдпрд╛ рд╕реНрдерд┐рдд рд╣реИ, рддреЛ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд╣рдо
рдИрдмреАрдкреА рджреЗрдЦреЗрдВрдЧреЗ, рдЬрд┐рд╕реЗ рд╕реНрдЯреИрдХ рдкрд░ рдзрдХреЗрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд╡рд░реНрддрдорд╛рди рд╡рд┐рдзрд┐ рдХреА рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╣реБрдЖ рдерд╛)ред рдЕрдЧрд▓реА рдмрд╛рдд рд░рд┐рдЯрд░реНрди рдПрдбреНрд░реЗрд╕ рд╣реЛрдЧреАред рдпрд╣ рд╕реНрдерд╛рди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдп рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (
RET рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдФрд░ рдЗрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдареАрдХ рдмрд╛рдж рд╣рдо рд╡рд░реНрддрдорд╛рди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рджреЗрдЦреЗрдВрдЧреЗ (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 } } }
рдореИрдВ рдЕрд╕реЗрдВрдмрд▓реА рднрд╛рд╖рд╛ рдХреЛрдб рдирд╣реАрдВ рджреВрдВрдЧрд╛, рд╡рд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдХреЛрдИ рдкреНрд░рд╢реНрди рд╣реИрдВ, рддреЛ рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛
рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдпрд╣ рдХрд╛рд░реНрдп рдХреА рд╕рд╛рдорд╛рдиреНрдп рдпреЛрдЬрдирд╛ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред