рдореБрдЭреЗ GDS32.DLL рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдореИрдВрдиреЗ рдПрдХ рдкреНрд░реЙрдХреНрд╕реА dll рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
рд╣рдо рдПрдХ рд░рд┐рд╕рд░реНрдЪ рд╕реНрдЯреИрдВрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ
рдкрд╣рд▓реА рдЪреАрдЬ рдЬреЛ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдП рд╡рд╣ рд╣реИ рдЕрд╕рд▓реА рдбреАрдПрд▓ рд╕реЗ рд╕рднреА рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ред
рдЗрд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд░рддреЗ рд╣реИрдВ:
1. program GetFuncsDll; 2. {$APPTYPE CONSOLE} 3. uses Windows; 4. var 5. ImageBase: DWORD;
рд▓рдЧрддрд╛ рд╣реИ рдХреЛрдИ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред рд╣рдо рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдирд╛рдореЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА (NamesCursor) рдФрд░ рд╕рдВрдЦреНрдпрд╛рдУрдВ (OrdinalCursor) рдХреА рдПрдХ рд╕рд░рдгреА рдХреЗ рдирд┐рд░реНрдпрд╛рдд рддрд╛рд▓рд┐рдХрд╛ (рд▓рд╛рдЗрди 19) рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд╝рдВрдХреНрд╢рди, рдирд╛рдореЛрдВ рдФрд░ рд╕рдВрдЦреНрдпрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрдврд╝рддреЗ рд╣реИрдВред рдлрд╝рдВрдХреНрд╢рди рдХреА рд╕рдВрдЦреНрдпрд╛ NumberOfNames рдлрд╝реАрд▓реНрдб рдореЗрдВ рд╣реИред рдпрд╣ рдХреЛрдб рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдлрд┐рд░ рдЕрдВрддрд┐рдо рд░реВрдк рджрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рд╕рд░рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ред
рд╣рдорд╛рд░реЗ рдкрд░реАрдХреНрд╖рдг dll рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
1. Library MiniLib; 2. function myAdd(a,b:integer): integer; stdcall; 3. begin 4. result:=a+b; 5. end; 6. function mySub(a,b:integer): integer; stdcall; 7. begin 8. result:=ab; 9. end; 10. exports 11. myAdd, 12. mySub; 13. begin 14. end. 2
рд▓рдЧрддрд╛ рд╣реИ рдХреЛрдИ рдореБрд╢реНрдХрд┐рд▓ рднреА рдирд╣реАрдВ рд╣реИред рд╣рдо рджреЛ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ - рдЬреЛрдбрд╝ рдФрд░ рдШрдЯрд╛рд╡ред
рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реЛрдЧреА:
myAdd = 2
mySub = 1
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 3
рдЗрди рдирдВрдмрд░реЛрдВ рдХреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпреЗ рдХреНрдпреЛрдВ? рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рд╣реИ рдХрд┐
рдЕрдм рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдлрдВрдХреНрд╢рди рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЗрд╕рдХреЗ рдХреЙрд▓ рдХреЛ рдХрд┐рд╕ рдХреЛрдб рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдбреАрдмрдЧрд░ рдореЗрдВ рджреЗрдЦреЗрдВрдЧреЗред
1. program TestCall; 2. {$APPTYPE CONSOLE} 3. uses Windows; 4. var 5. myAdd: function (a,b:integer): integer; stdcall; 6. Handle:HMODULE; 7. N:Integer; 8. begin 9. Handle := loadlibrary('MiniLib.dll'); 10. @myAdd := GetProcAddress(Handle, 'myAdd'); 11.
рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИред рд╣рдо рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ рдХреЗрд╡рд▓ рдпрд╣ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рджреВрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ GetProcAddress рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрддрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ $ FFFF рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ, рдЕрдЧрд░ рдпрд╣ рдЗрд╕рд╕реЗ рдХрдо рдпрд╛ рдмрд░рд╛рдмрд░ рд╣реИ, рддреЛ рдЗрд╕реЗ рдирд┐рд░реНрдпрд╛рдд рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдпрд╣реА рд╣реИ, рд╣рдо рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рдВрдЦреНрдпрд╛ рдпрд╛ рдирд╛рдо рд╕реЗ рдмреБрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЬреЛрдбрд╝ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдПрдХ рдЪрд░ рдореЗрдВ рдХреИрд╕реЗ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН рд▓рд╛рдЗрди 13 рдХрд╛ рд╕рдВрдЪрд╛рд▓рдиред
1. TestCall.dpr.13: N: = myAdd (1,2);
2. $ 02 рдзрдХреНрдХрд╛
3. $ 01 рдзрдХреНрдХрд╛
4. рдХреЙрд▓ рдбреНрд░рд╛рдлреНрдЯ ptr [$ 0040cba4]
5. рдореВрд╡ [$ 0040cbac], рдИрдПрдХреНрд╕рдПрдХреНрд╕
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 5
рдФрд░ рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ, рд╣рдо рд╕реНрдЯреИрдХ рдкрд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ, рдПрдХ рдбреНрдпреВрд╕ (2) рдФрд░ рдПрдХ рдпреВрдирд┐рдЯ (3), рд╣рдо рдЕрдкрдиреЗ рдлрд╝рдВрдХреНрд╢рди (4) рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд░рд┐рдгрд╛рдо рдХреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рд░рдЬрд┐рд╕реНрдЯрд░ рдИрдПрдХреНрд╕рдПрдХреНрд╕ рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд░рдЬрд┐рд╕реНрдЯрд░ рд╕реЗ рд╣рдо рдкрд░рд┐рдгрд╛рдо рдХреЛ рдПрди (5) рдореЗрдВ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВред
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдк Dll рд╕реЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХрд░реЗрдВред рддрд░реНрдХ рдХреЛ рд╕реНрдЯреИрдХ рдкрд░ рдзрдХреЗрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдХ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдкрд░рд┐рдгрд╛рдо рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ (рдпрд╛ рд╕реНрдЯреИрдХ) рд╕реЗ рдкрдврд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВред
рд╡рд┐рдЪрд╛рд░
рдореЗрд░рд╛ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЗ рдмрдЬрд╛рдп рдореЗрд░рд╛ рдирдХрд▓реА dll рдирд┐рд╣рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдкрд╣рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЗрдирдкреБрдЯ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдирд╛рдо рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ рдЗрд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╣рддрд╛ рд╣реИ рдФрд░ рдЬреИрд╕реЗ рдХрд┐ рдХреБрдЫ рднреА рдирд╣реАрдВ рдерд╛ред
рд╣рдо рдирдХрд▓реА Dll рд▓рд┐рдЦрддреЗ рд╣реИрдВред
рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдлрд╝рдВрдХреНрд╢рди рдФрд░ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХреЛрдб рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреМрди рд╕рд╛ рд╡рд╣ рд╕рдм рдХреБрдЫ рдХреЗ рд▓рд┐рдП рд╣реИ рдФрд░ рд▓рд┐рдЦрд╛ рд╣реИред рдЙрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдЬреЛ рдореИрдВрдиреЗ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рджреЗрдЦрд╛ рдерд╛, рдЙрдирдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдХреЛрдб рдХреНрд▓реЛрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рдЙрд╕реА рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдирд┐рд░реНрдпрд╛рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рднреА рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ред рдореИрдВ рдЗрд╕ рд╕рдордп рдЗрд╕ рддрд░рд╣ рдХреЗ рд╢реНрд░рдорд╕рд╛рдзреНрдп рдХрд╛рд░реНрдп (рдЬреАрдбреАрдПрд╕ 32 рдХреЗ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╡рд┐рд╡рд░рдг рдФрд░ рдбреЗрд▓реНрдлреА рдкрд░ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП) рдмрд╣реБрдд рдЖрд▓рд╕реА рдерд╛ред рдлрд┐рд░ рднреА, рдЙрдкрдпреЛрдЧреА рдХреЛрдб рдХреНрд▓реЛрдирд┐рдВрдЧ "рд╣рдорд╛рд░реА рдкрджреНрдзрддрд┐ рдирд╣реАрдВ рд╣реИред" рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ: рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣рдорд╛рд░реЗ рдХреЛрдб рдХреЛ рдЪрд▓рд╛рдПред рдЪреВрдВрдХрд┐ рдХреЛрдб рд╕рдорд╛рди рд╣реИ, рдареАрдХ рд╣реИ, рдЪрд▓реЛ рдЙрдкрдпреЛрдЧреА рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ - ProxyProcред рдФрд░ рд╣рд░ рдирдХрд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рд┐рд░реНрдл ProxyProc рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдмрд╛рдж, рдкреНрд░реЙрдХреНрд╕реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд┐рд╕ рдХрд╛рд░рдг рд╕реЗ рд╣реБрдИред рд╕реЛрдЪрдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рдЗрд╕ рдирддреАрдЬреЗ рдкрд░ рдкрд╣реБрдВрдЪрд╛ рдХрд┐ рдЖрджрд░реНрд╢ рд╡рд┐рдХрд▓реНрдк рд╕реНрдЯреИрдХ рдкрд░ рдлрд╝рдВрдХреНрд╢рди рд╕рдВрдЦреНрдпрд╛ рдбрд╛рд▓рдирд╛ рд╣реИред рд╣рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдФрд░ рдЭрдВрдбреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ DLL рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреБрд▓ рдореЗрдВ, рд╣рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреА рдЪрд╛рд░ рд▓рд╛рдЗрдиреЗрдВ рдорд┐рд▓рддреА рд╣реИрдВред рдФрд░ рд╣рд╛рдВ, рдЪреВрдВрдХрд┐ рд╣рдо рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рддрдВрддреНрд░ рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╣рдордиреЗ рдХреНрдпрд╛ рдФрд░ рдХрд╣рд╛рдВ рдЧрдбрд╝рдмрдбрд╝ рдХрд┐рдпрд╛, рд╣рдо рдХреЛрдбрд╛рдВрддрд░рдХ рдореЗрдВ рд▓рд┐рдЦреЗрдВрдЧреЗред
1. pushfd // рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди
2. pushad // рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди
3. рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП 2 // рд╕рдВрдЦреНрдпрд╛ рдзрдХреНрдХрд╛
4. рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП ProxyProc // рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 6
рд╣рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдПрд╣рд╕рд╛рд╕ рд╣реИ
рдФрд░ рдпрд╣рд╛рдБ рдХреЛрдб рд╣реИред
1. Library minilib2; 2. 3. Uses Windows; 4. 5. Procedure ProxyProc; assembler; 6. asm 7. end; 8. 9. Procedure FakeProc0001; assembler; 10. asm 11. pushfd 12. pushad 13. push 000000001 14. call ProxyProc 15. end; 16. 17. Procedure FakeProc0002; assembler; 18. asm 19. pushfd 20. pushad 21. push 000000002 22. call ProxyProc 23. end; 24. 25. Exports 26. FakeProc0001 index 1 name 'mySub', 27. FakeProc0002 index 2 name 'myAdd'; 28. Begin 29. End. 7
рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИред рд╣рдо рджреЛ рдирдХрд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрд╕рд▓реА dll рдХреЗ рд╕рдорд╛рди рдирд╛рдо рдФрд░ рд╕рдВрдЦреНрдпрд╛ рджреЗрддреЗ рд╣реИрдВред
рдкреЗрдЪреАрджрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реА рдкреНрд░реЙрдХреНрд╕реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
1. рдлрд╝рдВрдХреНрд╢рди рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рд╕рдВрдЪрд╛рд▓рди рдХрд░реЗрдВ
2. рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрддрд╛ рдЦреЛрдЬреЗрдВ
3. рд╕рднреА рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рдЙрдирдХреА рдореВрд▓ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓реМрдЯрд╛рдПрдВ
4. рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдкрддреЗ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ, рдЬреИрд╕реЗ рдХрд┐ рдХреБрдЫ рднреА рдирд╣реАрдВ рдерд╛ред
рддрджрдиреБрд╕рд╛рд░, рдЗрд╕рдХрд╛ рдХреЛрдб рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
1. const LibName:pAnsiChar = 'MiniLib_.DLL'#0; 2. Procedure DeveloperProc; 3.
рдЕрдм рдЬрдм рд╣рдо рдЗрд╕ рдХреЛрдб рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ 'minilib2.dll' рдорд┐рд▓рддрд╛ рд╣реИред рдЗрд╕реЗ "minilib.dll" рдореЗрдВ рдмрджрд▓реЗрдВ рдФрд░ рдЗрд╕реЗ рдмрджрд▓реЗрдВ, рдФрд░ "minilib.dll" рдХреЛ "minilib_.dll" рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдирд╛рдо рдмрджрд▓реЗрдВред
рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
TestCall.dpr.13: N: = myAdd (1,2);
1. $ 02 рдзрдХреНрдХрд╛
2. $ 01 рдзрдХреНрдХрд╛
3. рдХреЙрд▓ рдбреНрд░рд╛рдлреНрдЯ ptr [$ 0040cba4] // myAdd рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдирдХрд▓реА рдореЗрдВ рдЬрд╛рдПрдВ
4. рдореВрд╡ [$ 0040cbac], рдИрдПрдХреНрд╕рдПрдХреНрд╕
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 9
рд▓рд┐рд╕реНрдЯ 9 рдкрд╣рд▓реЗ рд╕реЗ рджреЗрдЦреЗ рдЧрдП рдХреЛрдб рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдЬреЛ рдбреАрдПрд▓ рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕реНрдЯреИрдХ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдиреАрдЪреЗ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рджрд░реНрдЬ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд░реНрдЬреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЖрдиреЗ рдХреЗ рдмрд╛рдж рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд рд▓рд╛рдЗрди 3 рдкрд░ рдХреЙрд▓ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рдмрд╛рджред
EAX 00364434 EBX 7FFDA000 ECX 00000000 EDX 00000003 рдИрдПрд╕рдЖрдИ 16 рдП 1 рдПрдл 224 рдИрдбреАрдЖрдИ 13D84260 рдИрдмреАрдкреА 0012FFC0 рдИрдПрд╕рдкреА 0012FFA4 EIP 00364434 рдИрдПрдлрдПрд▓ 00000246 рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 10
| 0012FFAC 00000002 // рджреВрд╕рд░рд╛ рддрд░реНрдХ 0012FFA8 00000001 // рдкрд╣рд▓рд╛ рддрд░реНрдХ -> 0012FFA4 0040811A // рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдкрд░ рд╡рд╛рдкрд╕реА рдкрддрд╛ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 11
|
рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдмрд╛рдИрдВ рдУрд░ рдЕрдкрдиреА рдлреЛрд░-рд▓рд╛рдЗрди рдлрд░реНрдЬреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдХреЛрдб рджреЗрдЦрддреЗ рд╣реИрдВ рдФрд░ рд╕рдореАрдкрд╕реНрде рдЕрд╡рд╕реНрдерд╛ рдореЗрдВ рджрд╛рдИрдВ рдУрд░ рд╕реНрдерд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рд▓рд╛рдЗрди 4 рдкрд░ рдХреЙрд▓ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж,
minilib2.myAdd: // рд╡рд╣ fakeProc0002 рд╣реИ 1. рдкреБрд╖реНрдкрдХ 2. рдкреБрд╖рдж 3. $ 02 рдзрдХреНрдХрд╛ 4. рдХреЙрд▓ $ 00364408 // рдХреЙрд▓ рдкреНрд░реЙрдХреНрд╕реАрдкреНрд░реЛрдХ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 12
| 0012FFAC 00000002 // рджреВрд╕рд░рд╛ рддрд░реНрдХ 0012FFA8 00000001 // рдкрд╣рд▓рд╛ рддрд░реНрдХ 0012FFA4 0040811A // рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдкрд░ рд╡рд╛рдкрд╕реА рдкрддрд╛ 0012FFAO 00000346 // рдзреНрд╡рдЬ рд░рдЬрд┐рд╕реНрдЯрд░ 0012FF9C 00364434 // рд░рдЬрд┐рд╕реНрдЯрд░ EAX 0012FF98 00000000 // ECX рд░рдЬрд┐рд╕реНрдЯрд░ 0012FF94 00000003 // рд░рдЬрд┐рд╕реНрдЯрд░ EDX 0012FF90 7FFDA000 // EBX рд░рдЬрд┐рд╕реНрдЯрд░ 0012FF8C 0012FFAO // рдИрдПрд╕рдкреА рд░рдЬрд┐рд╕реНрдЯрд░ 0012FF88 0012FFC0 // EBP рд░рдЬрд┐рд╕реНрдЯрд░ 0012FF84 16A1F224 // рдИрдПрд╕рдЖрдИ рд░рдЬрд┐рд╕реНрдЯрд░ 0012FF80 13D84260 // рд░рдЬрд┐рд╕реНрдЯрд░ рдИрдбреАрдЖрдИ 0012FF7C 00000002 // рдлрд╝рдВрдХреНрд╢рди рд╕рдВрдЦреНрдпрд╛ (02) -> 0012FF78 0036443D // рдлрд╝рд░реНрдЬрд╝реА рдкрддреЗ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВрдкреНрд░реЛрдХреНрд░реЗрд╕реА 2000 рдлрд░реНрдЬреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 13
|
рдЕрдЧрд▓рд╛, рд╣рдо рдкрдВрдХреНрддрд┐ 6 тАЛтАЛрдХреЗ рдмрд╛рдж рд╕рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдкрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдмрд╛рдИрдВ рдУрд░ рджрд╛рдИрдВ рдУрд░ рдкреНрд░реЙрдХреНрд╕реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛрдб рджреЗрдЦрддреЗ рд╣реИрдВред рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдирдХрд▓реА рдкрддреЗ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд░реНрдЬреА рдкреНрд░реЛрдХреНрд░реЗрд╕реА 22 рдирдХрд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрдЯреИрдХ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕реНрдЯреИрдХ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрддрд╛ рд╕реНрдЯреИрдХ рдкрд░ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред
minilib2.ProxyProc: 1. esp рдЬреЛрдбрд╝реЗрдВ, $ 04 2. рдзрдХреНрдХрд╛ рдбреНрд░рд╛рдлреНрдЯ ptr [$ 0036782c] 3. $ 00364394 рдкрд░ рдХреЙрд▓ рдХрд░реЗрдВред рдпрд╣ LoadLibrary рд╣реИ 4. рдкреБрд╢ рдИрдПрдХреНрд╕ 5. $ 00364384 рдкрд░ рдХреЙрд▓ рдХрд░реЗрдВред рдпрд╣ GetProcAdress рд╣реИ 6. рдЪрд▓ [esp- $ 04], eax 7. рдкреЛрдкрдб 8. рдЦрд╕рдЦрд╕ 9. рдЬреЗрдПрдордкреА рдбреНрд░рд╛рдлреНрдЯ ptr [esp- $ 28] рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 14
| 0012FFAC 00000002 // рджреВрд╕рд░рд╛ рддрд░реНрдХ 0012FFA8 00000001 // рдкрд╣рд▓рд╛ рддрд░реНрдХ 0012FFA4 0040811A // рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдкрд░ рд╡рд╛рдкрд╕реА рдкрддрд╛ 0012FFAO 00000346 // рдзреНрд╡рдЬ рд░рдЬрд┐рд╕реНрдЯрд░ 0012FF9C 00364434 // рд░рдЬрд┐рд╕реНрдЯрд░ EAX 0012FF98 00000000 // ECX рд░рдЬрд┐рд╕реНрдЯрд░ 0012FF94 00000003 // рд░рдЬрд┐рд╕реНрдЯрд░ EDX 0012FF90 7FFDA000 // EBX рд░рдЬрд┐рд╕реНрдЯрд░ 0012FF8C 0012FFAO // рдИрдПрд╕рдкреА рд░рдЬрд┐рд╕реНрдЯрд░ 0012FF88 0012FFC0 // EBP рд░рдЬрд┐рд╕реНрдЯрд░ 0012FF84 16A1F224 // рдИрдПрд╕рдЖрдИ рд░рдЬрд┐рд╕реНрдЯрд░ -> 0012FF80 13D84260 // рд░рдЬрд┐рд╕реНрдЯрд░ рдИрдбреАрдЖрдИ 0012FF7C 0037437C // рдЗрд╕ dll рдореЗрдВ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдкрддрд╛ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 15
|
рдЕрдЧрд▓рд╛, рд╣рдо рдмрд╛рдИрдВ рдУрд░ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдФрд░ рд╕реНрдЯреИрдХ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ рдЬреЗрдПрдордкреА рд╕реЗ рдкрд╣рд▓реЗ рджреЗрдЦрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН, рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 14 рдХреА рд▓рд╛рдЗрди 9 рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕реНрдЯреИрдХ рдФрд░ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдлрд░реНрдЬреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рд░рд╛рдЬреНрдп рдХреЗ рд╕рдорд╛рди рд╣реЛрддреА рд╣реИ (рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 10 рдФрд░ 11 рдХреА рд╕реВрдЪреА), рдФрд░ред рд╣рдореЗрдВ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╕рд╣реА DLL рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЕрдВрддрд░ рдорд╣рд╕реВрд╕ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред (рд╣реЗрдХреНрд╕рд╛рдбреЗрд╕рд┐рдорд▓ рдореЗрдВ 28 рджрд╢рдорд▓рд╡ рдореЗрдВ 40 рд╣реИ, рдЕрд░реНрдерд╛рддреН, 10 рдЧреБрдирд╛ 4 рдмрд╛рдЗрдЯреНрд╕ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдЯреИрдХ рдкрд░ рдареАрдХ рдЙрд╕реА рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ (рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 17) рдХрд╛ рдкрддрд╛ рд╣реИ)ред
EAX 00364434 EBX 7FFDA000 ECX 00000000 EDX 00000003 рдИрдПрд╕рдЖрдИ 16 рдП 1 рдПрдл 224 рдИрдбреАрдЖрдИ 13D84260 рдИрдмреАрдкреА 0012FFC0 рдИрдПрд╕рдкреА 0012FFA4 рдИрдЖрдИрдкреА 00364422 рдИрдПрдлрдПрд▓ 00000246 рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 16
| 0012FFAC 00000002 // рджреВрд╕рд░рд╛ рддрд░реНрдХ 0012FFA8 00000001 // рдкрд╣рд▓рд╛ рддрд░реНрдХ -> 0012FFA4 0040811A // рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдкрд░ рд╡рд╛рдкрд╕реА рдкрддрд╛ 1. 0012FFAO 00000346 // рдЭрдВрдбрд╛ рд░рдЬрд┐рд╕реНрдЯрд░ 2. 0012FF9C 00364434 // рд░рдЬрд┐рд╕реНрдЯрд░ EAX 3. 0012FF98 00000000 // ECX рд░рдЬрд┐рд╕реНрдЯрд░ 4.0012FF94 00000003 // рд░рдЬрд┐рд╕реНрдЯрд░ EDX 5.0012FF90 7FFDA000 // EBX рд░рдЬрд┐рд╕реНрдЯрд░ 6. 0012FF8C 0012FFAO // рдИрдПрд╕рдкреА рд░рдЬрд┐рд╕реНрдЯрд░ 7.0012FF88 0012FFC0 // EBP рд░рдЬрд┐рд╕реНрдЯрд░ 8. 0012FF84 16A1F224 // рдИрдПрд╕рдЖрдИ рд░рдЬрд┐рд╕реНрдЯрд░ 9.0012FF80 13D84260 // рд░рдЬрд┐рд╕реНрдЯрд░ рдИрдбреАрдЖрдИ 10. 0012FF7C 0037437C // рдЗрд╕ dll рдореЗрдВ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдкрддрд╛ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 17
|
рдФрд░ рдЕрдВрдд рдореЗрдВ, рдбреЗрд╡рд▓рдкрд░ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ред
рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдХреЛрдбрд╛рдВрддрд░рдХ рдореЗрдВ рд▓рд┐рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред рдпрд╣рд╛рдВ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрд╡рд░реЛрдзрдХреЛрдВ рдФрд░ рд╕реНрдЯреИрдХ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдиреБрдХрд╕рд╛рди рдкрд╣реБрдВрдЪрд╛рдП рдмрд┐рдирд╛, рдЕрд╡рд░реЛрдзрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдХреЛрдб рдЬрд┐рд╕реЗ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдлрд╝рдВрдХреНрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
1. Procedure DeveloperProc; 2. var 3. F:text; 4. _ebp:PAnsiChar;
рд▓рд╛рдЗрди 7 рдкрд░, рдмреЗрд╕ рдкреЙрдЗрдВрдЯрд░ рдХреЛ _ebp рд╡реИрд░рд┐рдПрдмрд▓ рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛
9 рд▓рд╛рдЗрди рдкрд░, рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдЪрд░ рдПрдл рдХреЛ рд╕рдВрдмрджреНрдз рдХрд░реЗрдВ
рдСрди рд▓рд╛рдЗрди 10 рдиреЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╛рдЗрд▓ рдЦреЛрд▓реА
рд▓рд╛рдЗрди 11 рдкрд░ рд╡рд░реНрддрдорд╛рди рддрд┐рдерд┐ рдФрд░ рд╕рдордп, рдФрд░ рддрдерд╛рдХрдерд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреА рд╕рдВрдЦреНрдпрд╛ рджрд░реНрдЬ рдХреА рдЧрдИ
рд╣рдореЗрдВ рдЖрдзрд╛рд░ рдкреЙрдЗрдВрдЯрд░ рдореЗрдВ рддреАрди рдмрд╛рд░ 4 рдмрд╛рдЗрдЯреНрд╕ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдлрд╝рдВрдХреНрд╢рди рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд╛рдж рд╕реНрдЯреИрдХ рдореЗрдВ рддреАрди рдкреЙрдЗрдВрдЯрд░реНрд╕ рд╣реИрдВ: 1. рдирдХрд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реВрдЪрдХ, 2. рдкреНрд░реЙрдХреНрд╕реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ рд▓реМрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реВрдЪрдХ, рдФрд░ 3. рдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рд░рдЦреЗ рдЧрдП рд╕реНрдЯреИрдХ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВред рдзрдХреНрдХрд╛ рджреЗрдирд╛)ред рд╕реВрдЪрдХ рдкреНрд░рдХрд╛рд░ PAnsiChar рдХреЛ рдЪреБрдирд╛ рдЧрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝ рдФрд░ рдШрдЯрд╛рд╡ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рд▓рд╛рдЗрди 12 рдиреЗ рдлрд╛рдЗрд▓ рдмрдВрдж рдХрд░ рджреАред
рдпрд╣рд╛рдБ рдЙрджрд╛рд╣рд░рдг рдбрд╛рдЙрдирд▓реЛрдб
рдХрд░реЗрдВ ред
PS рдкреНрд░реЙрдХреНрд╕реА- GDS32ред рд╕рднреА рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдиреЗ рдСрдкрд░реЗрд╢рди рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХреА, рд╕рднреА рдХреЙрд▓ рдХреЛ рдПрдХ рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЕрд╕рдлрд▓ SQL рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдкрдХрдбрд╝рд╛ рдФрд░ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
PPS рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рд▓реЗрдЦрдХ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдФрд░ рд╕рд╛рдордЧреНрд░реА рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рдирд╣реАрдВ рд╣реИред рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рдХреЗрд╡рд▓ рд╢реИрдХреНрд╖рд┐рдХ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИред