ΠΠ½Π΅Π²Π½ΠΈΠΊΠΈ ΡΠ°ΠΉΠ½ΠΈΠΊΠ°
ΠΠ½Π΅Π²Π½ΠΈΠΊΠΈ ΡΠ°ΠΉΠ½ΠΈΠΊΠ°Π‘ΡΠ΅ΠΊ.
ΠΠΎΡΡΠΌΠΎΠΉ Π΄Π΅Π½Ρ
Π‘ΡΠ΅ΠΊ — ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ Π²ΡΠ΄Π΅Π»Π΅Π½Π½Π°Ρ ΠΎΠ±Π»Π°ΡΡΡ ΠΏΠ°ΠΌΡΡΠΈ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΠΈΠ»ΠΈ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ .
ΠΡ Π²ΡΡ Π²ΡΠ΅ΠΌΡ Π½Π°Π±Π»ΡΠ΄Π°Π΅ΠΌ ΡΠ°ΠΊΡΡ ΡΠΎΡΠΌΡ Π·Π°ΠΏΠΈΡΠΈ (prax03.com):
00000000: B80300 mov ax,00003 00000003: CD10 int 010 00000005: B402 mov ah,002 00000007: 8B167501 mov dx,[0175] 0000000B: CD10 int 010 0000000D: FEC6 inc dh 0000000F: 80C203 add dl,003 00000012: 89167501 mov [0175],dx 00000016: B409 mov ah,009 00000018: BA5001 mov dx,00150 0000001B: CD21 int 021 0000001D: 803E760119 cmp b,[0176],019 00000022: 75E1 jne 000000005 00000024: B410 mov ah,010 00000026: CD16 int 016 00000028: CD20 int 020
Π― ΠΈΠΌΠ΅Ρ Π² Π²ΠΈΠ΄Ρ, ΡΡΠΎ Π°Π΄ΡΠ΅ΡΠ° ΡΠ°ΡΡΡΡ Π²Π½ΠΈΠ·. 0 — Π²ΡΡΠ΅ Π²ΡΠ΅Ρ (ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ²Π°Ρ ΡΡΡΠΎΠΊΠ° Π² ΠΊΠ½ΠΈΠ³Π΅), 28 — Π½ΠΈΠΆΠ½ΡΡ ΡΡΡΠΎΡΠΊΠ°.
Π’Π°ΠΊ Π²ΠΎΡ Π² ΡΡΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΡΠ΅ΠΊ ΡΠ°ΡΡΡΡ Π²Π²Π΅ΡΡ
ΠΠ½ΠΎ ΡΡΠ΅ΠΊΠ° Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎ ΡΠ°ΠΌΠΎΠΌΡ ΡΡΠ°ΡΡΠ΅ΠΌΡ Π°Π΄ΡΠ΅ΡΡ, Π° Π²Π΅ΡΡΠΈΠ½Π° — ΠΏΠΎ ΡΠ°ΠΌΠΎΠΌΡ ΠΌΠ»Π°Π΄ΡΠ΅ΠΌΡ Π°Π΄ΡΠ΅ΡΡ.
ΠΠ° Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ° ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΠ΅Π³ΠΈΡΡΡ-ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ESP — ΡΡΠΎ Π΅Π³ΠΎ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ (Stack Pointer — ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΡΡΠ΅ΠΊΠ°).
ΠΠΈΠ΄ΠΈΡΠ΅, prax03 Π² ΡΡΡΠΎΠΊΠ΅ 12h ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠ° DX, Π° Π² ΡΡΡΠΎΠΊΠ΅ 07 ΠΏΡΠΈ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΎΡ ΠΎΠ΄Π΅ ΡΠΈΠΊΠ»Π° ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π²ΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. Π Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΡΠ΅ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π΅ΡΠ΄ΠΎΠ±Π½ΠΎ, Π½ΠΎ Π΅ΡΠ»ΠΈ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π½ΡΠΆΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π· ΡΠΎΡ ΡΠ°Π½ΡΡΡ ΡΠ°Π·Π½ΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΡ, ΡΠΎ Π»ΡΡΡΠ΅ Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΡΠ΅ΡΠ΅Π· ΡΡΠ΅ΠΊ. ΠΠ»Ρ Π·Π°ΠΏΠΈΡΠΈ Π² ΡΡΠ΅ΠΊ Π΅ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° PUSH.
ΠΡΠΈΠΌΠ΅Ρ:
push EDX ; ΡΠΎΠ»ΠΊΠ½ΡΡΡ Π² ΡΡΠ΅ΠΊ (ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ Π² ΡΡΠ΅ΠΊ) ... pop EDX ; ΠΈΠ·Π²Π»Π΅ΡΡ ΠΈΠ· ΡΡΠ΅ΠΊΠ° Π² EDX (Π²ΡΡΠΎΠ»ΠΊΠ½ΡΡΡ Π² EDX)
ΠΡΡΠ³ΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ:
push EDX ; ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ Π² ΡΡΠ΅ΠΊ ... pop EAX ; ΠΈΠ·Π²Π»Π΅ΡΡ ΠΈΠ· ΡΡΠ΅ΠΊΠ° Π² EAX (Π² EAX Π±ΡΠ΄Π΅Ρ ΡΠΎ, ΡΡΠΎ Π±ΡΠ»ΠΎ Π² EDX)ΠΡΠΈΡΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π² ΡΡΠ΅ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡ ΠΎΡΠ΅Π½Ρ ΠΌΠ½ΠΎΠ³ΠΎ.
push EAX ; ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ Π² ΡΡΠ΅ΠΊ push EBX ; ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ Π² ΡΡΠ΅ΠΊ push ECX ; ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ Π² ΡΡΠ΅ΠΊ push EDX ; ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ Π² ΡΡΠ΅ΠΊ push 01234h ; ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ Π² ΡΡΠ΅ΠΊ ... pop ESI ; ΠΈΠ·Π²Π»Π΅ΡΡ ΠΈΠ· ΡΡΠ΅ΠΊΠ° (Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 01234h Π±ΡΠ»ΠΎ ΡΠ²Π΅ΡΡ Ρ, Π·Π½Π°ΡΠΈΡ, ΠΎΠ½ΠΎ ΠΈ Π²ΡΠΉΠ΄Π΅Ρ) pop EDX ; ΠΈΠ·Π²Π»Π΅ΡΡ ΠΈΠ· ΡΡΠ΅ΠΊΠ° Π² EDX pop ECX ; ΠΈΠ·Π²Π»Π΅ΡΡ ΠΈΠ· ΡΡΠ΅ΠΊΠ° Π² ECX pop EBX ; ΠΈΠ·Π²Π»Π΅ΡΡ ΠΈΠ· ΡΡΠ΅ΠΊΠ° Π² EBX pop EAX ; ΠΈΠ·Π²Π»Π΅ΡΡ ΠΈΠ· ΡΡΠ΅ΠΊΠ° Π² EAX
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡΡΡ Π² ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅. ΠΠ΅ΡΡΠΈΠ½Π° Π²ΡΡ ΠΎΠ΄ΠΈΡ ΠΏΠ΅ΡΠ²ΠΎΠΉ, Π° Π΄Π½ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ. ΠΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅, ΡΠ»Π°Π²Π° ΠΠΎΠ³Ρ, ΠΌΡΠ΄ΡΠΈΡΡ ΡΠΎ ΡΡΠ΅ΠΊΠΎΠΌ ΠΏΡΠΈΠ΄ΡΡΡΡ ΠΌΠ°Π»ΠΎ, Π½ΠΎ Π΅ΡΠ»ΠΈ Π²Ρ Π½Π΅ ΡΠ»ΠΎΠ²ΠΈΡΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏ, ΡΠΎ ΠΏΠΈΡΠ°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π±ΡΠ΄Π΅Ρ ΡΡΡΠ΄Π½ΠΎΠ²Π°ΡΠΎ.
ΠΠ°ΡΡΠΎΡ! ΠΡ-ΠΊΠ° ΠΈΠ΄ΠΈ ΡΡΠ΄Π°… Π§ΡΠΎ ΡΡΡ Ρ ΡΠ΅Π±Ρ Π² ΠΊΠΎΡΠ·ΠΈΠ½ΠΊΠ΅? Π, Π·Π°Π²ΡΡΠ°ΠΊ! Π’Π°ΠΊ, ΡΠ²Π΅ΡΡ Ρ ΡΠΉΡΠ°, ΠΏΠΎΠ΄Π΅ΡΠΆΠΈ, Π±ΡΡΠ΅ΡΠ±ΡΠΎΠ΄, Π±ΡΡΡΠ»ΠΊΠ°… ΠΏΠΎΠ΄ΡΡΠΊΠ°? Π Π·Π°ΡΠ΅ΠΌ ΡΠ΅Π±Π΅ ΠΏΠΎΠ΄ΡΡΠΊΠ°? Π’Ρ ΡΡΠΎ, Π½Π° Π²Π°Ρ ΡΠ΅ ΡΠΏΠ°ΡΡ ΡΠΎΠ±ΡΠ°Π»ΡΡ! Π Π½Ρ, ΠΎΡΠ΄Π°ΠΉ ΡΡΠ΄Π° ΠΊΠΎΡΠ·ΠΈΠ½Ρ. Π―ΠΉΡΠ°-ΡΠΎ ΡΡΡΡΠ΅, ΡΡΡΡ ΡΠ΅Π±Ρ Π΄Π΅ΡΠΈ! Π Π±ΡΡΠ΅ΡΠ±ΡΠΎΠ΄Ρ ΠΈΠ·ΠΌΠ°Π·Π°Π», ΠΈ ΠΏΠΎΠ΄ΡΡΠΊΡ ΠΈΡΠΏΠΎΡΡΠΈΠ». ΠΠ°ΠΊΠΎΠ³ΠΎ ΡΠ»Π΅ΠΉΡΠ° ΡΡ ΠΈΡ Π½Π΅ ΡΠ²Π°ΡΠΈΠ»? ΠΠ΄ΠΈ ΠΎΡΡΡΠ΄Π°, ΡΠ°ΠΌ Π·Π½Π°Ρ, ΡΡΠΎ ΡΠΉΡΠ° ΡΠ²Π΅ΡΡ Ρ ΠΊΠ»Π°Π΄ΡΡ.
ΠΠ°ΠΌΡΡΡ ΠΏΠΎΠ΄ ΡΡΠ΅ΠΊ Π²ΡΠ΄Π΅Π»ΡΠ΅Ρ Windows.
Π’Π΅ΠΏΠ΅ΡΡ ΠΎΡΠΌΡΡΠ»Π΅Π½Π½ΠΎ Π²Π΅ΡΠ½ΡΠΌΡΡ ΠΊ Π½Π°ΡΠ΅ΠΉ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΏΠΎΠ΄ ΡΠΎΡΡΠΎΡΠΊΠΈ:
ΠΠ΄ΡΠ΅ΡΠ° Π±Π°ΠΉΡΡ ΠΈΠΌΠ΅Π½Π° ΠΎΠΏΠ΅ΡΠ°Π½Π΄Ρ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ 00401000 6A 00 push 0 ; /Style = MB_OK|MB_APPLMODAL 00401002 68 00304000 push 00403000 ; |Title = "It's the first your program for Win32" 00401007 68 21304000 push 00403021 ; |Text = "Assembler language for Windows is a fable!" 0040100C 6A 00 push 0 ; |hOwner = NULL 0040100E E8 07000000 call < jmp.&user32.MessageBoxA> ; \MessageBoxA 00401013 6A 00 push 0 ; /ExitCode = 0 00401015 E8 06000000 call < jmp.&kernel32.ExitProcess> ; \ExitProcess 0040101A FF25 08204000 jmp dword ptr ds:[< user32.MessageBo> ; user32.MessageBoxA 00401020 FF25 00204000 jmp dword ptr ds:[< kernel32.ExitPro> ; kernel32.ExitProcess
ΠΠΎΠΌΠ°Π½Π΄Π° Push ΠΊΠ»Π°Π΄ΡΡ Π² ΡΡΠ΅ΠΊ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π² Π½Π΅ΠΉ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄Π²Π° Π±Π°ΠΉΡΠ° ΠΈΠ»ΠΈ ΡΠ΅ΡΡΡΠ΅. Π 32-Π±ΠΈΡΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ 32-Π±ΠΈΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΠΎ Π΅ΡΡΡ dword (4 Π±Π°ΠΉΡΠ°). Π’Π°ΠΊ ΡΡΠΎ Π΄Π»Ρ Π½Π°Ρ ΡΠ΅ΠΏΠ΅ΡΡ ΠΎΠ΄Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠ΅ΠΊΠ΅ 4 Π±Π°ΠΉΡΠ°.
Push 0 ; ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π² ΡΡΠ΅ΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 00000000 Push 00403000 ; ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π² ΡΡΠ΅ΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 00403000 Push 00403021 ; ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π² ΡΡΠ΅ΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 00403021 Push 0 ; ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π² ΡΡΠ΅ΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 00000000
ΠΡΠΎ, Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ, ΡΠ΅Π»ΠΎΠ΅ ΠΈ Π΄Π»Ρ «ΡΠ΄ΠΎΠ±ΡΡΠ²Π°» ΡΡΠ΅Π½ΠΈΡ, ΠΌΠ»Π°Π΄ΡΠΈΠΉ Π±Π°ΠΉΡ ΡΠΆΠ΅ ΡΠΏΡΠ°Π²Π°, ΡΡΠ°ΡΡΠΈΠΉ ΡΠ»Π΅Π²Π°.
ΠΠ°ΡΡΠΎΡ, ΡΡ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΠ», ΡΡΠΎ Π½Π° Π½Π°ΡΠΈΡ
ΡΠ΅ΡΡΠ΅ΠΆΠ°Ρ
Π² ΡΠ΅Π»ΠΎΠΉ Π±ΠΎΠ΅Π²ΠΎΠΉ Π΅Π΄ΠΈΠ½ΠΈΡΠ΅ ΠΠΈΠ½Π°ΡΠ½ΠΈΠΊΠΎΠ² Π±Π°ΠΉΡΡ ΡΡΡΠΎΡΡΡΡ ΠΏΠΎ ΡΡΠ°ΡΡΠΈΠ½ΡΡΠ²Ρ ΡΠ»Π΅Π²Π° Π½Π°ΠΏΡΠ°Π²ΠΎ?
ΠΠ°ΠΆΠ΄ΡΠΉ ΠΌΠ»Π°Π΄ΡΠΈΠΉ — ΡΠ°ΠΌΡΠΉ Π»Π΅Π²ΡΠΉ, ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΡΠ°ΡΡΠΈΠΉ — ΡΠ°ΠΌΡΠΉ ΠΏΡΠ°Π²ΡΠΉ (Π½Π° ΡΠΈΠ³ ΡΠ°ΠΊΠΈΠ΅ ΡΠ΅ΡΡΡΠΆΠΈ :).
Π£ Π½ΠΈΡ
ΡΠ°ΠΌ Π² Π³Π»Π°Π²Π½ΠΎΠΌ ΡΡΠ°Π±Π΅ Π΅ΡΡΡ Π΅ΡΡ Π·Π°ΠΏΡΡΠΊΠ° — ΡΡΠ΅ΠΊ.
ΠΠ½ Π² ΡΠ΅ΡΡΠ΅ΠΆΠ°Ρ
ΠΈΠ΄ΡΡ ΠΎΡ Π΄Π½Π° Π½Π°Π²Π΅ΡΡ
. Π¦Π΅Π»ΡΠ΅ (word ΠΈΠ»ΠΈ dword) Π² Π½ΡΠΌ ΡΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ°ΠΊ: ΠΎΡ Π΄Π½Π° Π½Π°Π²Π΅ΡΡ
.
ΠΠ΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ, ΡΡΠ΅ΠΊ ΠΏΡΠΎΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ Π² Π²ΡΡΠΎΡΡ, ΡΠ΅ΠΌ Π² ΠΎΠ΄Π½Ρ ΡΡΡΠΎΠΊΡ. ΠΠΎΡ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡΡ Π² ΡΡΠ΅ΠΊΠ΅ ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΡΡΡΠΎΠΊΠΈ 40100Eh Π² Π½Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅.
00000000 00403021 00403000 00000000 ........
ΠΠ°ΠΆΠ΄Π°Ρ ΡΡΡΠΎΠΊΠ° Π·Π΄Π΅ΡΡ — ΠΎΠ΄Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠ΅ΠΊΠ΅. ΠΠΎΠ½ΡΡΠΈΠ΅ Π΄Π½ΠΎ ΠΎΡΠ΅Π½Ρ Π½Π°Π³Π»ΡΠ΄Π½ΠΎ ΠΎΠ±ΡΡΡΠ½ΡΠ΅Ρ, ΠΊΠ°ΠΊ ΡΡΡΡΠΎΠ΅Π½ ΡΡΠ΅ΠΊ.
ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ΄Π°Π»ΠΈΠΌ ΠΈΠ· ΠΈΡΡ ΠΎΠ΄Π½ΠΈΠΊΠ° ΡΡΡ ΡΡΡΠΎΠΊΡ:
invoke MessageBox, NULL, addr MsgBoxText, addr MsgBoxCaption, MB_OK
Π Π²ΠΏΠΈΡΠ΅ΠΌ Π²ΠΌΠ΅ΡΡΠΎ Π½Π΅Ρ Π²ΠΎΡ ΡΠ°ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
push 0AAAAAAAAh push 0BBBBBBBBh push 0CCCCCCCCh push 0DDDDDDDDh pop EAX pop ECX pop EDX pop EBX
Π‘ΠΎΠ±Π΅ΡΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΅ΡΡ ΡΠ°Π·.
ΠΡΠΊΡΠΎΠΉΡΠ΅ Π² Olly.
Π’ΠΎ, ΡΡΠΎ Π²Ρ Π΄Π΅Π»Π°Π»ΠΈ Π² ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ΅ CodeView ΠΊΠ»Π°Π²ΠΈΡΠ΅ΠΉ F10, Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎ-ΡΠΌΠ½ΠΎΠΌΡ:
ΠΏΠΎΡΠ°Π³ΠΎΠ²Π°Ρ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ° ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π±Π΅Π· Π·Π°Ρ
ΠΎΠ΄Π° Π² ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ. Π Olly ΡΠ°ΠΊΠΎΠΉ «ΡΠ°Π³» Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΊΠ»Π°Π²ΠΈΡΠ° F8.
ΠΠ΄ΡΠ΅ΡΠ° ΠΠ°ΠΉΡΡ ΠΠΌΠ΅Π½Π° ΠΠΏΠ΅ΡΠ°Π½Π΄Ρ 00401000 68 AAAAAAAA push AAAAAAAA 00401005 68 BBBBBBBB push BBBBBBBB 0040100A 68 CCCCCCCC push CCCCCCCC 0040100F 68 DDDDDDDD push DDDDDDDD 00401014 58 pop eax 00401015 59 pop ecx 00401016 5A pop edx 00401017 5B pop ebx
ΠΠΎΠ³Π΄Π° Π²Ρ Π΄ΠΎΠΉΠ΄ΡΡΠ΅ Π΄ΠΎ ΡΡΡΠΎΠΊΠΈ 401014h (F8 ΡΠ΅ΡΡΡΠ΅ ΡΠ°Π·Π°), ΡΡΠ΅ΠΊ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ Π²ΠΎΡ ΡΠ°ΠΊ:
0012FFB4 DDDDDDDD 0012FFB8 CCCCCCCC 0012FFBC BBBBBBBB 0012FFC0 AAAAAAAA ... ...
ΠΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ Π² ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ΅, ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ! ΠΠΈΠΆΠ½ΡΡ ΠΏΡΠ°Π²Π°Ρ ΡΠ°ΡΡΡ.
ΠΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΠ»ΠΈ ΠΏΠΎΠ½ΡΡΡ, ΡΡΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΊΠ»Π°Π΄ΡΠ²Π°Π΅ΡΡΡ ΡΠ²Π΅ΡΡ
Ρ. ΠΠΎΠ»ΡΡΠ°Π΅ΡΡΡ, ΡΡΠ΅ΠΊ ΡΠ°ΡΡΡΡ Π²Π²Π΅ΡΡ
.
ΠΠΎΠ»ΡΡΠ°Π΅ΡΡΡ, ΡΠ΅Π³ΠΈΡΡΡ ESP Ρ ΠΊΠ°ΠΆΠ΄ΡΠΌ Π½ΠΎΠ²ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΡΠ΅ΠΊΠ° ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΡΡΡ.
Π ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΈΠ· ΡΡΠ΅ΠΊΠ° ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ESP ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ Π½Π° 4 (ΠΈΠ»ΠΈ Π½Π° 2 Π² 16-Π±ΠΈΡΠ½ΡΡ
ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ
).
Π Π΅ΡΡ ΡΡΠ΅ΠΊ Π½ΡΠΆΠ½ΠΎ Π²ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡ, ΠΈΠ½Π°ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ. ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Π°ΡΠΈ Π΄Π°Π½Π½ΡΠ΅ Π² ΡΡΠ΅ΠΊΠ΅ ΠΎΡΡΠ°Π±ΠΎΡΠ°Π»ΠΈ ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π½ΡΠΆΠ½Ρ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΠΉΡΠ΅ Π²Π΅ΡΡΠΈΠ½Ρ Π² ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΎΠ½Π° Π·Π°Π½ΠΈΠΌΠ°Π»Π° ΡΠ°Π½ΡΡΠ΅ — ΡΡΠΎ ΠΈ Π΅ΡΡΡ Π²ΡΡΠ°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅. ΠΡΠ»ΠΈ Π²Ρ ΡΠ°ΠΊ Π½Π΅ ΡΠ΄Π΅Π»Π°Π΅ΡΠ΅, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π²ΡΠ·ΠΎΠ²Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ.
Π‘ΡΠ΅ΠΊ, ΠΏΠΎΠΆΠ°Π»ΡΠΉ, ΡΠ°ΠΌΠΎΠ΅ ΡΠ»ΠΎΠΆΠ½ΠΎΠ΅ ΠΏΠΎΠ½ΡΡΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½ΡΠΆΠ½ΠΎ ΡΡΠ²ΠΎΠΈΡΡ Π΄Π»Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π½Π° ΠΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ΅. Π§Π΅ΡΡΠ½ΠΎ-ΡΠ΅ΡΡΠ½ΠΎ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΠΎΠΉΠΌΡΡΠ΅ ΡΡΠΎ, Π·Π½Π°ΡΠΈΡ, Π²Ρ ΡΠΎΡΠ½ΠΎ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΡΠ²ΠΎΠΈΡΡ Π²ΡΡ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠ΅. ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Π½ΡΠΆΠ½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°, ΠΏΠΎΠΌΠ½Ρ, Ρ ΡΡΠΈ Π΄Π½Ρ ΠΏΠΎΡΡΠ°ΡΠΈΠ» Π½Π° ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΡΠ΅ΠΊΠ°. ΠΠ°Π»Π°ΡΠ½ΠΈΠΊΠΎΠ² ΠΎΠ±ΠΌΠ°Π½ΡΠ», ΡΠΊΠ°Π·Π°Π», ΡΡΠΎ ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ. Π’Π°ΠΊ ΠΈ Π±ΡΠ»ΠΎ, ΠΊΠΎΠ³Π΄Π° Ρ Π΅Π³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π», Π° Π²ΠΎΡ ΠΊΠΎΠ³Π΄Π° ΡΠ²ΠΎΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΊΠΈ ΡΡΠ°Π» ΠΏΠΈΡΠ°ΡΡ, ΡΡΠ΅ΠΊ Π²ΡΠ·Π²Π°Π» Π½Π°ΠΈΠ±ΠΎΠ»ΡΡΠΈΠ΅ Π·Π°ΡΡΡΠ΄Π½Π΅Π½ΠΈΡ.
Π’ΡΠΈ Π΄Π½Ρ — Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π»Ρ ΡΠ°ΠΌΠΎΠ³ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΠ³ΠΎ ΡΠΎΠΊΡΡΠ°.
Π§ΡΠΎΠ± ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ ΡΡΠΎ-ΡΠΎ Π² ΡΡΠ΅ΠΊ, ΠΏΠΈΡΠΈΡΠ΅:
push ΡΡΠΎ-ΡΠΎ
| ΠΡΠΎΠΈΡΡ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ | ΠΡ Π°Π½Π³Π». ΡΠ»ΠΎΠ²Π° push — ΡΠΎΠ»ΠΊΠ°ΡΡ
|
| Π€ΠΎΡΠΌΠ°Ρ | push ΠΎΠΏΠ΅ΡΠ°Π½Π΄ |
| ΠΠ΅ΠΉΡΡΠ²ΠΈΠ΅ | Π’ΠΎΠ»ΠΊΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠ΅ΠΊ |
| ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅ | ΠΡΠ»ΠΈ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ»ΠΊΠ½ΡΡΡ Π² ΡΡΠ΅ΠΊ Π²ΡΠ΅ 8 ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² ΠΎΠ±ΡΠ΅Π³ΠΎ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ (EAX, EBX, ECX, EDX, EBP, ESP, ESI, EDI), ΡΠΎ Π»ΡΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ΄Π½Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ PUSHA/PUSHAD |
Π§ΡΠΎΠ± Π΄ΠΎΡΡΠ°ΡΡ ΡΠΈΡΠ»ΠΎ Ρ «Π²Π΅ΡΡ ΡΡΠΊΠΈ ΡΡΠ΅ΠΊΠ°» ΠΊΡΠ΄Π°-ΡΠΎ, ΠΏΠΈΡΠΈΡΠ΅:
pop ΠΊΡΠ΄Π°-ΡΠΎ
| ΠΡΠΎΠΈΡΡ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ | ΠΡ Π°Π½Π³Π». ΡΠ»ΠΎΠ²Π° pop — ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡ, ΡΠ°ΡΠΊΠΎΡΠ΅Π»ΠΈΠ²Π°ΡΡΡΡ |
| Π€ΠΎΡΠΌΠ°Ρ | POP ΠΎΠΏΠ΅ΡΠ°Π½Π΄ |
| ΠΠ΅ΠΉΡΡΠ²ΠΈΠ΅ | ΠΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΡΡΠ΅ΠΊΠ° |
| ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅ | ΠΡΠ»ΠΈ Π½ΡΠΆΠ½ΠΎ Π΄ΠΎΡΡΠ°ΡΡ ΠΈΠ· ΡΡΠ΅ΠΊΠ° Π²ΡΠ΅ Π ΠΠ, ΡΠ»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ PUSHA, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ POPA/POPAD |
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ (prax06.com).
ΠΠ°Π±Π΅ΡΠΈΡΠ΅ Π² Hiew’e ΡΡΠΈ Π±Π°ΠΉΡΡ:
B8 CD 20 50-EB FD
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ Π½Π° Π°ΡΠΌΠΎΠ²ΡΠΉ Π²ΠΈΠ΄:
ΠΠ΄ΡΠ΅ΡΠ° ΠΠ°ΠΉΡΡ ΠΠΌΠ΅Π½Π° ΠΠΏΠ΅ΡΠ°Π½Π΄Ρ 00000000: B8CD20 mov ax,020CD 00000003: 50 push ax 00000004: EBFD jmps 000000003
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΡΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΡΡΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ.
00000000: B8CD20 mov ax,020CD
ΠΡΠ° ΡΡΡΠΎΠΊΠ° ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ Π² ΡΠ΅Π³ΠΈΡΡΡ AX Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 20CD.
00000003: 50 push ax
ΠΡΠ° ΡΡΡΠΎΠΊΠ° ΠΊΠ»Π°Π΄ΡΡ Π² ΡΡΠ΅ΠΊ word (ΡΠ»ΠΎΠ²ΠΎ) 20CDh ΠΈΠ· ΡΠ΅Π³ΠΈΡΡΡΠ° EAX. ΠΡΠΈΡΡΠΌ Π² ΠΏΠ°ΠΌΡΡΠΈ ΡΠ»ΠΎΠ²ΠΎ Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΎ — CD,20h.
00000004: EBFD jmps 000000003
Π Π²ΠΎΡ ΡΡΠ° ΡΡΡΠΎΠΊΠ° Π·Π°ΡΠΈΠΊΠ»ΠΈΠ²Π°Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ Ρ Π°Π΄ΡΠ΅ΡΠΎΠΌ 03. Π’ΠΎ Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΡΠΎΠΊΠΈ 03 Π² ΡΡΡΠΎΠΊΠ΅ 04 Π±ΡΠ΄Π΅Ρ ΡΠΎΠ²Π΅ΡΡΠ°ΡΡΡΡ Π±Π΅Π·ΡΡΠ»ΠΎΠ²Π½ΡΠΉ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ ΠΊ ΡΡΡΠΎΠΊΠ΅ 03.
Π’Π°ΠΊ ΠΏΠΎΡΠ΅ΠΌΡ ΠΆΠ΅ ΡΡΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ Π½Π΅ Π²Π΅ΡΠ°Π΅Ρ ΠΊΠΎΠΌΠΏ Π² ΠΠΠ‘ ΠΈ Π½Π΅ Π²ΠΈΡΠ½Π΅Ρ ΡΠ°ΠΌ Π² WinXP? ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ ΠΈ Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅, ΡΡΠΎ ΠΏΡΠΎΠ³Π° Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡΡ Π·Π° Π΄ΠΎΠ»ΠΈ ΡΠ΅ΠΊΡΠ½Π΄Ρ.
ΠΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡ Ρ ΠΈΡΡΠΎΡΡΡ Π² CV ΡΠ°ΠΌΠΈ, Π½ΠΎ ΡΡΠΎ Π·Π°ΠΉΠΌΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠ΅ΠΌΡ :).
Π§Π΅ΡΡΠ½ΠΎ ΡΠΊΠ°ΠΆΡ, ΡΡΠΎ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ ΡΠΈΠΏΠ° CodeView Π½Π΅ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ ΡΠ°Π·Π±ΠΎΡΠ° ΡΡΠΎΠ³ΠΎ ΠΏΡΡΡΡΡΠΊΠ°.
ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΡΠΎΡΡΡΠ΅ DOS-ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΡΠ΅ΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² ΡΠ²ΠΎΠΈΡ
ΡΠ΅Π»ΡΡ
, ΡΡΠΎ ΡΠ±ΠΈΠ²Π°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠ° ESP ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π³Π°ΠΌΠΈ.
ΠΠ΄Π΅ΡΡ Π±Ρ Π»ΡΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΠΎΠ΄ SoftIce’ΠΎΠΌ. Π ΡΠΎΠ³Π΄Π° Π²Ρ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ «ΡΠΎΠ²Π½ΠΎ» ΡΠ²ΠΈΠ΄Π΅ΡΡ,
ΠΊΠ°ΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° 32637 ΡΠ°Π· Π·Π°ΠΏΠΈΡΠ΅Ρ Π² ΡΡΠ΅ΠΊ Π΄Π²Π° Π±Π°ΠΉΡΠ° CD20h. ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠ°Π· Π±Π°ΠΉΡΡ Π±ΡΠ΄ΡΡ Π²ΠΏΠΈΡΠ°Π½Ρ Π²ΠΌΠ΅ΡΡΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρ «jmp 03».
CD20h — ΡΡΠΎ ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ int 20h (Π²ΡΠ·ΠΎΠ² ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΠΊΠ°ΠΊ Π²Ρ ΡΠΆΠ΅ Π·Π½Π°Π΅ΡΠ΅).
Π‘ΡΠ΅ΠΊ Π² com-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Π½Π° Π΄Π½Π΅ Π΅Ρ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ° (FFFE — ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π°Π΄ΡΠ΅Ρ, ΠΊΡΠ°ΡΠ½ΡΠΉ Π΄Π²ΡΠΌ).
ΠΠΎΠ»ΡΡΠ°Π΅ΡΡΡ, ΡΡΠΎ ΡΡΠ΅ΠΊ Π²ΡΡ ΡΠ°ΡΡΡΡ ΠΈ ΡΠ°ΡΡΡΡ Π²Π²Π΅ΡΡ ΠΈ Π½ΠΈΡΠ΅Π³ΠΎ Π΅Π³ΠΎ Π½Π΅ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡ, ΠΊΡΠΎΠΌΠ΅ Π·Π°Π²Π΅ΡΡΠ°ΡΡΠ΅Π³ΠΎ ΠΈΠ»ΠΈ ΠΎΡΠΈΠ±ΠΎΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.
Π Π²ΠΎΡ ΠΎΠ½ Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅Ρ Π²ΡΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ Π² ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ΅, Π° Π·Π°ΡΠ΅ΠΌ Π½Π°ΡΠΈΠ½Π°Π΅Ρ Π·Π°ΡΠΈΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ (Π² ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΈΡ Π½Π΅Ρ). ΠΠ°Π»Π΅Π΅ Π·Π°ΡΠΈΡΠ°Π΅ΡΡΡ ΠΊΠΎΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
Π’Π°ΠΊΠ°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ΅ΠΊΠ°. ΠΠ»Ρ DOS-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π΄Π°Π½Π½Π°Ρ ΠΎΡΠΈΠ±ΠΊΠ° — ΠΎΠ΄Π½Π° ΠΈΠ· ΡΠ°ΠΌΡΡ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ½Π½ΡΡ .
Π Win32-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ
ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΡ ΡΡΠ΅ΠΊΠ° Π±ΠΎΠ»Π΅Π΅ ΡΠ°Π·Π²ΠΈΡ (ΠΠ‘Ρ ΡΠ°ΠΌΠ° Π·Π°Π½ΠΈΠΌΠ°Π΅ΡΡΡ ΡΡΠΈΠΌ Π²ΠΎΠΏΡΠΎΡΠΎΠΌ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠ΅Π΄ΡΡΠ²Π° Π·Π°ΡΠΈΡΡΠ½Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΆΠΈΠΌΠ°).
ΠΠ΄Π½Π°ΠΊΠΎ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ΅ΠΊΠΎΠ² — Π²ΡΡ Π΅ΡΡ Π½Π°ΡΡΠΎΡΡΠΈΠΉ Π²ΡΠ·ΠΎΠ² Π΄Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ², ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π² ΡΡΠ΅ΡΠ΅ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ.
ΠΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΠΌΠΎΠ³Π»ΠΈ Π½Π°Π±Π»ΡΠ΄Π°ΡΡ, ΠΊΠ°ΠΊ ΠΈΠ·-Π·Π° ΡΠ°ΠΊΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ ΡΡΠ΅ΠΊ Π½Π°ΡΠΈΠ½Π°Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ.
ΠΠ΅Π΄Ρ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΡΠΎΡΡΠΎ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ»Π° Π΄Π°Π½Π½ΡΠ΅ CD20h Π² ΡΡΠ΅ΠΊ. ΠΠΎ Π·Π°ΡΠ΅ΠΌ ΡΡΠ΅ΠΊ Π²ΡΡΠΎΡ (Π°Π΄ΡΠ΅Ρ Π² ESP ΡΠΌΠ΅Π½ΡΡΠΈΠ»ΡΡ!) Π΄ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΡΠ°Π²Π½ΠΎΠ³ΠΎ Π°Π΄ΡΠ΅ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ JMP 0103 (Π² CodeView ΡΡΠΎΠ³ΠΎ Π½Π΅ Π²ΠΈΠ΄Π½ΠΎ!). Π Π²ΠΎΡ, ΠΏΠΎΡΠ»Π΅ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ push AX, ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΡΠ΄Π΅ΡΠ½ΠΎΠ΅ ΠΏΡΠ΅Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ Π² ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΠΊΠΎΠ΄.
Π CodeView ΡΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΠ»Π΅Π΄ΠΈΡΡ ΡΠ°ΠΌΡΠΉ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°. ΠΠ·ΠΌΠ΅Π½ΠΈΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΡΡΠ΅ΠΊΠ° (ESP). ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ Π² Π½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 200h (ΡΡΠΎΠ± Π΄ΠΎΠ»Π³ΠΎ Π½Π΅ ΡΡΠ΅ΠΉΡΠΈΡΡ). ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ — F10 ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π·, ΠΈ ΠΏΡΠΎΠ³Π° Π·Π°Π²Π΅ΡΡΠΈΡΡΡ. ΠΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ Π΅ΡΡ ΠΈ Π΅ΡΡ ΡΠ°Π·. ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ, Π²Ρ ΠΏΡΠΈΠ΄ΡΠΌΠ°Π΅ΡΠ΅, ΠΊΠ°ΠΊ ΡΠ°ΠΊΠΎΠΉ ΡΠΎΠΊΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΡΠ²ΠΎΠΈΡ ΡΠ΅Π»ΡΡ ;).
ΠΡΠ΅Π΄Π»Π°Π³Π°Ρ Π²Π°ΠΌ Π΅ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΈΠΌΠ΅Ρ Win32.
Π£ΡΡΠΈΡΠ΅, ΡΡΠΎ ΡΡΡΡΠΊΠΈΠ΅ Π±ΡΠΊΠ²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π² ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠ΅ ANSI (ΡΡΠ°Π½Π΄Π°ΡΡ Π΄Π»Ρ ΡΠΎΡΡΠΎΡΠ΅ΠΊ).
prax07.asm:
.386
.model flat, stdcall
option casemap :none ; case sensitive
;#########################################################################
include \masm32\include\windows.
inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
;#########################################################################
.data
MsgBoxCaption db "It's my first command line for Win32",0
MsgBoxText db "ΠΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΎΡΡΡΡΡΡΠ²ΡΡΡ",0
;#########################################################################
.code
start:
call GetCommandLine ; API. ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π² EAX Π°Π΄ΡΠ΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ
mov ECX,512d
add ECX,EAX
unquote: ; ΠΠ΅ΡΠΊΠ° ΡΠΈΠΊΠ»Π° Π½Π°Ρ
ΠΎΠΆΠ΄Π΅Π½ΠΈΡ Π·Π°ΠΊΡΡΠ²Π°ΡΡΠ΅ΠΉ ΠΊΠ°Π²ΡΡΠΊΠΈ
inc EAX
cmp EAX,ECX
jz NO
cmp byte ptr[EAX],22h
jnz unquote
Arg_search: ; ΠΠ΅ΡΠΊΠ° ΡΠΈΠΊΠ»Π° Π½Π°Ρ
ΠΎΠΆΠ΄Π΅Π½ΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ
inc EAX
cmp byte ptr[EAX],0
jz NO
cmp byte ptr[EAX],20h
jz Arg_search
push 0
push offset MsgBoxCaption
push EAX
push 0
call MessageBox ; ΠΡΠ·ΠΎΠ² API-ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΡΠ²ΠΎΠ΄Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π½Π° ΡΠΊΡΠ°Π½
push 0 ; ΠΡΡΡΠΎΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΡΡ
ΠΎΠ΄Π°
call ExitProcess ; ΠΡΠ·ΠΎΠ² API-ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΡΡ
ΠΎΠ΄Π°
NO:
push 0 ; ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ "MB_OK"
push offset MsgBoxCaption ; ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ "Π°Π΄ΡΠ΅Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°"
push offset MsgBoxText ; ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ "Π°Π΄ΡΠ΅Ρ ΡΠ΅ΠΊΡΡΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ"
push 0 ; ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ "ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ΅ ΠΎΠΊΠ½ΠΎ"
call MessageBox ; ΠΡΠ·ΠΎΠ² API-ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΡΠ²ΠΎΠ΄Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π½Π° ΡΠΊΡΠ°Π½
push 0 ; ΠΡΡΡΠΎΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΡΡ
ΠΎΠ΄Π°
call ExitProcess ; ΠΡΠ·ΠΎΠ² API-ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΡΡ
ΠΎΠ΄Π°
end start
ΠΠ°Π±Π΅ΡΠΈΡΠ΅, ΠΏΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΡΠ°ΠΌΠΈ ΡΠ΅ΠΊΡΠΈΡ ΠΊΠΎΠ΄Π°.
Π― ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ Ρ Π²Π°Ρ Π±ΡΠ΄ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΊΠΈ, ΠΈ ΡΡΠΎ ΠΎΡΠ΅Π½Ρ ΡΡΠΊΠΎΡΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ.
| ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ± ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ΄Π΅Π»Π°Π» ΡΠΎ, ΡΡΠΎ Π΅ΠΌΡ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΎ, Π·Π°ΠΏΡΡΡΠΈΡΠ΅ Π΅Π³ΠΎ Ρ ΠΊΠ°ΠΊΠΈΠΌ-Π½ΠΈΠ±ΡΠ΄Ρ ΠΊΠ»ΡΡΠΎΠΌ ΡΠΈΠΏΠ°: prax07.exe qwerty |
ΠΡ ΡΡΠΎ ΠΆ, ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ Olly — Π²Π°Ρ Π»ΡΡΡΠΈΠΉ Π΄ΡΡΠ³. ΠΡΠΈ ΠΎΡΠΊΡΡΡΠΈΠΈ Π²ΠΏΠΈΡΠΈΡΠ΅ ΠΊΠ»ΡΡ Π² ΠΏΠΎΠ»Π΅ «Arguments». ΠΠ΅ ΡΠΎΡΠΎΠΏΠΈΡΠ΅ΡΡ, ΠΏΠΎΠ΄ΡΠΌΠ°ΠΉΡΠ΅ ΡΡΠΎ ΠΊ ΡΠ΅ΠΌΡ.
ΠΠ΄Π΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ 3 API-ΡΡΠ½ΠΊΡΠΈΠΈ:
- GetCommandLine — Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π² ΡΠ΅Π³ΠΈΡΡΡ EAX Π°Π΄ΡΠ΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΠΏΡΡΡΠΌ Π² ΠΊΠ°Π²ΡΡΠΊΠ°Ρ
. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
«D:\tut\prax07.exe » qwerty - MessageBox — Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠ²ΠΎΠ΄Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π½Π° ΡΠΊΡΠ°Π½.
- ExitProcess — ΡΡΠ½ΠΊΡΠΈΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ.
ΠΡΡΠ°Π»Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°, ΠΊΠΎΡΠΎΡΡΡ Π²Ρ ΠΏΠΎΠΊΠ° Π½Π΅ Π·Π½Π°Π΅ΡΠ΅ Π² ΡΡΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅. ΠΠΎΠΌΠ°Π½Π΄Π° CALL, Π½ΠΎ ΡΡΠΎ ΡΠ΅Π»Π°Ρ ΡΠ΅ΠΌΠ°. Π, ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΎΡΠΈΠΌ, ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ΅ΠΌΠ° Π² Π½Π°ΡΠΈΡ ΡΡΠΎΠΊΠ°Ρ .
Bitfry
ΠΠ°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠ° ΠΊΠΎΠ΄Π° Π½Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ΅ x86/x64 Π² Linux
Π‘Π΅Π³ΠΎΠ΄Π½Ρ ΠΌΡ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ΅.
ΠΠΎΠΏΡΠΎΡ Β«Π·Π°ΡΠ΅ΠΌ ΠΊΠΎΠΌΡ-ΡΠΎ Π² ΡΡΠ΅ΡΡΠ΅ΠΌ ΡΡΡΡΡΠ΅Π»Π΅ΡΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠΉΡΠΈ Π² Π³ΠΎΠ»ΠΎΠ²Ρ ΠΏΠΈΡΠ°ΡΡ ΡΡΠΎ-ΡΠΎ Π½Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ΅Β» ΡΠ°ΡΠΊΡΡΡ Π² Π·Π°ΠΌΠ΅ΡΠΊΠ΅ ΠΠ°ΡΠ΅ΠΌ Π½ΡΠΆΠ½ΠΎ Π·Π½Π°ΡΡ Π²ΡΡΠΊΠΈΠ΅ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠ΅ Π²Π΅ΡΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ Π·Π΄Π΅ΡΡ ΠΌΡ ΠΊ Π½Π΅ΠΌΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡΡ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ. ΠΡΠΌΠ΅ΡΡ, ΡΡΠΎ Π² ΡΠ°ΠΌΠΊΠ°Ρ
ΠΏΠΎΡΡΠ° ΠΌΡ ΡΠΎΡΡΠ΅Π΄ΠΎΡΠΎΡΠΈΠΌΡΡ Π½Π° Π²ΠΎΠΏΡΠΎΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π½Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ΅. Π‘Π°ΠΌ ΠΆΠ΅ ΡΠ·ΡΠΊ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ° Π·Π°ΡΠ»ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ°, Π° ΡΠΎ ΠΈ ΡΠ΅ΡΠΈΠΈ ΠΏΠΎΡΡΠΎΠ².
ΠΡΠ»ΠΈ Π²Ρ Π·Π½Π°Π΅ΡΠ΅ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ, ΡΠΎ Π»ΡΠ±Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π΄Π»Ρ Π²Π°Ρ β open source.
ΠΠ°ΡΠΎΠ΄Π½Π°Ρ ΠΌΡΠ΄ΡΠΎΡΡΡ.
ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΄Π²Π° ΡΠΈΡΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ½ΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° β ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠ΅ AT&T-ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΈ Intel-ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ. ΠΠ½ΠΈ Π½Π΅ ΡΠΈΠ»ΡΠ½ΠΎ Π΄ΡΡΠ³ ΠΎΡ Π΄ΡΡΠ³Π° ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ ΠΈ Π»Π΅Π³ΠΊΠΎ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΡΡΡΡ ΠΎΠ΄ΠΈΠ½ Π² Π΄ΡΡΠ³ΠΎΠΉ. Π ΠΌΠΈΡΠ΅ Windows ΠΏΡΠΈΠ½ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Intel. Π ΠΌΠΈΡΠ΅ *nix ΡΠΈΡΡΠ΅ΠΌ, Π½Π°ΠΎΠ±ΠΎΡΠΎΡ, ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠ΅Π³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ AT&T, Π° ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Intel Π²ΡΡΡΠ΅ΡΠ°Π΅ΡΡΡ ΠΊΡΠ°ΠΉΠ½Π΅ ΡΠ΅Π΄ΠΊΠΎ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΡΡΠΈΠ»ΠΈΡΠ΅ perf). ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Windows, ΠΊΠ°ΠΊ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ, Π΄Π°Π»Π΅Π΅ ΠΌΡ ΡΠΎΡΡΠ΅Π΄ΠΎΡΠΎΡΠΈΠΌΡΡ Π½Π° ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΌ AT&T-ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ π
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ² Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ° ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΌΠ½ΠΎΠ³ΠΎ.
ΠΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ GNU Assembler (ΠΎΠ½ ΠΆΠ΅ GAS, ΠΎΠ½ ΠΆΠ΅ /usr/bin/as). Π‘ΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, ΠΎΠ½ ΡΠΆΠ΅ Π΅ΡΡΡ Π²Π°ΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅. Π ΡΠΎΠΌΡ ΠΆΠ΅, Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ΡΡ GCC ΠΈ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΠ΅ΡΡ ΠΏΠΈΡΠ°ΡΡ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ½ΡΠ΅ Π²ΡΡΠ°Π²ΠΊΠΈ Π² ΠΊΠΎΠ΄Π΅ Π½Π° C, ΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ ΡΡΠΈΠΌ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠΎΠΌ Π²Π°ΠΌ ΠΏΡΠ΅Π΄ΡΡΠΎΠΈΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ. ΠΠ· Π΄ΠΎΡΡΠΎΠΉΠ½ΡΡ
Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ² GAS ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ NASM ΠΈ FASM.
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΡΠ·ΡΠΊ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ° ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°. ΠΠΎΠΊΠ° ΡΡΠΎ ΠΌΡ ΡΠΎΡΡΠ΅Π΄ΠΎΡΠΎΡΠΈΠΌΡΡ Π½Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ΅ Π΄Π»Ρ x86 (ΠΎΠ½ ΠΆΠ΅ i386) ΠΈ x64 (ΠΎΠ½ ΠΆΠ΅ amd64), ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ ΡΡΠΈΠΌΠΈ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°ΠΌΠΈ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΡΠ°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΈΠΌΠ΅ΡΡ Π΄Π΅Π»ΠΎ. ΠΠΏΡΠΎΡΠ΅ΠΌ, ARM ΡΠΎΠΆΠ΅ Π²Π΅ΡΡΠΌΠ° ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½, Π³Π»Π°Π²Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π½Π° ΡΠ΅Π»Π΅ΡΠΎΠ½Π°Ρ ΠΈ ΠΏΠ»Π°Π½ΡΠ΅ΡΠ°Ρ . ΠΡΠ΅ ΠΈΠ· ΡΡΠ°Π²Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΠ³ΠΎ Π΅ΡΡΡ SPARC ΠΈ PowerPC, Π½ΠΎ ΡΠ°Π½ΡΡ ΡΡΠΎΠ»ΠΊΠ½ΡΡΡΡΡ Ρ Π½ΠΈΠΌΠΈ Π²Π΅ΡΡΠΌΠ° ΠΌΠ°Π»Ρ. ΠΡΠΌΠ΅ΡΡ, ΡΡΠΎ x86 ΠΈ x64 ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ, Π½ΠΎ ΡΡΠΈ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ ΠΏΠΎΡ ΠΎΠΆΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ Ρ Π½Π΅ Π²ΠΈΠΆΡ Π² ΡΡΠΎΠΌ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΡΠΌΡΡΠ»Π°.
Β«Hello, worldΒ» Π½Π° int 0x80
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠΈΠΏΠΈΡΠ½ΡΠΉ Β«Hello, worldΒ» Π΄Π»Ρ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ x86 ΠΈ Linux:
.datamsg:
Β .
ascii «Hello, world!\n»Β .set len, . — msg
.text
.globl _start
_start:
Β # write
Β mov $4, Β %eax
Β mov $1, Β %ebx
Β mov $msg, %ecx
Β mov $len, %edx
Β int $0x80
Β # exit
Β mov $1, Β %eax
Β xor %ebx, %ebx
Β int $0x80
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ:
# ΠΠ»ΠΈ: gcc -m32 -c hello-int80.s
as —32 hello-int80.s -o hello-int80.o
ld -melf_i386 -s hello-int80.o -o hello-int80
ΠΠΎΡΠΎΡΠΊΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΠ΅ΡΠ²ΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ
ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ: (1) ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π°ΡΠΈΠ½Π°Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ ΠΌΠ΅ΡΠΊΠΈ _start, (2) Π² ΡΠ΅Π³ΠΈΡΡΡ eax ΠΊΠ»Π°Π΄Π΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 4, (3) Π² ΡΠ΅Π³ΠΈΡΡΡ ebx ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 1, (4) Π² ΡΠ΅Π³ΠΈΡΡΡ ecx ΠΊΠ»Π°Π΄Π΅ΡΡΡ Π°Π΄ΡΠ΅Ρ ΡΡΡΠΎΠΊΠΈ, (5) Π² ΡΠ΅Π³ΠΈΡΡΡ edx ΠΊΠ»Π°Π΄Π΅ΡΡΡ Π΅Π΅ Π΄Π»ΠΈΠ½Π°, (6) ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠ΅ 0x80. Π’Π°ΠΊ Π² ΠΌΠΈΡΠ΅ Linux ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΎ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ
Π²ΡΠ·ΠΎΠ²ΠΎΠ². ΠΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ int 0x80 ΡΡΠΈΡΠ°Π΅ΡΡΡ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΌ ΠΈ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΠΌ, Π½ΠΎ ΠΈΠ· ΡΠΎΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ ΠΎΠ½ Π²ΡΠ΅ Π΅ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. ΠΠ°Π»Π΅Π΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΈ Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²ΡΠ΅ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΡ.
ΠΠ΅ΡΡΡΠ΄Π½ΠΎ Π΄ΠΎΠ³Π°Π΄Π°ΡΡΡΡ, ΡΡΠΎ eax β ΡΡΠΎ Π½ΠΎΠΌΠ΅Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π°, Π° ebx, ecx ΠΈ edx β Π΅Π³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ. ΠΠ°ΠΊΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² ΠΈΠΌΠ΅Π΅Ρ ΠΊΠ°ΠΊΠΎΠΉ Π½ΠΎΠΌΠ΅Ρ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΡΠΌΠΎΡΡΠ΅ΡΡ Π² ΡΠ°ΠΉΠ»Π°Ρ :
# Π΄Π»Ρ x86
/usr/include/x86_64-linux-gnu/asm/unistd_32.h
# Π΄Π»Ρ x64
/usr/include/x86_64-linux-gnu/asm/unistd_64.h
Π‘Π»Π΅Π΄ΡΡΡΠ°Ρ ΡΡΡΠΎΡΠΊΠ° ΠΈΠ· ΡΠ°ΠΉΠ»Π° unistd_32.h:
β¦ ΠΊΠ°ΠΊ Π±Ρ Π½Π°ΠΌΠ΅ΠΊΠ°Π΅Ρ Π½Π°ΠΌ, ΡΡΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ Π²ΡΠ·ΠΎΠ² write. Π ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΠΈΠ· man 2 write ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ·Π½Π°ΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΡΡΠΎΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ:
ssize_t write(int fd, const void *buf, size_t count);
Π’ΠΎ Π΅ΡΡΡ, ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΡΠΉ ΠΊΠΎΠ΄ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ΅Π½:
// Π½Π°ΠΏΠΎΠΌΠ½Ρ, ΡΡΠΎ stdout == 1
write(stdout, «Hello, world!\n», 14)
ΠΠ°ΡΠ΅ΠΌ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ Π²ΡΠ·ΠΎΠ²:
// ΠΊΠΎΠΌΠ°Π½Π΄Π° `xor %ebx, %ebx` ΠΎΠ±Π½ΡΠ»ΡΠ΅Ρ ΡΠ΅Π³ΠΈΡΡΡ %ebx
exit(0)
Π‘ΠΎΠ²ΡΠ΅ΠΌ Π½Π΅ ΡΠ»ΠΎΠΆΠ½ΠΎ!
Π ΠΎΠ±ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² ΡΠ΅ΡΠ΅Π· 0x80 ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌ. Π Π΅Π³ΠΈΡΡΡΡ eax ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΡΡΡ Π½ΠΎΠΌΠ΅Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° ΠΈΠ· unistd_32.
h. ΠΠΎ ΡΠ΅ΡΡΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡΡΡ Π² ΡΠ΅Π³ΠΈΡΡΡΡ ebx, ecx, edx, esi, edi ΠΈ ebp. ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π² ΡΠ΅Π³ΠΈΡΡΡ eax. ΠΠ½Π°ΡΠ΅Π½ΠΈΡ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ
ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² ΠΏΡΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΠΈ ΠΈΠ· ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° ΠΎΡΡΠ°ΡΡΡΡ ΠΏΡΠ΅ΠΆΠ½ΠΈΠΌΠΈ.
ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° ΡΠ΅ΡΠ΅Π· sysenter
ΠΠ°ΡΠΈΠ½Π°Ρ Ρ i586 ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ sysenter, ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½Π°Ρ (ΡΠ΅Π³ΠΎ Π½Π΅Π»ΡΠ·Ρ ΡΠΊΠ°Π·Π°ΡΡ ΠΎΠ± ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ int) Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ².
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π΅Π΅ Π½Π° Linux:
.datamsg:
Β .ascii «Hello, world!\n»
Β len = . — msg
.text
.globl _start
_start:
Β # write
Β mov Β $4, Β %eax
Β mov Β $1, Β %ebx
Β mov Β $msg, %ecx
Β mov Β $len, %edx
Β push Β $write_ret
Β push Β %ecx
Β push Β %edx
Β push Β %ebp
Β mov Β %esp, %ebp
Β sysenter
write_ret:
Β # exit
Β mov Β $1, Β %eax
Β xor Β %ebx, %ebx
Β push Β $exit_ret
Β push Β %ecx
Β push Β %edx
Β push Β %ebp
Β mov Β %esp, %ebp
Β sysenter
exit_ret:
Π‘Π±ΠΎΡΠΊΠ° ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΡΠ±ΠΎΡΠΊΠ΅ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°.
ΠΠ°ΠΊ Π²ΠΈΠ΄ΠΈΡΠ΅, ΠΏΡΠΈΠ½ΡΠΈΠΏ ΡΠΎΡ ΠΆΠ΅, ΡΡΠΎ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ int 0x80, ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ sysenter ΡΡΠ΅Π±ΡΡΡΡΡ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π² ΡΡΠ΅ΠΊ Π°Π΄ΡΠ΅Ρ, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π²Π΅ΡΠ½ΡΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΠ²Π΅ΡΡΠΈΡΡ ΠΊΠΎΠ΅-ΠΊΠ°ΠΊΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΈΠΈ Ρ ΡΠ΅Π³ΠΈΡΡΡΠ°ΠΌΠΈ. ΠΡΠΈΡΠΈΠ½Ρ ΡΡΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΎΠ±ΡΡΡΠ½ΡΡΡΡΡ Π·Π΄Π΅ΡΡ.
ΠΠ½ΡΡΡΡΠΊΡΠΈΡ sysenter ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π±ΡΡΡΡΠ΅Π΅ int 0x80 ΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠΈΡΠ΅Π»ΡΠ½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ ΡΠΎΠ²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² Π½Π° x86.
ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° ΡΠ΅ΡΠ΅Π· syscall
ΠΠΎ ΡΠΈΡ ΠΏΠΎΡ ΡΠ΅ΡΡ ΡΠ»Π° ΠΎ 32-Ρ Π±ΠΈΡΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ . ΠΠ° x64 Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΠΊ:
.datamsg:
Β .ascii «Hello, world!\n»
Β .set len, . — msg
.text
.globl _start
_start:
Β # write
Β mov Β $1, Β %rax
Β mov Β $1, Β %rdi
Β mov Β $msg, %rsi
Β mov Β $len, %rdx
Β syscall
Β # exit
Β mov Β $60, %rax
Β xor Β %rdi, %rdi
Β syscall
Π‘ΠΎΠ±ΠΈΡΠ°Π΅ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
as —64 hello-syscall.s -o hello-syscall.
o
ld -melf_x86_64 -s hello-syscall.o -o hello-syscall
ΠΡΠΈΠ½ΡΠΈΠΏ Π²ΡΠ΅ ΡΠΎΡ ΠΆΠ΅, Π½ΠΎ Π΅ΡΡΡ Π²Π°ΠΆΠ½ΡΠ΅ ΠΎΡΠ»ΠΈΡΠΈΡ. ΠΠΎΠΌΠ΅ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² Π½ΡΠΆΠ½ΠΎ Π±ΡΠ°ΡΡ ΠΈΠ· unistd_64.h, Π° Π½Π΅ ΠΈΠ· unistd_32.h. ΠΠ°ΠΊ Π²ΠΈΠ΄ΠΈΡΠ΅, ΠΎΠ½ΠΈ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π΄ΡΡΠ³ΠΈΠ΅. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΡΡΠΎ 64-Ρ Π±ΠΈΡΠ½ΡΠΉ ΠΊΠΎΠ΄, ΡΠΎ ΠΈ ΡΠ΅Π³ΠΈΡΡΡΡ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ 64-Ρ Π±ΠΈΡΠ½ΡΠ΅. ΠΠΎΠΌΠ΅Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π² rax. ΠΠΎ ΡΠ΅ΡΡΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π· ΡΠ΅Π³ΠΈΡΡΡΡ rdi, rsi, rdx, r10, r8 ΠΈ r9. ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π² ΡΠ΅Π³ΠΈΡΡΡ rax. ΠΠ½Π°ΡΠ΅Π½ΠΈΡ, ΡΠΎΡ ΡΠ°Π½Π΅Π½Π½ΡΠ΅ Π² ΠΎΡΡΠ°Π»ΡΠ½ΡΡ ΡΠ΅Π³ΠΈΡΡΡΠ°Ρ , ΠΏΡΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΠΈ ΠΈΠ· ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° ΠΎΡΡΠ°ΡΡΡΡ ΠΏΡΠ΅ΠΆΠ½ΠΈΠΌΠΈ, Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² rcx ΠΈ r11.
ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, ΡΡΠΎ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΏΠΎΠ΄ x64 ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ ΠΊΠ°ΠΊ ΡΠ΅ΡΠ΅Π· syscall, ΡΠ°ΠΊ ΠΈ ΡΠ΅ΡΠ΅Π· int 0x80.
ΠΡΠ»Π°Π΄ΠΊΠ° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² GDB
Π‘ΡΠ°ΡΡΡ Π±ΡΠ»Π° Π±Ρ Π½Π΅ ΠΏΠΎΠ»Π½ΠΎΠΉ, Π΅ΡΠ»ΠΈ Π±Ρ ΠΌΡ Π½Π΅ Π·Π°ΡΡΠΎΠ½ΡΠ»ΠΈ Π²ΠΎΠΏΡΠΎΡ ΠΎΡΠ»Π°Π΄ΠΊΠΈ Π²ΡΠ΅Π³ΠΎ ΡΡΠΎΠ³ΠΎ Ρ
ΠΎΠ·ΡΠΉΡΡΠ²Π°. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΠΎΡΠ΅Π½Ρ ΠΏΠ»ΠΎΡΠ½ΠΎ ΡΠΈΠ΄ΠΈΠΌ Π½Π° GNU-ΡΡΡΠΊΠ΅, Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ° Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ GDB. ΠΠΎ Π±ΠΎΠ»ΡΡΠΎΠΌΡ ΡΡΠ΅ΡΡ, ΠΎΡΠ»Π°Π΄ΠΊΠ° Π½Π΅ ΡΠΈΠ»ΡΠ½ΠΎ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π½Π° C, Π½ΠΎ Π΅ΡΡΡ Π½ΡΠ°Π½ΡΡ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ°ΠΊ ΠΏΡΠΎΡΡΠΎ Π²Π·ΡΡΡ ΠΈ ΠΏΠΎΡΡΠ°Π²ΠΈΡΡ Π±ΡΠ΅ΠΉΠΊΠΏΠΎΠΈΠ½Ρ Π½Π° ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ main. ΠΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ, Ρ Π²Π°Ρ ΠΏΠΎΠΏΡΠΎΡΡΡ Π½Π΅Ρ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ ΠΎ ΡΠΎΠΌ, Π³Π΄Π΅ ΡΡΡ main ΠΈΡΠΊΠ°ΡΡ. Π Π΅ΡΠ΅Π½ΠΈΠ΅ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π°Π΄ΡΠ΅Ρ ΡΠΎΡΠΊΠΈ Π²Ρ ΠΎΠ΄Π° Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ ΠΏΠΎΡΡΠ°Π²ΠΈΡΡ Π±ΡΠ΅ΠΉΠΊΠΏΠΎΠΈΠ½Ρ Π½Π° ΡΡΠΎΡ Π°Π΄ΡΠ΅Ρ:
Π£Π²ΠΈΠ΄ΠΈΠΌ ΡΡΠΎ-ΡΠΎ Π²ΡΠΎΠ΄Π΅:
[…]
Β Β Entry point: 0x4000b0
[…]
ΠΠ°Π»Π΅Π΅ Π³ΠΎΠ²ΠΎΡΠΈΠΌ:
ΠΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Ρ Π½Π°Ρ ΡΠΎΠΆΠ΅ Π½Π΅Ρ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° l ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ. Π‘Π°ΠΌΠΈ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΈ Π΅ΡΡΡ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄! Π’Π°ΠΊ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ 5 Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ½ΡΡ
ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ:
ΠΠΎ ΠΏΠΎΠ½ΡΡΠ½ΡΠΌ ΠΏΡΠΈΡΠΈΠ½Π°ΠΌ, ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄ ΠΊ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ ΡΡΡΠΎΡΠΊΠ΅ ΠΊΠΎΠ΄Π° ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ n ΠΈΠ»ΠΈ s ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΈΡ
ΠΊΠΎΠΌΠ°Π½Π΄ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄Π° ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ β ni, si, ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅.
Π‘ΠΌΠΎΡΡΠ΅ΡΡ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΌΡ ΡΠΎΠΆΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ. ΠΠ΄Π½Π°ΠΊΠΎ Π½ΠΈΡΡΠΎ Π½Π΅ ΠΌΠ΅ΡΠ°Π΅Ρ ΡΠΌΠΎΡΡΠ΅ΡΡ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ²:
info registers
p/x $rcx
p $xmm1
set $r15 = 0x123
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΡΡΠ΅ΠΊΡΡΠ΅ΠΉΡΡ Π½Π°ΠΌ ΡΠΎΠΆΠ΅ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½Ρ.
ΠΠΎ Π½ΠΈΡΡΠΎ Π½Π΅ ΠΌΠ΅ΡΠ°Π΅Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ 8 Π±Π»ΠΈΠΆΠ°ΠΉΡΠΈΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π½Π° ΡΡΠ΅ΠΊΠ΅:
ΠΠΎ Π±ΠΎΠ»ΡΡΠΎΠΌΡ ΡΡΠ΅ΡΡ, ΡΡΠΎ Π²ΡΠ΅ ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° C ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ ΠΈΡΡ ΠΎΠ΄Π½ΠΈΠΊΠΎΠ². ΠΡΡΠ°ΡΠΈ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ, Π² ΠΊΠ°ΠΊΠΎΠΉ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ½ΡΡ ΠΊΠΎΠ΄ ΡΡΠ°Π½ΡΠ»ΠΈΡΡΠ΅ΡΡΡ Π²Π°Ρ ΠΊΠΎΠ΄ Π½Π° C, ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ²:
gcc -S test.c -o —
objdump -d ./myprog
ΠΠ°ΠΊ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ, ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Hopper ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΌ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΠΌ Π΄ΠΈΠ·Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠΎΠΌ.
ΠΠ½Π΅Π·Π°ΠΏΠ½ΠΎ ΠΎΡΠ»Π°Π΄ΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠΎΠ±ΡΠ°Π½Π½ΠΎΠΉ Π±Π΅Π· -g ΠΈ/ΠΈΠ»ΠΈ Ρ -O2, ΠΏΠ΅ΡΠ΅ΡΡΠ°Π»Π° ΠΊΠ°Π·Π°ΡΡΡΡ ΡΠ°ΠΊΠΈΠΌ ΡΠΆ ΡΡΡΠ°ΡΠ½ΡΠΌ Π΄Π΅Π»ΠΎΠΌ, Π½Π΅ ΡΠ°ΠΊ Π»ΠΈ?
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π΄ΠΎΠΌΠ°ΡΠ½Π΅Π³ΠΎ Π·Π°Π΄Π°Π½ΠΈΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠΏΡΡΠ°ΡΡΡΡ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ΅, Π²ΡΠ²ΠΎΠ΄ΡΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠ΅ Π΅ΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ.
ΠΡΠΈΠΌΠΈΡΠ΅ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π² Linux Π΅ΡΡΡ Π΅ΡΠ΅ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ Π΄Π²Π° ΡΠΏΠΎΡΠΎΠ±Π° ΡΠ΄Π΅Π»Π°ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² β ΡΠ΅ΡΠ΅Π· ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠ΅ vsyscall (ΡΡΠΈΡΠ°Π΅ΡΡΡ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΌ, Π½ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Π΄Π»Ρ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ) ΠΈ VDSO (ΠΏΡΠΈΡΠ΅Π΄ΡΠΈΠΉ Π΅ΠΌΡ Π½Π° Π·Π°ΠΌΠ΅Π½Ρ). ΠΡΠΈ ΡΠΏΠΎΡΠΎΠ±Ρ ΠΎΡΠ½ΠΎΠ²Π°Π½Ρ Π½Π° ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ ΡΡΡΠ°Π½ΠΈΡΡ ΡΠ΄ΡΠ° Π² Π°Π΄ΡΠ΅ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΈ ΠΏΡΠΈΠ·Π²Π°Π½Ρ ΡΡΠΊΠΎΡΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ
Π²ΡΠ·ΠΎΠ²ΠΎΠ², Π½Π΅ ΡΡΠ΅Π±ΡΡΡΠΈΡ
ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ ΠΈ Π΄ΡΡΠ³ΠΈΡ
ΡΡΠΆΠ΅Π»ΡΡ
Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ ΡΠΎ ΡΡΠΎΡΠΎΠ½Ρ ΡΠ΄ΡΠ° ΡΠΈΡΡΠ΅ΠΌΡ. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π²ΡΠ·ΠΎΠ²Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΡΠΊΠΎΡΠ΅Π½ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ gettimeofday. Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΠ΅ vsyscall ΠΈ VDSO Π²ΡΡ
ΠΎΠ΄ΠΈΡ Π·Π° ΡΠ°ΠΌΠΊΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ°. ΠΠΎΠ»ΡΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ Π½ΠΈΡ
Π²Ρ Π½Π°ΠΉΠ΄Π΅ΡΠ΅ ΠΏΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΌ Π½ΠΈΠΆΠ΅ ΡΡΡΠ»ΠΊΠ°ΠΌ.
Π‘ΡΡΠ»ΠΊΠΈ ΠΏΠΎ ΡΠ΅ΠΌΠ΅:
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π²Π°Ρ ΠΌΠΎΠ³ΡΡ Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°ΡΡ ΡΡΠ°ΡΡΠΈ, ΠΏΠΎΡΠ²ΡΡΠ΅Π½Π½ΡΠ΅ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΡ, Π² Π·Π°ΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΠ½ΡΡ Π±Π»ΠΎΠ³Π°Ρ alexanius-blog.blogspot.ru ΠΈ 0xax.blogspot.ru.
Π ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ (ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ, ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ, β¦) Π²Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Π΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ΅?
ΠΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅: Π¨ΠΏΠ°ΡΠ³Π°Π»ΠΊΠ° ΠΏΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΠΌ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ° x86/x64
ΠΠ΅ΡΠΊΠΈ: Linux, ΠΡΡΠ΅ΠΌΠ±Π»Π΅Ρ.
ASSEMBLER&WIN32. ΠΠ£Π Π‘ ΠΠΠΠΠΠΠΠ ΠΠΠΠ¦Π. Π£Π ΠΠ 3.mov β ΠΊΠΎΠΌΠ°Π½Π΄Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ°
ΠΠΎΠ³Π΄Π° Π²Ρ ΠΏΠΈΡΠ΅ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ΅, Π²Ρ ΠΏΡΠΎΡΡΠΎ ΠΏΠΈΡΠ΅ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΡ.
ΠΠΎΠΌΠ°Π½Π΄Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΡ β ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ ΠΊΠΎΠ΄Ρ ΠΈΠ»ΠΈ ΠΊΠΎΠ΄Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΈΠ»ΠΈ ΠΎΠΏΠΊΠΎΠ΄Ρ. ΠΠΏΠΊΠΎΠ΄Ρ β ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Β«ΡΠΈΡΠ°Π΅ΠΌΡΠΉ ΡΠ΅ΠΊΡΡΒ»- Π²Π΅ΡΡΠΈΠΈ ΡΠ΅ΡΡΠ½Π°Π΄ΡΠ°ΡΠ΅ΡΠΈΡΠ½ΡΡ
ΠΊΠΎΠ΄ΠΎΠ². ΠΠ·-Π·Π° ΡΡΠΎΠ³ΠΎ, Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ ΡΡΠΈΡΠ°Π΅ΡΡΡ ΡΠ°ΠΌΡΠΌ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠΌ ΡΠ·ΡΠΊΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π²ΡΠ΅ Π² Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ΅ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°Π΅ΡΡΡ Π² ΡΠ΅ΡΡΠ½Π°Π΄ΡΠ°ΡΠ΅ΡΠΈΡΠ½ΡΠ΅ ΠΊΠΎΠ΄Ρ. ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, Ρ Π²Π°Ρ Π½Π΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°Π΅Ρ ΡΠ·ΡΠΊ Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ Π² ΡΠ·ΡΠΊ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ, Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°Π΅Ρ ΠΊΠΎΠ΄Ρ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ° Π² Π΄Π°Π½Π½ΡΠ΅.
Π ΡΡΠΎΠΌ ΡΡΠΎΠΊΠ΅ ΠΌΡ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΠΏΠΊΠΎΠ΄ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠΌΠ΅ΡΡ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ ΠΊ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ, ΠΏΠΎΡΠ°Π·ΡΡΠ΄Π½ΡΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΠΌ, ΠΈ Ρ.Π΄. ΠΡΡΠ³ΠΈΠ΅ ΠΎΠΏΠΊΠΎΠ΄Ρ: ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π°, ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΠΈ Ρ.Π΄, Π±ΡΠ΄ΡΡ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½Ρ ΠΏΠΎΠ·ΠΆΠ΅.
ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π² Π²Π°ΡΠΈΡ
ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ
ΠΎΡΡΠ°Π²Π»ΡΡΡΡΡ ΠΏΠΎΡΠ»Π΅ ΡΠΎΡΠΊΠΈ Ρ Π·Π°ΠΏΡΡΠΎΠΉ. Π’ΠΎΡΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ Π² Π΄Π΅Π»ΡΡΠΈ ΠΈΠ»ΠΈ ΡΠΈ ΡΠ΅ΡΠ΅Π· //.
Π§ΠΈΡΠ»Π° Π² Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΡΡ Π² Π΄Π²ΠΎΠΈΡΠ½ΠΎΠΉ, Π΄Π΅ΡΡΡΠ΅ΡΠΈΡΠ½ΠΎΠΉ ΠΈΠ»ΠΈ ΡΠ΅ΡΡΠ½Π°Π΄ΡΠ°ΡΠ΅ΡΠΈΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅. ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ Π² ΠΊΠ°ΠΊΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΎ ΡΠΈΡΠ»ΠΎ Π½Π°Π΄ΠΎ ΠΏΠΎΡΡΠ°Π²ΠΈΡΡ ΠΏΠΎΡΠ»Π΅ ΡΠΈΡΠ»Π° Π±ΡΠΊΠ²Ρ. ΠΠ»Ρ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ΠΏΠΈΡΠ΅ΡΡΡ Π±ΡΠΊΠ²Π° b (ΠΏΡΠΈΠΌΠ΅Ρ: 0000010b, 001011010b), Π΄Π»Ρ Π΄Π΅ΡΡΡΠ΅ΡΠΈΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΏΠΎΡΠ»Π΅ ΡΠΈΡΠ»Π° ΠΈΠ»ΠΈ ΡΠΊΠ°Π·Π°ΡΡ Π±ΡΠΊΠ²Ρ d (ΠΏΡΠΈΠΌΠ΅ΡΡ: 4589, 2356d), Π΄Π»Ρ ΡΠ΅ΡΡΠ½Π°Π΄ΡΠ°ΡΠ΅ΡΠΈΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Π½Π°Π΄ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π±ΡΠΊΠ²Ρ h, ΡΠ΅ΡΡΠ½Π°Π΄ΡΠ°ΡΠ΅ΡΠΈΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π½Π°Π΄ΠΎ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΈΡΠ°ΡΡ Ρ Π½ΡΠ»ΡΠΌ Π² Π½Π°ΡΠ°Π»Π΅ (ΠΏΡΠΈΠΌΠ΅ΡΡ: 00889h, 0AC45h, 056Fh, Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ F145Ch, Π‘123h).
Π‘Π°ΠΌΠ°Ρ ΠΏΠ΅ΡΠ²Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π±ΡΠ΄Π΅Ρ Ρ ΠΎΡΠΎΡΠΎ Π²ΡΠ΅ΠΌ ΠΈΠ·Π²Π΅ΡΡΠ½Π°Ρ MOV. ΠΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ (Π½Π΅ ΠΎΠ±ΡΠ°ΡΠ°ΠΉΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΡ Π½Π° ΠΈΠΌΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ) Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΡΠ° Π² Π΄ΡΡΠ³ΠΎΠ΅. ΠΡΠΎ βΠΌΠ΅ΡΡΠΎβ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΅Π³ΠΈΡΡΡ, ΡΡΠ΅ΠΉΠΊΠ° ΠΏΠ°ΠΌΡΡΠΈ ΠΈΠ»ΠΈ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ (ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠ°ΠΊ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅). Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
mov ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊ, ΠΈΡΡΠΎΡΠ½ΠΈΠΊ
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠ° Π² Π΄ΡΡΠ³ΠΎΠΉ.
mov edx, ecx
ΠΡΡΠ΅ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΊΠΎΠΏΠΈΡΡΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅ ecx Π² edx. Π Π°Π·ΠΌΠ΅Ρ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ° ΠΈ ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ: ΡΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° β ΠΠ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠ°:
mov al, ecx ; Π½Π΅ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ
ΠΡΠΎΡ ΠΎΠΏΠΊΠΎΠ΄ ΠΏΡΡΠ°Π΅ΡΡΡ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ DWORD (32-Π±ΠΈΡΠ½ΠΎΠ΅) Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² Π±Π°ΠΉΡ (8 Π±ΠΈΡΠΎΠ²). ΠΡΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΄Π΅Π»Π°Π½ΠΎ mov ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ (Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π΅ΡΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ).
Π ΡΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠ΅, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Ρ Π½ΠΈΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ ΠΈ ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊ Π½Π΅ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ ΠΏΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡ:
mov al, bl
mov cl, dl
mov cx, dx
mov ecx, ebx
ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΠΏΠ°ΠΌΡΡΠΈ ΠΈ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ ΡΠ³ΠΎ Π² ΡΠ΅Π³ΠΈΡΡΡ.
ΠΠ»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π²ΠΎΠ·ΡΠΌΠ΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΡΡ
Π΅ΠΌΡ ΠΏΠ°ΠΌΡΡΠΈ:
Β
| ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ | 34 | 35 | 36 | 37 | 38 | 39 | 3A | 3B | 3C | 3D | 3E | 3F | 40 | 41 | 42 |
| Π΄Π°Π½Π½ΡΠ΅ | 0D | 0A | 50 | 32 | 44 | 57 | 25 | 7A | 5E | 72 | EF | 7D | FF | AD | C7 |
(ΠΠ°ΠΆΠ΄ΡΠΉ Π±Π»ΠΎΠΊ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ Π±Π°ΠΉΡ)
ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΎ Π·Π΄Π΅ΡΡ ΠΊΠ°ΠΊ Π±Π°ΠΉΡ, Π½ΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΡΠΎ ΡΡΠΎ β 32-ΡΠ°Π·ΡΡΠ΄Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΠΎΠ·ΡΠΌΠ΅ΠΌ Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ° 3A, ΡΡΠΎ ΡΠ°ΠΊΠΆΠ΅ β 32-ΡΠ°Π·ΡΡΠ΄Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅: 0000003Ah. Π’ΠΎΠ»ΡΠΊΠΎ, ΡΡΠΎΠ±Ρ Ρ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ, Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΠ΅ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡ.
ΠΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ Π½Π° ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ 3A Π² ΡΠ°Π±Π»ΠΈΡΠ΅ Π²ΡΡΠ΅. ΠΠ°Π½Π½ΡΠ΅ Π½Π° ΡΡΠΎΠΌ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠΈ β 25, 7A, 5E, 72, EF, ΠΈ Ρ.Π΄. Π§ΡΠΎΠ±Ρ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΎ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡ 3A, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΡΠ΅Π³ΠΈΡΡΡ, Π²Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ mov:
mov eax, dword ptr [0000003Ah]
ΠΠ·Π½Π°ΡΠ°Π΅Ρ: ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Ρ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ DWORD (32-Π±ΠΈΡΠ°) ΠΈΠ· ΠΏΠ°ΠΌΡΡΠΈ ΡΠΎ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ 3Ah Π² ΡΠ΅Π³ΠΈΡΡΡ eax.
ΠΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, eax Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 725E7A25h. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ Π·Π°ΠΌΠ΅ΡΠΈΠ»ΠΈ, ΡΡΠΎ ΡΡΠΎ β ΠΈΠ½Π²Π΅ΡΡΠΈΡ ΡΠΎΠ³ΠΎ ΡΡΠΎ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ: 25 7A 5E 72. ΠΡΠΎ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΎΡ
ΡΠ°Π½ΡΡΡΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠΎΡΠΌΠ°Ρ little endian . ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΠ°ΠΌΡΠΉ ΠΌΠ»Π°Π΄ΡΠΈΠΉ Π±Π°ΠΉΡ ΡΠΎΡ
ΡΠ°Π½ΡΠ΅ΡΡΡ Π² Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π·Π½Π°ΡΠΈΠΌΠΎΠΌ Π±Π°ΠΉΡΠ΅: ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π±Π°ΠΉΡΠΎΠ² Π·Π°Π΄ΠΎΠΌ Π½Π° ΠΏΠ΅ΡΠ΅Π΄. Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΡΠΈ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΏΠΎΠΊΠ°ΠΆΡΡ ΡΡΠΎ:
dword (32-Π±ΠΈΡ) Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 10203040 ΡΠ΅ΡΡΠ½Π°Π΄ΡΠ°ΡΠΈΡΠΈΡΠ½ΠΎΠ΅ ΡΠΎΡ
ΡΠ°Π½ΡΠ΅ΡΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ ΠΊΠ°ΠΊ: 40, 30, 20, 10
word (16-Π±ΠΈΡ) Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 4050 ΡΠ΅ΡΡΠ½Π°Π΄ΡΠ°ΡΠΈΡΠΈΡΠ½ΠΎΠ΅ ΡΠΎΡ
ΡΠ°Π½ΡΠ΅ΡΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ ΠΊΠ°ΠΊ: 50, 40
ΠΠ΅ΡΠ½Π΅ΠΌΡΡ ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ Π²ΡΡΠ΅. ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ ΠΈ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΠΌΠΈ:
mov cl, byte ptr [34h] ; cl ΠΏΠΎΠ»ΡΡΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 0Dh
mov dx, word ptr [3Eh] ; dx ΠΏΠΎΠ»ΡΡΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 7DEFh
ΠΡ, Π½Π°Π²Π΅ΡΠ½ΠΎΠ΅, ΡΠΆΠ΅ ΠΏΠΎΠ½ΡΠ»ΠΈ, ΡΡΠΎ ΠΏΡΠ΅ΡΠΈΠΊΡ ptr ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π½Π°Π΄ΠΎ Π±ΡΠ°ΡΡ ΠΈΠ· ΠΏΠ°ΠΌΡΡΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ. Π ΠΏΡΠ΅ΡΠΈΠΊΡ ΠΏΠ΅ΡΠ΅Π΄ ptr ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΡΠ°Π·ΠΌΠ΅Ρ Π΄Π°Π½Π½ΡΡ
:
Byte β 1 Π±Π°ΠΉΡ
Word β 2 Π±Π°ΠΉΡΠ°
Dword β 4 Π±Π°ΠΉΡΠ°
ΠΠ½ΠΎΠ³Π΄Π° ΡΠ°Π·ΠΌΠ΅Ρ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ:
mov eax, [00403045h]
Π’Π°ΠΊ ΠΊΠ°ΠΊ eax β 32-ΡΠ°Π·ΡΡΠ΄Π½ΡΠΉ ΡΠ΅Π³ΠΈΡΡΡ, Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ, ΡΡΠΎ Π΅ΠΌΡ ΡΠ°ΠΊΠΆΠ΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ 32-ΡΠ°Π·ΡΡΠ΄Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΈΠ· ΠΏΠ°ΠΌΡΡΠΈ ΡΠΎ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ 403045h.
ΠΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ:
mov edx, 5006h
ΠΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΡΠΎΡΡΠΎ Π·Π°ΠΏΠΈΡΠ΅Ρ Π² ΡΠ΅Π³ΠΈΡΡΡ edx, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 5006. Π‘ΠΊΠΎΠ±ΠΊΠΈ, [ ΠΈ ], ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ, Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΠΏΠ°ΠΌΡΡΠΈ (Π² ΡΠΊΠΎΠ±ΠΊΠ°Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅), Π±Π΅Π· ΡΠΊΠΎΠ±ΠΎΠΊ, ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
ΠΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅Π³ΠΈΡΡΡ ΠΊΠ°ΠΊ ΡΡΠ΅ΠΉΠΊΡ ΠΏΠ°ΠΌΡΡΠΈ (ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ 32-ΡΠ°Π·ΡΡΠ΄Π½ΡΠΌ Π² 32-ΡΠ°Π·ΡΡΠ΄Π½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ ):
mov eax, 403045h ; ΠΏΠΈΡΠ΅Ρ Π² eax Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 403045
mov cx, [eax] ; ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ Π² ΡΠ΅Π³ΠΈΡΡΡ CX Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ (ΡΠ°Π·ΠΌΠ΅ΡΠ° word) ΠΈΠ· ΠΏΠ°ΠΌΡΡΠΈ
; ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π² EAX (403045)
Π mov cx, [eax], ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ ΡΠ½Π°ΡΠ°Π»Π° ΡΠΌΠΎΡΡΠΈΡ, ΠΊΠ°ΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ (= ΡΡΠ΅ΠΉΠΊΠ΅ ΠΏΠ°ΠΌΡΡΠΈ) ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ eax, Π·Π°ΡΠ΅ΠΌ ΠΊΠ°ΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠΎΠΉ ΡΡΠ΅ΠΉΠΊΠ΅ ΠΏΠ°ΠΌΡΡΠΈ, ΠΈ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ (word, 16 Π±ΠΈΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊ, cx, ΡΠ²Π»ΡΠ΅ΡΡΡ 16-ΡΠ°Π·ΡΡΠ΄Π½ΡΠΌ ΡΠ΅Π³ΠΈΡΡΡΠΎΠΌ) Π² CX.
Π‘ΡΠ΅ΠΊΠΎΠ²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ β PUSH, POP . ΠΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ Π²Π°ΠΌ ΠΎ ΡΡΠ΅ΠΊΠΎΠ²ΡΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡ
, Ρ ΡΠΆΠ΅ ΠΎΠ±ΡΡΡΠ½ΡΠ» Π²Π°ΠΌ, ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΡΡΠ΅ΠΊ. Π‘ΡΠ΅ΠΊ ΡΡΠΎ ΠΎΠ±Π»Π°ΡΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ, Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΠ΅Π³ΠΈΡΡΡ ΡΡΠ΅ΠΊΠ° ESP.
Π‘ΡΠ΅ΠΊ ΡΡΠΎ ΠΌΠ΅ΡΡΠΎ Π΄Π»Ρ Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ Π°Π΄ΡΠ΅ΡΠΎΠ² Π²ΠΎΠ·Π²ΡΠ°ΡΠ° ΠΈ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ. ΠΡΡΡ Π΄Π²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, Π΄Π»Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΡΡΠ΅ΠΊΠ΅ ΠΈ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ Π΅Π³ΠΎ ΠΈΠ· ΡΡΠ΅ΠΊΠ°: PUSH ΠΈ POP. ΠΠΎΠΌΠ°Π½Π΄Π° PUSH ΡΠ°Π·ΠΌΠ΅ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠ΅ΠΊΠ΅, Ρ.Π΅. ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠ΅ΠΉΠΊΡ ΠΏΠ°ΠΌΡΡΠΈ, Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΠ΅Π³ΠΈΡΡΡ ESP, ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠ° ESP ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ Π½Π° 4. ΠΠΎΠΌΠ°Π½Π΄Π° Pop ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΡΡΠ΅ΠΊΠ°, Ρ.Π΅. ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΡΡΠ΅ΠΉΠΊΠΈ ΠΏΠ°ΠΌΡΡΠΈ, Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΠ΅Π³ΠΈΡΡΡ ESP, ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΡΠΌΠ΅Π½ΡΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠ° ESP Π½Π° 4. ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Π½ΠΎΠ΅ Π² ΡΡΠ΅ΠΊ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ, ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΡΡΡ ΠΏΠ΅ΡΠ²ΡΠΌ. ΠΡΠΈ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½ΠΈΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΡΡΠ΅ΠΊ, ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΡΡΠ΅ΠΊΠ° ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΡΡΡ, Π° ΠΏΡΠΈ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠΈ β ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ:
(1) mov ecx, 100
(2) mov eax, 200
(3) push ecx ; ΡΠΎΡ
ΡΠ°Π½Π΅Π½ΠΈΠ΅ ecx
(4) push eax
(5) xor ecx, eax
(6) add ecx, 400
(7) mov edx, ecx
(8) pop ebx
(9) pop ecx
ΠΠ½Π°Π»ΠΈΠ·:
1: ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ 100 Π² ecx
2: ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ 200 Π² eax
3: ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ecx (=100) Π² ΡΡΠ΅ΠΊΠ΅ (ΡΠ°Π·ΠΌΠ΅ΡΠ°Π΅ΡΡΡ ΠΏΠ΅ΡΠ²ΡΠΌ)
4: ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· eax (=200) Π² ΡΡΠ΅ΠΊΠ΅ (ΡΠ°Π·ΠΌΠ΅ΡΠ°Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ)
5/6/7: Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π½Π°Π΄ ecx, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ecx ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ
8: ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΡΡΠ΅ΠΊΠ° Π² ebx: ebx ΡΡΠ°Π½Π΅Ρ 200 (ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΏΠ΅ΡΠ²ΠΎΠ΅ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅)
9: ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΡΡΠ΅ΠΊΠ° Π² ecx: ecx ΡΠ½ΠΎΠ²Π° ΡΡΠ°Π½Π΅Ρ 100 (ΠΏΠ΅ΡΠ²ΠΎΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅)
Π§ΡΠΎΠ±Ρ ΡΠ·Π½Π°ΡΡ, ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ Π² ΠΏΠ°ΠΌΡΡΠΈ, ΠΏΡΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΠΈ ΠΈ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π² ΡΡΠ΅ΠΊΠ΅, ΡΠΌ.
Π½Π° ΡΠΈΡΡΠ½ΠΎΠΊ Π½ΠΈΠΆΠ΅:
| Π‘ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ | 1203 | 1204 | 1205 | 1206 | 1207 | 1208 | 1209 | 120A | 120B |
| ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 |
| ESP |
(ΡΡΠ΅ΠΊ Π·Π΄Π΅ΡΡ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ Π½ΡΠ»ΡΠΌΠΈ, Π½ΠΎ Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ Π·Π΄Π΅ΡΡ). ESP ΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ ΠΌΠ΅ΡΡΠ΅, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΎΠ½ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ)
mov ax, 4560h
push ax
| Π‘ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ | 1203 | 1204 | 1205 | 1206 | 1207 | 1208 | 1209 | 120A | 120B |
| ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ | 00 | 00 | 60 | 45 | 00 | 00 | 00 | 00 | 00 |
| ESP |
mov cx, FFFFh
push cx
| Π‘ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ | 1203 | 1204 | 1205 | 1206 | 1207 | 1208 | 1209 | 120A | 120B |
| ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ | FF | FF | 60 | 45 | 00 | 00 | 00 | 00 | 00 |
| ESP |
pop edx
| Π‘ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ | 1203 | 1204 | 1205 | 1206 | 1207 | 1208 | 1209 | 120A | 120B |
| ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ | FF | FF | 60 | 45 | 00 | 00 | 00 | 00 | 00 |
| ESP |
edx ΡΠ΅ΠΏΠ΅ΡΡ 4560FFFFh.
ΠΡΠ·ΠΎΠ² ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π²ΠΎΠ·Π²ΡΠ°Ρ ΠΈΠ· Π½ΠΈΡ β CALL, RET. ΠΠΎΠΌΠ°Π½Π΄Π° call ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π±Π»ΠΈΠΆΠ½Π΅ΠΉ ΠΈΠ»ΠΈ Π΄Π°Π»ΡΠ½Π΅ΠΉ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ΅ Ρ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠ΅ΠΌ Π² ΡΡΠ΅ΠΊΠ΅ Π°Π΄ΡΠ΅ΡΠ° ΡΠΎΡΠΊΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°. ΠΠΎΠΌΠ°Π½Π΄Π° ret Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ· ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Π²ΡΠ·ΡΠ²Π°ΡΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅, Π°Π΄ΡΠ΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΈΠ· ΡΡΠ΅ΠΊΠ°. ΠΡΠΈΠΌΠ΅Ρ:
..code..
call 0455659
..more code..
ΠΠΎΠ΄ Ρ Π°Π΄ΡΠ΅ΡΠ° 455659:
add eax, 500
mul eax, edx
ret
ΠΠΎΠ³Π΄Π° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° call, ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ΄ Ρ Π°Π΄ΡΠ΅ΡΠ° 455659, ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π΅Π³ΠΎ Π΄ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ret, Π° Π·Π°ΡΠ΅ΠΌ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π·Π° call. ΠΠΎΠ΄ ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ call Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠΎΠΉ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Π² ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΈ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Π²Π°ΠΌ Π½ΡΠΆΠ΅Π½ Π²ΡΠ·ΡΠ²Π°ΡΡ Π΅Π³ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ call.
ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅: ΠΊΠΎΠΌΠ°Π½Π΄Π° call ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ ΡΠ΅Π³ΠΈΡΡΡ EIP (ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, ΠΊΠΎΡΠΎΡΠ°Ρ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π°) Π² ΡΡΠ΅ΠΊ, Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ret ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ Π΅Π³ΠΎ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΠΎΠΌΡ Π°Π΄ΡΠ΅ΡΡ. ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ, Π΄Π»Ρ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ).
ΠΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ΅ΡΠ΅Π· ΡΡΠ΅ΠΊ:
push Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅_1
push Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅_2
call procedure
ΠΠ½ΡΡΡΠΈ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ, Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΡΠΎΡΠΈΡΠ°Π½Ρ ΠΈΠ· ΡΡΠ΅ΠΊΠ° ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ. ΠΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, Ρ.Π΅. Π΄Π°Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡ ΡΠΎΠ»ΡΠΊΠΎ Π²Π½ΡΡΡΠΈ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ, ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠΎΡ ΡΠ°Π½Π΅Π½Ρ Π² ΡΡΠ΅ΠΊΠ΅. Π― Π½Π΅ Π±ΡΠ΄Ρ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΎΠ± ΡΡΠΎΠΌ, ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π»Π΅Π³ΠΊΠΎ ΡΠ΄Π΅Π»Π°Π½ΠΎ Π² Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ°Ρ MASM ΠΈ TASM. ΠΡΠΎΡΡΠΎ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡΠ΅, ΡΡΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π΅Π»Π°ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΈ ΡΡΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ.
ΠΠ΄Π½ΠΎ Π²Π°ΠΆΠ½ΠΎΠ΅ Π·Π°ΠΌΠ΅ΡΠ°Π½ΠΈΠ΅:
ΡΠ΅Π³ΠΈΡΡΡ eax ΠΏΠΎΡΡΠΈ Π²ΡΠ΅Π³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ.
ΠΡΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ ΠΊ ΡΡΠ½ΠΊΡΠΈΡΠΌ windows. ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π»ΡΠ±ΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ ΡΠ΅Π³ΠΈΡΡΡ Π² Π²Π°ΡΠΈΡ
ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ
ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ°Ρ
, Π½ΠΎ ΡΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡ.
ΠΠ΅ΡΠ²Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π² Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ΅ MOV
ΠΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΠΏΡΠΈΡΠΌΠ½ΠΈΠΊΠ° Π² ΠΈΡΡΠΎΡΠ½ΠΈΠΊ. Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
Mov ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊ, ΠΈΡΡΠΎΡΠ½ΠΈΠΊ
Β
ΠΡΠΈΠΌΠ΅Ρ:
Mov edx, ecx ; ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ
Β
Π Π°Π·ΠΌΠ΅Ρ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ° ΠΈ ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌΠΈ.
Mov al, ecx; Π½Π΅ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ
Β
ΠΡΠΎΡ ΠΊΠΎΠ΄ ΠΏΡΡΠ°Π΅ΡΡΡ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ DWORD (32-Π±ΠΈΡΠ½ΠΎΠ΅) Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² Π±Π°ΠΉΡ (8 Π±ΠΈΡΠΎΠ²).
Β
ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
Mov al, bl
Mov cl, dl
Mov cx, dx
Mov ecx, ebx
Β
ΠΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΠΏΠ°ΠΌΡΡΠΈ ΠΈ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π΅Π³ΠΎ Π² ΡΠ΅Π³ΠΈΡΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠΌΠ΅Π΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΡΡ Π΅ΠΌΡ ΠΏΠ°ΠΌΡΡΠΈ:
| ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ | 3A | 3B | 3C | 3D | 3E | 3F | |||||||||
| Π΄Π°Π½Π½ΡΠ΅ | 0D | 0A | 7A | 5E | EF | 7D | FF | AD | C7 |
Β
ΠΠ°Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠΌΠ΅ΡΡ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ 3A: 25, 7A, 5E, 72, EF, ΠΈ Ρ.
Π΄. Π§ΡΠΎΠ±Ρ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΎ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡ 3A, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΡΠ΅Π³ΠΈΡΡΡ, ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ mov:
mov eax, dword ptr [0000003Ah] ; eax=725E7A25h
Β
ΠΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΏΠ°ΠΌΡΡΡΡ ΡΠ°ΠΌΡΠΉ ΠΌΠ»Π°Π΄ΡΠΈΠΉ Π±Π°ΠΉΡ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ Π² Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π·Π½Π°ΡΠΈΠΌΠΎΠΌ Π±Π°ΠΉΡΠ΅: ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π±Π°ΠΉΡΠΎΠ² Π·Π°Π΄ΠΎΠΌ Π½Π° ΠΏΠ΅ΡΠ΅Π΄.
Β
dword (32-Π±ΠΈΡ) Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 10203040 ΡΠ΅ΡΡΠ½Π°Π΄ΡΠ°ΡΠΈΡΠΈΡΠ½ΠΎΠ΅ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ ΠΊΠ°ΠΊ: 40, 30, 20, 10
word (16-Π±ΠΈΡ) Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 4050 ΡΠ΅ΡΡΠ½Π°Π΄ΡΠ°ΡΠΈΡΠΈΡΠ½ΠΎΠ΅ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ ΠΊΠ°ΠΊ: 50, 40
Β
ΠΡΠΈΠΌΠ΅Ρ2:
mov cl, byte ptr [34h] ; cl ΠΏΠΎΠ»ΡΡΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 0Dh
mov dx, word ptr [3Eh] ; dx ΠΏΠΎΠ»ΡΡΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 7DEFh
Β
Π Π°Π·ΠΌΠ΅ΡΡ Π΄Π°Π½Π½ΡΡ Π΄Π»Ρ ΠΏΡΠ΅ΡΠΈΠΊΡΠ° ptr:
Byte — 1 Π±Π°ΠΉΡ
Word — 2 Π±Π°ΠΉΡΠ°
Dword — 4 Π±Π°ΠΉΡΠ°
Β
Π Π°Π·ΠΌΠ΅Ρ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ:
mov eax, [00403045h]
Β
Β
ΠΡΠΈΠΌΠ΅Ρ3:
mov eax, 403045h ; eax= 00403045h
mov cx, [eax] ; CX=Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ (ΡΠ°Π·ΠΌΠ΅ΡΠ° word) ΠΈΠ· ΠΏΠ°ΠΌΡΡΠΈ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π² EAX (403045)
Β
Π‘ΡΠ΅ΠΊΠΎΠ²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ — PUSH, POP.
Π‘ΡΠ΅ΠΊ ΡΡΠΎ ΠΎΠ±Π»Π°ΡΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ, Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΠ΅Π³ΠΈΡΡΡ ΡΡΠ΅ΠΊΠ° ESP(SP). ΠΡΡΡ Π΄Π²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, Π΄Π»Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΡΡΠ΅ΠΊΠ΅ ΠΈ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ Π΅Π³ΠΎ ΠΈΠ· ΡΡΠ΅ΠΊΠ°: PUSH ΠΈ POP. ΠΠΎΠΌΠ°Π½Π΄Π° PUSH ΡΠ°Π·ΠΌΠ΅ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠ΅ΠΊΠ΅, Ρ.Π΅. ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠ΅ΠΉΠΊΡ ΠΏΠ°ΠΌΡΡΠΈ, Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΠ΅Π³ΠΈΡΡΡ ESP, ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠ° ESP ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΡΡΡ Π½Π° 4. ΠΠΎΠΌΠ°Π½Π΄Π° POP ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΡΡΠ΅ΠΊΠ°, Ρ.Π΅. ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΡΡΠ΅ΠΉΠΊΠΈ ΠΏΠ°ΠΌΡΡΠΈ, Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΠ΅Π³ΠΈΡΡΡ ESP, ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠ° ESP Π½Π° 4. ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Π½ΠΎΠ΅ Π² ΡΡΠ΅ΠΊ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ, ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΡΡΡ ΠΏΠ΅ΡΠ²ΡΠΌ.
ΠΡΠΈΠΌΠ΅Ρ:
(1) mov ecx, 100
(2) mov eax, 200
(3) push ecx
(4) push eax
(5) xor ecx, eax
(6) add ecx, 400
(7) mov edx, ecx
(8) pop ebx
(9) pop ecx
Β
ΠΠ½Π°Π»ΠΈΠ·:
1: ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ 100 Π² ecx
2: ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ 200 Π² eax
3: ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ecx (=100) Π² ΡΡΠ΅ΠΊΠ΅ (ΡΠ°Π·ΠΌΠ΅ΡΠ°Π΅ΡΡΡ ΠΏΠ΅ΡΠ²ΡΠΌ)
4: ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· eax (=200) Π² ΡΡΠ΅ΠΊΠ΅ (ΡΠ°Π·ΠΌΠ΅ΡΠ°Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ)
5/6/7: Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π½Π°Π΄ ecx, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ecx ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ
8: ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΡΡΠ΅ΠΊΠ° Π² ebx: ebx=200.
9: ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΡΡΠ΅ΠΊΠ° Π² ecx: ecx=100.
Β
ΠΡΠΈΠΌΠ΅Ρ: Π Π°Π±ΠΎΡΠ° ΡΠΎ ΡΡΠ΅ΠΊΠΎΠΌ.
| Π‘ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ | 120A | 120B | |||||||
| ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ | |||||||||
| Β | Β | Β | Β | Β | ESP | Β | Β | Β | Β |
ESP ΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ ΠΌΠ΅ΡΡΠ΅, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΎΠ½ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ)
Mov ax, 4560h
Push ax
| Π‘ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ | 120A | 120B | |||||||
| ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ | |||||||||
| Β | Β | Β | ESP | Β | Β | Β | Β | Β | Β |
Mov cx, FFFFh
Push cx
| Π‘ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ | 120A | 120B | |||||||
| ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ | FF | FF | |||||||
| Β | ESP | Β | Β | Β | Β | Β | Β | Β | Β |
Pop edx
| Π‘ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ | 120A | 120B | |||||||
| ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ | FF | FF | |||||||
| Β | Β | Β | Β | Β | ESP | Β | Β | Β | Β |
edx = 4560FFFFh.
ΠΠ΅ΡΠ΅ΡΡΠ»ΠΊΠ° Π΄Π°Π½Π½ΡΡ
|
xchg <ΠΎΠΏΠ΅ΡΠ°Π½Π΄1>, <ΠΎΠΏΠ΅ΡΠ°Π½Π΄2>
cmovcc <ΠΏΡΠΈΡΠΌΠ½ΠΈΠΊ><ΠΈΡΡΠΎΡΠ½ΠΈΠΊ>
bswap <ΡΠ΅Π³ΠΈΡΡΡ 32>
Β
ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ mov:
1) Π½Π΅Π»ΡΠ·Ρ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΡΠ»ΠΊΡ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΠ°ΠΌΡΡΠΈ Π² Π΄ΡΡΠ³ΡΡ. ΠΡΠΈ ΡΠ°ΠΊΠΎΠΉ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠ³ΠΎ Π±ΡΡΠ΅ΡΠ° Π»ΡΠ±ΠΎΠΉ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΉ ΡΠ΅Π³ΠΈΡΡΡ ΠΎΠ±ΡΠ΅Π³ΠΎ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΡΠΈΠΌΠ΅Ρ: ΠΏΠ΅ΡΠ΅ΡΠ»Π°ΡΡ Π±Π°ΠΉΡΡ ΠΈΠ· ΡΡΠ΅ΠΉΠΊΠΈ ΠΏΠ°ΠΌΡΡΠΈ fls Π² ΡΡΠ΅ΠΉΠΊΡ fld:
Data
Fls dd 947503b3h
Fld dd ?
Code
Start
—-
Mov eax, fls
Mov fld,eax
—-
End start
Β
2) Π½Π΅Π»ΡΠ·Ρ Π·Π°Π³ΡΡΠ·ΠΈΡΡ Π² ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ½ΡΠΉ ΡΠ΅Π³ΠΈΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΈΠ· ΠΏΠ°ΠΌΡΡΠΈ.
ΠΠ»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ°ΠΊΠΎΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ (ΡΠ΅Π³ΠΈΡΡΡ ΠΎΠ±ΡΠ΅Π³ΠΎ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΡΡΠ΅ΠΊ).
Β
3) Π½Π΅Π»ΡΠ·Ρ ΠΏΠ΅ΡΠ΅ΡΡΠ»Π°ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠ° Π² Π΄ΡΡΠ³ΠΎΠΉ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ½ΡΠΉ ΡΠ΅Π³ΠΈΡΡΡ. ΠΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠ°ΠΊΡΡ ΠΏΠ΅ΡΠ΅ΡΡΠ»ΠΊΡ ΠΌΠΎΠΆΠ½ΠΎ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΡ ΡΠ΅Π³ΠΈΡΡΡΡ ΠΎΠ±ΡΠ΅Π³ΠΎ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
ΠΡΠΈΠΌΠ΅Ρ: ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅Π³ΠΈΡΡΡ es Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ΅Π³ΠΈΡΡΡΠ° ds:
Mov ax,ds
Move es,ax
ΠΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ΅ΠΊ ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ push ΠΈ pop:
Push ds ; ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠ° ds Π² ΡΡΠ΅ΠΊ
Pop es ; Π·Π°ΠΏΠΈΡΠ°ΡΡ Π² es ΡΠΈΡΠ»ΠΎ ΠΈΠ· ΡΡΠ΅ΠΊΠ°
Β
ΠΠ΅Π»ΡΠ·Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ½ΡΠΉ ΡΠ΅Π³ΠΈΡΡΡ cs Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΠΏΠ΅ΡΠ°Π½Π΄Π° Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
Β
5) ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ptr ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΠΈ ΠΊΠΎΠ³Π΄Π° ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠ½ΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠ².
Π ΠΏΡΠΈΠΌΠ΅ΡΡ, ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠ»Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 0ffh Π²ΠΎ Π²ΡΠΎΡΠΎΠΉ Π±Π°ΠΉΡ ΠΏΠΎΠ»Ρ flp:
Data
Flp dw ?
Code
start:
—-
mov byte ptr (flp+1),0ffh
—-
End start
Β
ΠΠ»Ρ Π΄Π²ΡΠ½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΡΡΠ»ΠΊΠΈ Π΄Π°Π½Π½ΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ xchg. ΠΡΡ ΠΆΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠ² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄ mov. ΠΠ±ΡΠΈΠΉ Π²ΠΈΠ΄ Π·Π°ΠΏΠΈΡΠΈ:
Β
XCHG <ΠΎΠΏΠ΅ΡΠ°Π½Π΄1>, <ΠΎΠΏΠ΅ΡΠ°Π½Π΄2>
Β
Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΎΠΏΠ΅ΡΠ°Π½Π΄Π°2 ΠΊΠΎΠΏΠΈΡΡΠ΅ΡΡΡ Π² ΠΎΠΏΠ΅ΡΠ°Π½Π΄1, Π° ΡΡΠ°ΡΠΎΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΎΠΏΠ΅ΡΠ°Π½Π΄Π°1 β Π² ΠΎΠΏΠ΅ΡΠ°Π½Π΄2. XCHG ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π½Π°Π΄ Π΄Π²ΡΠΌΡ ΡΠ΅Π³ΠΈΡΡΡΠ°ΠΌΠΈ ΠΈΠ»ΠΈ Π½Π°Π΄ ΡΠ΅Π³ΠΈΡΡΡΠΎΠΌ ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
Xchg eax,ebx ; ΠΎΠ±ΠΌΠ΅Π½ΡΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² eax ΠΈ ebx.
Π’ΠΎ ΠΆΠ΅, ΡΡΠΎ ΡΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π½Π° ΡΠ·ΡΠΊΠ΅ Π‘:
temp = eax;
eax = ebx;
ebx = temp;
Β
Xchg al,al ; Π° ΡΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ Π½ΠΈΡΠ΅Π³ΠΎ
xchg ax, word ptr [si] ; ΠΎΠ±ΠΌΠ΅Π½ΡΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠ° Π°Ρ ΠΈ ΡΠ»ΠΎΠ²Π° Π² ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ Π² [si].
Β
ΠΠ»Ρ ΡΡΠ»ΠΎΠ²Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΡΡΠ»ΠΊΠΈ Π΄Π°Π½Π½ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π°:
CMOVcc <ΠΏΡΠΈΡΠΌΠ½ΠΈΠΊ><ΠΈΡΡΠΎΡΠ½ΠΈΠΊ>
Β
ΠΠ°Π±ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠΎΠΏΠΈΡΡΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ° Π² ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊ, Π΅ΡΠ»ΠΈ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΠ΅ΡΡΡ ΡΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠ΅.
ΠΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ CMOVcc ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π‘ΠΠ (ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅) Ρ ΡΠ΅ΠΌΠΈ ΠΆΠ΅ ΠΎΠΏΠ΅ΡΠ°Π½Π΄Π°ΠΌΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
Π§ΠΈΡΠ°ΠΉΡΠ΅ ΡΠ°ΠΊΠΆΠ΅:
ο»Ώ ο»ΏΠ‘ΡΡΠΎΠΊΠΎΠ²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π² Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ΅
Π‘ΡΡΠΎΠΊΠΎΠ²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π°Π·ΡΠ²Π°ΡΡ ΡΠ΅ΠΏΠΎΡΠ΅ΡΠ½ΡΠΌΠΈ ΠΈΠ»ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΠΌΠΈ Π½Π°Π΄ ΡΠ΅ΠΏΠΎΡΠΊΠ°ΠΌΠΈ Π±Π°ΠΉΡΠΎΠ².
Π‘ΡΡΠΎΠΊΠ°-ΡΡΠΎ ΡΠ΅ΠΏΠΎΡΠΊΠ° Π±Π°ΠΉΡΠΎΠ², Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π΅Π΅ Π΄Π»ΠΈΠ½Ρ.Π ΡΠ·ΡΠΊΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΠΏΠΈΡΡΠ²Π°ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π΄Π»ΠΈΠ½Ρ ΡΡΡΠΎΠΊΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ Π²Π²ΠΎΠ΄ΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ Π±Π°ΠΉΡΡ ΠΌΠΎΠ³ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡΡ Π² ΡΡΡΠΎΠΊΠ΅, Π° ΡΠ°ΠΊΠΆΠ΅ Π² ΠΊΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡΡΡ ΡΡΡΠΎΠΊΠΈ- ΡΠΊΠΎΠ»ΡΠΊΠΎ Π±Π°ΠΉΡΠΎΠ² ΠΊΠΎΠ΄ΠΈΡΡΠ΅Ρ ΡΠΈΠΌΠ²ΠΎΠ», ΠΈ ΠΊΠ°ΠΊΠ°Ρ ΡΠ°Π±Π»ΠΈΡΠ° Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π±Π°ΠΉΡΠΎΠ² ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ².Π ΡΠ·ΡΠΊΠ΅ Π‘ΠΈ ΠΏΠΎΠ΄ ΡΡΡΠΎΠΊΠΎΠΉ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π±Π°ΠΉΡΠΎΠ², Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°ΡΡΠ°ΡΡΡ Π±Π°ΠΉΡΠΎΠΌ ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ 0.
Π‘ΡΡΠΎΠΊΠΎΠ²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ ΡΡΡΠΎΠΊΠΈ: Π±Π°ΠΉΡΠΎΠΌ, ΡΠ»ΠΎΠ²ΠΎΠΌ, Π΄Π²ΠΎΠΉΠ½ΡΠΌ ΡΠ»ΠΎΠ²ΠΎΠΌ.ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°Π»Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡΡ ΡΠ°ΠΊΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ-ΠΏΡΠ΅ΡΠΈΠΊΡΡ:
REP-ΠΏΠΎΠ²ΡΠΎΡΡΡΡ, ΠΏΠΎΠΊΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ECX Π½Π΅ ΠΎΠ±ΡΠ°ΡΠΈΡΡΡ Π² 0
REPE/REPZ-ΠΏΠΎΠ²ΡΠΎΡΡΡΡ ΠΏΠΎΠΊΠ° ΡΠ°Π²Π½ΠΎ/Π½ΡΠ»Ρ. ΠΠ°Π½Π½ΡΠΉ ΠΏΡΠ΅ΡΠΈΠΊΡ Π·Π°ΡΡΠ°Π²Π»ΡΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΡΡΠΎΠΊΠΎΠ²ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ECX Π½Π΅ ΠΎΠ±ΡΠ°ΡΠΈΡΡΡ Π² 0
REPNE/REPZ-ΠΏΠΎΠ²ΡΠΎΡΡΡΡ ΠΏΠΎΠΊΠ° Π½Π΅ ΡΠ°Π²Π½ΠΎ/Π½Π΅ Π½ΡΠ»Ρ.
ΠΠ°Π½Π½ΡΠΉ ΠΏΡΠ΅ΡΠΈΠΊΡ Π·Π°ΡΡΠ°Π²Π»ΡΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΡΡΠΎΠΊΠΎΠ²ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π΄ΠΎ ΡΠ΅Ρ
ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ECX Π½Π΅ ΠΎΠ±ΡΠ°ΡΠΈΡΡΡ Π² 0
Π‘ΡΡΠΎΠΊΠΎΠ²ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΡΠΈΡΠ°ΡΡ, ΡΡΠΎ ΡΡΡΠΎΠΊΠ° -ΠΈΡΡΠΎΡΠ½ΠΈΠΊ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ DS:ESI(Π΄Π»Ρ Π½Π°Ρ ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ ESI),Π° ΡΡΡΠΎΠΊΠ°-ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊΠΏΠΎ Π°Π΄ΡΠ΅ΡΠ° ES:EDI(Π΄Π»Ρ Π½Π°Ρ ΠΏΡΠΎΡΡΠΎ EDI). ΠΡΠ΅ ΡΡΡΠΎΠΊΠΎΠ²ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ Π½Π° ΡΠ΅ΡΡΡ Π³ΡΡΠΏΠΏ:
1. ΠΠΎΠΌΠ°Π½Π΄Ρ ΠΏΠ΅ΡΠ΅ΡΡΠ»ΠΊΠΈ
MOVSB — ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ Π±Π°ΠΉΡΠΎΠ².
MOVSW — ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ ΡΠ»ΠΎΠ².
MOVSD — ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ Π΄Π²ΠΎΠΉΠ½ΡΡ ΡΠ»ΠΎΠ²
ΠΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΡΠΌΠ°Ρ MOVS ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊ, ΠΈΡΡΠΎΡΠ½ΠΈΠΊ-Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ ΠΏΠΎ ΡΠΈΠΏΡ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠ² ΡΠ°ΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΠΊΠ°ΠΊΡΡ ΠΈΠ· ΡΡΠ΅Ρ ΡΠΎΡΠΌ ΠΊΠΎΠΌΠ°Π½Π΄ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π²ΡΠ±ΡΠ°ΡΡ. ΠΠΎΠ±Π°Π½Π΄Π° ΠΊΠΎΠΏΠΈΡΡΠ΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΡΡΠΎΠΊΠΈ ΠΈΠ· Π°Π΄ΡΠ΅ΡΠ°, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠ³ΠΎ ESI, Π² Π°Π΄ΡΠ΅Ρ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΡΠΉ EDI. ΠΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ°ΠΊΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ESI ΠΈ EDI ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ(ΡΠ»Π°Π³ DF=0) ΠΈΠ»ΠΈ ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΡΡΡ(ΡΠ»Π°Π³ DF=1) Π½Π° ΡΠ°Π·ΠΌΠ΅ΡΠ°Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΡΡΠΎΠΊΠΈ
2. ΠΠΎΠΌΠ°Π½Π΄Ρ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ
CMPSB — ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΡΡΡΠΎΠΊ Π±Π°ΠΉΡΠΎΠ².
CMPSW — ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΡΡΡΠΎΠΊ ΡΠ»ΠΎΠ².
CMPSD — ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΡΡΡΠΎΠΊ Π΄Π²ΠΎΠΉΠ½ΡΡ ΡΠ»ΠΎΠ²
3. ΠΠΎΠΌΠ°Π½Π΄Ρ ΠΏΠΎΠΈΡΠΊΠ°(ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ)
SCASB — ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ Π±Π°ΠΉΡΠΎΠ².
SCASW — ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ ΡΠ»ΠΎΠ²
SCASD — ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ Π΄Π²ΠΎΠΉΠ½ΡΡ ΡΠ»ΠΎΠ²
4. ΠΠΎΠΌΠ°Π½Π΄Ρ ΡΡΠ΅Π½ΠΈΡ ΠΈΠ· ΡΡΡΠΎΠΊΠΈ
LODSB — ΡΡΠ΅Π½ΠΈΠ΅ Π±Π°ΠΉΡΠ° ΠΈΠ· ΡΡΡΠΎΠΊΠΈ.
LODSW — ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ»ΠΎΠ²Π° ΠΈΠ· ΡΡΡΠΎΠΊΠΈ.
LODSD — ΡΡΠ΅Π½ΠΈΠ΅ Π΄Π²ΠΎΠΉΠ½ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° ΠΈΠ· ΡΡΡΠΎΠΊΠΈ.
ΠΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΡΠΌΠ°Ρ LODS ΠΈΡΡΠΎΡΠ½ΠΈΠΊ-Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ ΠΏΠΎ ΡΠΈΠΏΡ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠ² ΡΠ°ΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΠΊΠ°ΠΊΡΡ ΠΈΠ· ΡΡΠ΅Ρ ΡΠΎΡΠΌ ΠΊΠΎΠΌΠ°Π½Π΄ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π²ΡΠ±ΡΠ°ΡΡ. ΠΠΎΠΌΠ°Π½Π΄Π° ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ· ΠΏΠ°ΠΌΡΡΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ Π°Π΄ΡΠ΅ΡΡΠ΅ΡΡΡ ESI, ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² AL,AX ΠΈΠ»ΠΈ EAX. ΠΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ°ΠΊΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ EDI ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ Π½Π° ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΡΡΠΎΠΊΠΈ
5. ΠΠΎΠΌΠ°Π½Π΄Π° Π·Π°ΠΏΠΈΡΠΈ Π² ΡΡΡΠΎΠΊΡ
STOSB — Π·Π°ΠΏΠΈΡΡ Π±Π°ΠΉΡΠ° Π² ΡΡΡΠΎΠΊΡ.
STOSW — Π·Π°ΠΏΠΈΡΡ ΡΠ»ΠΎΠ²Π° Π² ΡΡΡΠΎΠΊΡ.
STOSD — Π·Π°ΠΏΠΈΡΡ Π΄Π²ΠΎΠΉΠ½ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° Π² ΡΡΡΠΎΠΊΡ.
ΠΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΡΠΌΠ°Ρ STOS ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊ, ΠΈΡΡΠΎΡΠ½ΠΈΠΊ-Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ ΠΏΠΎ ΡΠΈΠΏΡ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠ² ΡΠ°ΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΠΊΠ°ΠΊΡΡ ΠΈΠ· ΡΡΠ΅Ρ ΡΠΎΡΠΌ ΠΊΠΎΠΌΠ°Π½Π΄ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π²ΡΠ±ΡΠ°ΡΡ. ΠΠΎΠΌΠ°Π½Π΄Π° ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΠΏΠ°ΠΌΡΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π°Π΄ΡΠ΅ΡΡΠ΅ΡΡΡ EDI, ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΈΠ· AL,AX ΠΈΠ»ΠΈ EAX. ΠΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ°ΠΊΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ EDI ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ Π½Π° ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΡΡΠΎΠΊΠΈ
6. ΠΠΎΠΌΠ°Π½Π΄Ρ ΡΡΠ΅Π½ΠΈΡ/Π·Π°ΠΏΠΈΡΠΈ ΡΡΡΠΎΠΊΠΈ ΠΈΠ· ΠΏΠΎΡΡΠ°
ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΡΠ΅ΡΠΈΠΊΡΠΎΠ² (REP, REPZ/REPE, REPNZ/REPNE)Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ Π½Π° ΡΠ΅ΠΏΠΎΡΠΊΠΈ Π±Π°ΠΉΡΠΎΠ².
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΡΠΎΠΊΠΎΠ²ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄
// string.cpp: ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠΎΡΠΊΡ Π²Ρ
ΠΎΠ΄Π° Π΄Π»Ρ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
//
Β
#include "stdafx.h"
#include <windows.h>//Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ DWORD
#include <stdio.h> //Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ printf
#include <conio.h>//Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ _getch()
/*ΠΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ*/
DWORD lens (char *);//ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π΄Π»ΠΈΠ½Ρ ΡΡΡΠΎΠΊΠΈ
void cats(char*, char*,char*);//ΡΡΠ½ΠΊΡΠΈΡ ΡΠ»ΠΈΡΠ½ΠΈΡ Π΄Π²ΡΡ
ΡΡΡΠΎΠΊ Π² ΡΡΠ΅ΡΡΡ
/*ΠΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
*/
char a[]="fdhfjliop";
char b[]="12345";
char c[]="4";
Β
int _tmain(int argc, _TCHAR* argv[])
{
__asm{
/*ΠΌΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌΡΡ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ cats,ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ²ΠΎΠΈΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΠΈΠΌΠ΅Π΅Ρ 3 ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ
Π½Π° ΡΡΡΠΎΠΊΡ ΡΠΈΠΏΠ° char(Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅ a,b,c).
Π§ΡΠΎΠ±Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° cats ΠΌΠΎΠ³Π»Π° ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ,
ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌΡΠ΅ ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ ΠΈΡ
Π² ΡΡΠ΅ΠΊ(Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅ c,b,a), Π° Π·Π°ΡΠ΅ΠΌ Π²ΡΡΠΎΠ²Π½ΡΡΡ ΡΡΠ΅ΠΊ */
LEA EAX,c;//ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΠΌ Π² ΡΠ΅Π³ΠΈΡΡΡ EAX Π°Π΄ΡΠ΅Ρ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΡΡΠΎΠΊΠΈ c
PUSH EAX;//ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ EAX Π² ΡΡΠ΅ΠΊ
LEA EAX,b;//ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΠΌ Π² ΡΠ΅Π³ΠΈΡΡΡ EAX Π°Π΄ΡΠ΅Ρ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΡΡΠΎΠΊΠΈ b
PUSH EAX;//ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ EAX Π² ΡΡΠ΅ΠΊ
LEA EAX,a;//ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΠΌ Π² ΡΠ΅Π³ΠΈΡΡΡ EAX Π°Π΄ΡΠ΅Ρ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΡΡΠΎΠΊΠΈ a
PUSH EAX;//ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ EAX Π² ΡΡΠ΅ΠΊ
CALL cats;//Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ
ADD ESP,12;// Π²ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅ΠΌ ΡΡΠ΅ΠΊ
};
printf("%s\n",c);//Π²ΡΠ²ΠΎΠ΄ΠΈΠΌ ΡΡΠΌΠΌΠ°ΡΠ½ΡΡ ΡΡΡΠΎΠΊΡ
_getch();
return 0;
}
Β
//ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π΄Π»ΠΈΠ½Ρ ΡΡΡΠΎΠΊΠΈ
DWORD lens (char * s)
{
DWORD l=0;
__asm
{
CLD;//Π·Π°Π΄Π°Π΅ΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ (ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΠΌ ΡΠ»Π°Π³ DF-ΡΠ»Π°Π³ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ).
//Π΄Π°Π½Π½ΡΠΉ ΡΠ»Π°Π³ ΡΡΠΈΡΡΠ²Π°Π΅ΡΡΡ Π² ΡΡΡΠΎΠΊΠΎΠ²ΡΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡ
.ΠΡΠ»ΠΈΠ£ΡΠ΅Π±Π½ΡΠ΅ ΠΏΠΎΡΠΎΠ±ΠΈΡ ΠΏΠΎAVR — ΠΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ±ΠΎΡΠΊΠΈ
AVR Assembly ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ. ΠΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ — ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ°ΠΌΡΡ
ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΡ
ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΎΠ±Π»Π΅Π³ΡΠΈΡΡ Π²Π°ΡΡ ΠΆΠΈΠ·Π½Ρ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π΄Π΅Π»Π°Π΅Ρ ΡΠΎ, ΡΡΠΎ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅, ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ ΡΠ½ΠΎΠ²Π° ΠΈ ΡΠ½ΠΎΠ²Π°.
ΠΠ΄Π½Π°ΠΊΠΎ, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ Π½Π°ΡΡΠΈΡΡΡΡ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΠ½ΡΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ The Stack Pointer .
Π£ΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΡΡΠ΅ΠΊΠ°
Π£ΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΡΡΠ΅ΠΊΠ° — ΡΡΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΡΠ΅Π³ΠΈΡΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ, Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π² SRAM, Π½Π°Π·ΡΠ²Π°Π΅ΠΌΠΎΠ΅ Π‘ΡΠ΅ΠΊ .Π‘ΡΠ΅ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° Π°Π΄ΡΠ΅ΡΠΎΠ² ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ.
Π£ΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΡΡΠ΅ΠΊΠ° — ΡΡΠΎ 16-ΡΠ°Π·ΡΡΠ΄Π½ΡΠΉ ΡΠ΅Π³ΠΈΡΡΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ Π²ΠΎ Π²ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΡ ΡΠ°ΠΉΠ»Π°Ρ ΠΊΠ°ΠΊ SPH ΠΈ SPL. Π ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ°Ρ Ρ ΠΎΡΠ΅Π½Ρ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΠΌ ΠΎΠ±ΡΠ΅ΠΌΠΎΠΌ SRAM SPH Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ SPL.
ΠΠ±ΡΡΠ½ΠΎ ΡΡΠ΅ΠΊ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΠΊΠΎΠ½ΡΠ° SRAM ΠΈ Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΡΠΈ ΠΎΡ Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠΈΡ Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π°Π΄ΡΠ΅ΡΠ°, ΠΊΠΎΠ³Π΄Π° Π² Π½Π΅ΠΌ Ρ ΡΠ°Π½ΡΡΡΡ Π΄Π°Π½Π½ΡΠ΅. Π£ΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΡΡΠ΅ΠΊΠ° Π²ΡΠ΅Π³Π΄Π° ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° Π²Π΅ΡΡ Π½ΠΈΠ΅ ΡΡΠ΅ΠΊΠ°.
ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΡΡΠ΅ΠΊΠ°
Π§ΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ΅ΠΊ, ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΡΡΠ΅ΠΊΠ° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ Π°Π΄ΡΠ΅ΡΠΎΠΌ Π² SRAM. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΡΡΠ΅ΠΊΠ° Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π°, Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π·Π°Π³ΡΡΠΆΠ΅Π½Ρ Π² Π½Π΅Π³ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ out.
ΠΠ° Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²ΡΡ
AVR ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΡΡΠ΅ΠΊΠ° Π±ΡΠ΄Π΅Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ SRAM ΠΏΡΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ ΠΏΠΈΡΠ°Π½ΠΈΡ, Π½ΠΎ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΡΡΠ°ΡΡΡ
ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π½Π°ΡΡΡΠΎΠ΅Π½ Π²ΡΡΡΠ½ΡΡ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ Π»ΡΠ±ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΠΈΠΌΠ΅Ρ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½ΠΈΠΆΠ΅
ldi r16, ΠΠΠΠΠΠ (RAMEND); Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΠΌΠ»Π°Π΄ΡΠΈΠΉ Π±Π°ΠΉΡ RAMEND Π² r16
Π²ΡΡ
ΠΎΠ΄ SPL, r16; ΡΠΎΡ
ΡΠ°Π½ΠΈΡΡ r16 Π² Π½ΠΈΠΆΠ½Π΅ΠΌ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ ΡΡΠ΅ΠΊΠ°
ldi r16, ΠΠ«Π‘ΠΠΠΠ (RAMEND); Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΡΡΠ°ΡΡΠΈΠΉ Π±Π°ΠΉΡ RAMEND Π² r16
ΠΈΠ· SPH, r16; ΡΠΎΡ
ΡΠ°Π½ΠΈΡΡ r16 Π² Π²ΡΡΠΎΠΊΠΎΠΌ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ ΡΡΠ΅ΠΊΠ° ΠΠΎΠ½ΡΡΠ°Π½ΡΠ° RAMEND ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° Π²ΠΎ Π²ΠΊΠ»ΡΡΠ°Π΅ΠΌΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ ΠΊΠ°ΠΊ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π°Π΄ΡΠ΅Ρ Π² SRAM.ΠΠ»Ρ ΠΌΠ½ΠΎΠ³ΠΈΡ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠΎΠ² RAMEND — ΡΡΠΎ 16-Π±ΠΈΡΠ½ΡΠΉ Π°Π΄ΡΠ΅Ρ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠ°Π·Π±ΠΈΡ Π½Π° 8-Π±ΠΈΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Ρ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ HIGH ΠΈ LOW Π΄Π»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π² ΡΠ°Π±ΠΎΡΠΈΠΉ ΡΠ΅Π³ΠΈΡΡΡ. ΠΠ° Π½Π΅Π±ΠΎΠ»ΡΡΠΈΡ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ°Ρ RAMEND ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΌΠ΅Π½ΡΡΠ΅ 16 Π±ΠΈΡ, ΠΈ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ SPH Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ, Π° SPL — Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠ΅Π³ΠΈΡΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ.
ldi r16, RAMEND; Π·Π°Π³ΡΡΠ·ΠΈΡΡ RAMEND Π² r16
Π²ΡΡ
ΠΎΠ΄ SPL, r16; ΡΠΎΡ
ΡΠ°Π½ΠΈΡΡ r16 Π² ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ ΡΡΠ΅ΠΊΠ° ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: Π₯ΠΎΡΡ Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²ΡΠ΅ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΡΡΠ΅ΠΊΠ° RAMEND ΠΏΡΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ ΠΏΠΈΡΠ°Π½ΠΈΡ, ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ Π²ΡΠ΅Π³Π΄Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π² Π½Π°ΡΠ°Π»Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
ΠΡΠΎ Π·Π°ΡΠΈΡΠ°Π΅Ρ Π²Π°Ρ ΠΎΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΡΡΠ΅ΠΊΠ°, Π½Π°ΡΠΈΠ½Π°ΡΡΠ΅Π³ΠΎΡΡ Ρ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΡΠ° Π² ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΡΠ±ΡΠΎΡΠ°.
Π₯ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ Π² ΡΡΠ΅ΠΊΠ΅
ΠΠΎΡΠ»Π΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΡΡΠ΅ΠΊΠ° ΡΠ΅Π³ΠΈΡΡΡΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠΎΡ ΡΠ°Π½Π΅Π½Ρ ΠΈΠ»ΠΈ Π·Π°Π³ΡΡΠΆΠ΅Π½Ρ Π² ΡΡΠ΅ΠΊ — ΡΡΠΎ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ , Π½Π°ΠΆΠΈΠΌΠ°Ρ ΠΈΠ»ΠΈ Π²ΡΡΠ°Π»ΠΊΠΈΠ²Π°Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ. ΠΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ Π½ΠΈΠΆΠ΅.
| ΠΠ½Π΅ΠΌΠΎΠ½ΠΈΠΊΠ° | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
|---|---|
| Π½Π°ΠΆΠΈΠΌΠ°ΡΡ | push-ΡΠ΅Π³ΠΈΡΡΡ Π² ΡΡΠ΅ΠΊΠ΅ |
| Π½Π°ΡΠ΅Π»Π΅Π½ΠΈΠ΅ | ΠΏΠΎΠΏ-ΡΠ΅Π³ΠΈΡΡΡ ΠΈΠ· ΡΡΠ΅ΠΊΠ° |
ΠΠ½ΡΡΡΡΠΊΡΠΈΠΈ push ΠΈ pop ΠΏΡΠΎΡΡΡ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ:
push r0; ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ r0 Π² ΡΡΠ΅ΠΊ
pop r0; Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ r0 ΠΈΠ· ΡΡΠ΅ΠΊΠ° ΠΠΎΠ³Π΄Π° push Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Ρ ΡΠ΅Π³ΠΈΡΡΡΠΎΠΌ, ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΡΠΎΠ³ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠ° ΡΠΎΡ
ΡΠ°Π½ΡΠ΅ΡΡΡ Π² Π²Π΅ΡΡ
Π½ΠΈΡ
ΡΡΠ΅ΠΊΠ°, Ρ.Π΅.Π΅. Π°Π΄ΡΠ΅Ρ, Π·Π°Π³ΡΡΠΆΠ΅Π½Π½ΡΠΉ Π² ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΡΡΠ΅ΠΊΠ°. Π£ΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΡΡΠ΅ΠΊΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΡΡΡ Π½Π° Π΄ΠΎ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ push (ΠΏΠΎΠΌΠ½ΠΈΡΠ΅, ΡΡΠΎ ΡΡΠ΅ΠΊ ΡΠ°ΡΡΠ΅Ρ ΠΎΡ Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ Π°Π΄ΡΠ΅ΡΠ° ΠΊ ΠΌΠ»Π°Π΄ΡΠ΅ΠΌΡ).
ΠΠΎΠ³Π΄Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° pop Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Ρ ΡΠ΅Π³ΠΈΡΡΡΠΎΠΌ, Π² ΡΡΠΎΡ ΡΠ΅Π³ΠΈΡΡΡ Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ°. Π£ΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΡΡΠ΅ΠΊΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ Π½Π° Π΄ΠΎ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ pop.
ΠΠ΅ΡΠ΅Π΄Π°ΡΠ° ΡΠ΅Π³ΠΈΡΡΡΠ° Π² ΡΡΠ΅ΠΊ Π½Π΅ ΡΡΠΈΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠ°, Π° ΠΏΡΠΎΡΡΠΎ ΠΊΠΎΠΏΠΈΡΡΠ΅Ρ Π΅Π³ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π² SRAM.ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ, , Π²ΡΡΠ°Π»ΠΊΠΈΠ²Π°ΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΡΡΠ΅ΠΊΠ°, Π½Π΅ ΡΡΠΈΡΠ°Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΡΠΎΠ³ΠΎ Π°Π΄ΡΠ΅ΡΠ° Π² ΡΡΠ΅ΠΊΠ΅.
ΠΡΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² Π² ΡΡΠ΅ΠΊ, ΠΊΠΎΠΌΠ°Π½Π΄Ρ pop Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅ , ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ , ΡΡΠΎΠ±Ρ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΠΈΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΡ, Ρ.Π΅.
push r0; ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ r0 Π² ΡΡΠ΅ΠΊ
Π½Π°ΠΆΠΌΠΈΡΠ΅ r1; ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ r1 Π² ΡΡΠ΅ΠΊ
Π½Π°ΠΆΠΌΠΈΡΠ΅ r2; ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ r2 Π² ΡΡΠ΅ΠΊ
pop r2; Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ r2
pop r1; Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ r1
pop r0; Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ r0 ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π½Π° ΡΡΠΎ ΠΎΡΠΎΠ±ΠΎΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π²ΡΠ·ΠΎΠ² Π²ΡΠΏΠ»ΡΠ²Π°ΡΡΠΈΡ
ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ Π² Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π² Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΡ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ
ldi r16,0x01; Π·Π°Π³ΡΡΠ·ΠΈΡΡ r16 Ρ ΠΏΠΎΠΌΠΎΡΡΡ 0x01
ldi r17,0x02; Π·Π°Π³ΡΡΠ·ΠΈΡΡ r17 Ρ ΠΏΠΎΠΌΠΎΡΡΡ 0x02
Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ r16; ΡΠΎΡ
ΡΠ°Π½ΠΈΡΡ r16 Π² ΡΡΠ΅ΠΊ
Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ r17; ΡΠΎΡ
ΡΠ°Π½ΠΈΡΡ r17 Π² ΡΡΠ΅ΠΊ
pop r16; Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ r16 (ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ = 0x02)
pop r17; Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ r17 (ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ = 0x01) ΠΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ Π²ΡΡΠ΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ r16 ΠΈ r17 ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΌΠ΅ΡΡΠ°ΠΌΠΈ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ pop Π½Π΅ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅, ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ ΡΠΎΠΌΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π±ΡΠ» Π²ΡΠ·Π²Π°Π½ push (ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, Π΅ΡΠ»ΠΈ Π²Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΠΎΠΌΠ΅Π½ΡΡΡ ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π΄Π²ΡΡ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² Π±Π΅Π· ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠ΅ΡΡΠ΅Π³ΠΎ, ΡΡΠΎ ΠΎΡΠ»ΠΈΡΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ!).
ΠΠΎΠΌΠ½ΠΈΡΠ΅: Π Π΅Π³ΠΈΡΡΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½Ρ ΠΈΠ· ΡΡΠ΅ΠΊΠ° Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅, ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ ΡΠΎΠΌΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ½ΠΈ Π±ΡΠ»ΠΈ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Ρ, ΡΡΠΎΠ±Ρ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΈΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° Ρ Π½Π°Ρ Π΅ΡΡΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΡΡΠ΅ΠΊΠ°, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌ.
ΠΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
ΠΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ — ΡΡΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² Π»ΡΠ±ΠΎΠΉ ΡΠΎΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
ΠΠΎΠ³Π΄Π° Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ Π°Π΄ΡΠ΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° Π² ΡΡΠ΅ΠΊ.ΠΠ°ΡΠ΅ΠΌ ΠΎΠ½ ΠΏΠ΅ΡΠ΅ΠΉΠ΄Π΅Ρ ΠΊ ΠΌΠ΅ΡΡΡ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡ ΠΊΠΎΠ΄ ΡΠ°ΠΌ. ΠΠΎΠ³Π΄Π° Π΄ΠΎΡΡΠΈΠ³Π°Π΅ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°, Π°Π΄ΡΠ΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° Π±ΡΠ΄Π΅Ρ , Π²ΡΡΠΊΠΎΡΠΈΡ ΠΈΠ· ΡΡΠ΅ΠΊΠ° , ΠΈ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ ΠΏΠ΅ΡΠ΅ΠΉΠ΄Π΅Ρ ΠΊ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΡΡΠ°Π·Ρ ΠΆΠ΅ ΠΏΠΎΡΠ»Π΅ Π²ΡΠ·ΠΎΠ²Π° ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
ΠΠ½ΡΡΡΡΠΊΡΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π° ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° ΠΈΠ· ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ Π½ΠΈΠΆΠ΅.
| ΠΠ½Π΅ΠΌΠΎΠ½ΠΈΠΊΠ° | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
|---|---|
| Π·Π²ΠΎΠ½ΠΎΠΊ | Π΄Π»ΠΈΠ½Π½ΡΠΉ Π²ΡΠ·ΠΎΠ² ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ |
| icall | ΠΊΠΎΡΠ²Π΅Π½Π½ΡΠΉ Π²ΡΠ·ΠΎΠ² ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ |
| Π·Π²ΠΎΠ½ΠΎΠΊ | ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ |
| ΡΠ΅Ρ | Π²ΠΎΠ·Π²ΡΠ°Ρ ΠΈΠ· ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ |
ΠΡΠ·ΠΎΠ² ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ
ΠΠΈΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΏΡΠΎΡΡΠΎΠΉ ΠΊΠΎΠ΄, Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΠΉ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
ldi r16,0x01; Π·Π°Π³ΡΡΠ·ΠΈΡΡ r16 Ρ ΠΏΠΎΠΌΠΎΡΡΡ 0x01
ldi r17,0x02; Π·Π°Π³ΡΡΠ·ΠΈΡΡ r17 Ρ ΠΏΠΎΠΌΠΎΡΡΡ 0x02
call addReg; ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π²ΡΠ·ΠΎΠ²Π°
ΡΠΈΠΊΠ»: ΡΠΈΠΊΠ» rjmp; Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½Π°Ρ ΠΏΠ΅ΡΠ»Ρ
addReg:
Π΄ΠΎΠ±Π°Π²ΠΈΡΡ r16, r17; Π΄ΠΎΠ±Π°Π²ΠΈΡΡ r16 ΠΈ r17
ret; Π²ΠΎΠ·Π²ΡΠ°Ρ ΠΈΠ· ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΡΠ·ΠΎΠ² ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Ρ ΠΌΠ΅ΡΠΊΠΎΠΉ Π½Π°ΡΠ΅ΠΉ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ addReg.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π²ΡΠ·ΠΎΠ²Π° Π·Π°ΡΡΠ°Π²ΠΈΡ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΌΠ΅ΡΠΊΠ΅, Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠ°ΠΌ ΠΊΠΎΠ΄ ΠΈ, ΠΊΠΎΠ³Π΄Π° Π±ΡΠ΄Π΅Ρ Π΄ΠΎΡΡΠΈΠ³Π½ΡΡΠ° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ ret, Π²Π΅ΡΠ½Π΅ΡΡΡ ΠΊ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ Π²ΡΠ·ΠΎΠ²Π° — Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΠΉ ΡΠΈΠΊΠ», ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ rjmp.
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ²Π½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π² ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠ°ΠΊ Π² ΡΠ»ΡΡΠ°Π΅ Ρ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ Π² C. Π ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΎΠΆΠΈΠ΄Π°Π΅Ρ, ΡΡΠΎ Π΅Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠΆΠ΅ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² ΡΠ΅Π³ΠΈΡΡΡΠ°Ρ r16 ΠΈ r17.
ΠΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π²ΡΠ·Π²Π°Π½Ρ ΠΈΠ· Π²ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ call ΠΈΠ»ΠΈ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π° ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠΈ Π΄ΠΎ 4Π ΡΠ»ΠΎΠ² Ρ ΠΏΠΎΠΌΠΎΡΡΡ rcall.
rcall doSomething; Π²ΡΠ·ΠΎΠ² ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ doSomething
...; Π΄ΡΡΠ³ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΊΠΎΠ΄
ΡΠ΄Π΅Π»Π°ΠΉ ΡΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ:
...; ΠΊΠΎΠ΄ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
ret; Π²ΠΎΠ·Π²ΡΠ°Ρ ΠΈΠ· ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π²ΡΠ·ΠΎΠ²Π° ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, icall, ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΡΡΠΌ, ΡΠ΅ΠΌ ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π·Π΄Π΅ΡΡ, Π½ΠΎ Π΄Π»Ρ ΠΏΠΎΠ»Π½ΠΎΡΡ ΠΎΠ½ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΠΈΡ ΠΊ Π°Π΄ΡΠ΅ΡΡ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π·Π°Π³ΡΡΠΆΠ΅Π½Π½ΠΎΠΉ Π² ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Z.
ldi ZL, LOW (doSomething); Π°Π΄ΡΠ΅Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ doSomething
ldi ZH, HIGH (Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ-ΡΠΎ); Π² Z ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ
Π― Π·Π²ΠΎΠ½Ρ ; ΠΊΠΎΡΠ²Π΅Π½Π½ΡΠΉ Π²ΡΠ·ΠΎΠ² doSomething
ΡΠ΄Π΅Π»Π°ΠΉ ΡΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ:
...; ΠΊΠΎΠ΄ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
ret; Π²ΠΎΠ·Π²ΡΠ°Ρ ΠΈΠ· ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΠΎΡΠ²Π΅Π½Π½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ ΠΏΠΎΠ»Π΅Π·Π½Ρ, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΠ°Π·Π½ΡΠ΅ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΠ±ΡΡΠ½ΠΎ ΡΡΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ°Π±Π»ΠΈΡΡ ΠΏΠΎΠΈΡΠΊΠ°, Π° Π½Π΅ Ρ ΡΠ²Π½ΠΎΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠΎΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Ρ ΠΏΠΎΠΌΠΎΡΡΡ ldi, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π²ΡΡΠ΅.
Π Π΅Π³ΠΈΡΡΡΡ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ
ΠΠΎΠ³Π΄Π° Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΠ΅Π³ΠΈΡΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΡΡΡΡ ΠΏΠΎΠ·ΠΆΠ΅ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅.Π§ΡΠΎΠ±Ρ ΡΡΠΎΠ³ΠΎ Π½Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΠ»ΠΎ, ΡΠ΅Π³ΠΈΡΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π² ΡΡΠ΅ΠΊ Π² Π½Π°ΡΠ°Π»Π΅ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π° Π²Π΅ΡΠ½ΡΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π² ΠΊΠΎΠ½ΡΠ΅.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π²Π°ΡΠ° ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ r16 ΠΈ r17, ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ, Π²ΠΊΠ»ΡΡΠΈΠ² Π² ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
rcall doSomething; ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π²ΡΠ·ΠΎΠ²Π°
...; ΠΎΡΡΠ°Π»ΡΠ½Π°Ρ ΡΠ°ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
ΡΠ΄Π΅Π»Π°ΠΉ ΡΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ:
Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ r16; ΡΠΎΡ
ΡΠ°Π½ΠΈΡΡ r16 Π² ΡΡΠ΅ΠΊ
Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ r17; ΡΠΎΡ
ΡΠ°Π½ΠΈΡΡ r17 Π² ΡΡΠ΅ΠΊ
...; ΠΊΠΎΠ΄ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
pop r17; Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ r17 ΠΈΠ· ΡΡΠ΅ΠΊΠ°
pop r16; Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ r16 ΠΈΠ· ΡΡΠ΅ΠΊΠ°
ret; Π²ΠΎΠ·Π²ΡΠ°Ρ ΠΈΠ· ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ | ΠΠΠΠΠΠΠ’Π¬ | ADD R0, R1, Operand2 ADD R0, R1, 12 Π±ΠΈΡ ΠΊΠΎΠ½ΡΡ. | R0 = R1 + R2 | N, Z, C, V | S | |
| ΠΠ¦Π | ΠΠ¦Π R0, R1, R2 ΠΠ¦Π R0, R1, 8 Π±ΠΈΡ, ΠΏΠΎΡΡΠΎΡΠ½Π½Π°Ρ | R0 = R1 + R2 + C | N, Z, C, V | S | |
| ΠΠΠΠΠΠΠ’Π¬ | ADD R0, R1, 12 Π±ΠΈΡ ΠΊΠΎΠ½ΡΡ. | 12 Π±ΠΈΡ | N, Z, C, V | ||
| ΠΠΠ | SUB R0, R1, R2 SUB R0, R1, 12 Π±ΠΈΡ ΠΊΠΎΠ½ΡΡ. | R0 = R1 — R2 | N, Z, C, V | S | |
| SBC | SBC R0, R1, R2 SBC R0, R1, 8 Π±ΠΈΡ, ΠΊΠΎΠ½ΡΡ. | R0 = R1 — R2 — Π‘ | N, Z, C, V | S | |
| SUBW | SUB R0, R1, 12 Π±ΠΈΡ, ΠΊΠΎΠ½ΡΡ. | 12 Π±ΠΈΡ | N, Z, C, V | ||
| RSB | RSB R0, R1, R2 RSB R0, R1, 8 Π±ΠΈΡ, ΠΊΠΎΠ½ΡΡ. RSB R0, R1, R2, ASR β 23 | . R0 = R2 — R1 R0 = 8 Π±ΠΈΡ const — R1 | N, Z, C, V | S | |
| ADR | ADR R0, ΡΡΠΈΠΊΠ΅ΡΠΊΠ° +/- 12 Π±ΠΈΡ ADR.W R0, ΡΡΠΈΠΊΠ΅ΡΠΊΠ° +/- 32 Π±ΠΈΡ | . | |||
| LDR STR | LDR R0, [R1, # 8bit const.]! — LDR R0, [R1], # 8bit const.- LDRB R0, [R1] — STRB R0, [R1], β 1 | / . B =, SB = () H =, SH = () | |||
| LDR STR | LDR R0, [R1, R2, {LSL # 0..3}] STR R0, [R1, R2, {LSL # 0..3}] | . B, SB, H, SH | |||
| LDR LDRD | LDR R0, ΡΡΠΈΠΊΠ΅ΡΠΊΠ° LDRD R0, R1, ΡΡΠΈΠΊΠ΅ΡΠΊΠ° | . B, SB, H, SH STR / STRD. | |||
| LDRT STRT | . LDR / STR. | ||||
| LDRD STRD | LDRD R0, R1, [R2, # 10bit const.]! — LDRD R0, R1, [R2], # 10Π±ΠΈΡ ΠΊΠΎΠ½ΡΡ. — LDRD R0, R1, [R2] — STRD R0, R1, [R2] | / . 4. | |||
| ΠΠΠ Π‘Π’Π | LDM R0, {R1-R3} LDM R0 !, {R1-R3} — R0 IA, DB, FD, EA -. | /. IA — ΠΠ -. | |||
| PUSH POP | ΠΠΠΠΠ’Π¬ {R0, R2-R7, R12} POP {R0, R2-R7, R12} | / | |||
| LDREX STREX | LDREX R1, [R2, # 10Π±ΠΈΡ ΠΊΠΎΠ½ΡΡ.] STREX R0, R1, [R2, # 10bit const.] | /. B =, H =. | |||
| CLREX | CLREX () | . | |||
| BFC | BFC R0, #lsb, # ΡΠΈΡΠΈΠ½Π° | ||||
| BFI | BFI R0, R1, #lsb, # ΡΠΈΡΠΈΠ½Π° | R1 R0 | |||
| UBFX | UBFX R0, R1, #lsb, # ΡΠΈΡΠΈΠ½Π° | R1.R0 | |||
| SBFX | SBFX R0, R1, #lsb, # ΡΠΈΡΠΈΠ½Π° | R1. R0 | |||
| UXTB UXTH | UXTB R0, R1 {, ROR β 8,16,24} | | |||
| SXTB SXTH | SXTB R0, R1 {, ROR β 8,16,24} | | |||
8086 Π ΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΠΎ ΡΠ±ΠΎΡΡΠΈΠΊΡ Π΄Π»Ρ Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΡ (ΡΠ°ΡΡΡ 9)
8086 Π£ΡΠ΅Π±Π½ΠΈΠΊ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ° Π΄Π»Ρ Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΡ (ΡΠ°ΡΡΡ 9)Π‘ΡΠ΅ΠΊ
Π‘ΡΠ΅ΠΊ — ΡΡΠΎ ΠΎΠ±Π»Π°ΡΡΡ ΠΏΠ°ΠΌΡΡΠΈ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π΄Π°Π½Π½ΡΡ .Π‘ΡΠ΅ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠ΅ΠΉ CALL Π΄Π»Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ Π°Π΄ΡΠ΅ΡΠ° Π²ΠΎΠ·Π²ΡΠ°ΡΠ° Π΄Π»Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ, RET ΠΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΡΡΠ΅ΠΊΠ° ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΊ ΡΡΠΎΠΌΡ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡ. Π‘ΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ INT ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠ΅ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ Π² ΡΠ΅Π³ΠΈΡΡΡΠ΅ ΡΠ»Π°Π³ΠΎΠ² ΡΡΠ΅ΠΊΠ°, ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ΅ ΠΊΠΎΠ΄Π° ΠΈ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠΈ. IRET ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° ΠΈΠ· ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ.
ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ΅ΠΊ Π΄Π»Ρ Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ Π»ΡΠ±ΡΡ
Π΄ΡΡΠ³ΠΈΡ
Π΄Π°Π½Π½ΡΡ
,
Π΅ΡΡΡ Π΄Π²Π΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎ ΡΡΠ΅ΠΊΠΎΠΌ:
PUSH — ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ 16-Π±ΠΈΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠ΅ΠΊΠ΅.
POP — ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ 16-Π±ΠΈΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΡΡΠ΅ΠΊΠ°.
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π΄Π»Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ PUSH :Π ΠΠ. : AX, BX, CX, DX, DI, SI, BP, SP.PUSH REG SREG : DS, ES, SS, CS. ΠΏΠ°ΠΌΡΡΡ : [BX], [BX + SI + 7], 16-Π±ΠΈΡΠ½Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΈ Ρ. Π. Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ : 5, -24, 3Fh, 10001101b ΠΈ Ρ. Π. … |
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π΄Π»Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ POP :Π ΠΠ. : AX, BX, CX, DX, DI, SI, BP, SP.POP REG SREG : DS, ES, SS (ΠΊΡΠΎΠΌΠ΅ CS). ΠΏΠ°ΠΌΡΡΡ : [BX], [BX + SI + 7], 16-Π±ΠΈΡΠ½Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΈ Ρ. Π. |
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΡ:
- PUSH ΠΈ POP ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Ρ 16-Π±ΠΈΡΠ½ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ!
- ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: ΠΠΠΠΠΠ’Π Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°Ρ 80186 ΠΈ Π½ΠΎΠ²Π΅Π΅!
Π‘ΡΠ΅ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π°Π»Π³ΠΎΡΠΈΡΠΌ LIFO (Last In First Out),
ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π΅ΡΠ»ΠΈ ΠΌΡ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΠΌ ΡΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΠ΄Π½ΠΎ Π·Π° Π΄ΡΡΠ³ΠΈΠΌ Π² ΡΡΠ΅ΠΊ:
1, 2, 3, 4, 5
ΠΏΠ΅ΡΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΡ ΠΏΠΎΠΏΠ°Π΄Π΅Ρ Π½Π° ΠΏΠΎΠΏΡ Π±ΡΠ΄Π΅Ρ 5 ,
Π·Π°ΡΠ΅ΠΌ 4 , 3 , 2 , ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΌ 1 .
ΠΡΠ΅Π½Ρ Π²Π°ΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ°Π²Π½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ PUSH s ΠΈ POP s, ΠΈΠ½Π°ΡΠ΅ ΡΡΠ΅ΠΊ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ²ΡΠ΅ΠΆΠ΄Π΅Π½ ΠΈ Π²Π΅ΡΠ½ΡΡΡ Π΅Π³ΠΎ Π±ΡΠ΄Π΅Ρ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΊ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅. ΠΠ°ΠΊ Π²Ρ ΡΠΆΠ΅ Π·Π½Π°Π΅ΡΠ΅, ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ RET Π΄Π»Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° ΠΊ ΡΠ°Π±ΠΎΡΠ΅. ΡΠΈΡΡΠ΅ΠΌΠ°, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² ΡΡΠ΅ΠΊΠ΅ Π΅ΡΡΡ Π°Π΄ΡΠ΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° (ΠΎΠ±ΡΡΠ½ΠΎ ΡΡΠΎ 0000Ρ).
ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ PUSH ΠΈ POP ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½Ρ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΌΡ Π½Π΅ ΠΈΠΌΠ΅ΡΡ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ Π²ΠΎΡ ΡΡΡΠΊ:
- Π‘ΠΎΡ ΡΠ°Π½ΠΈΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠ° Π² ΡΡΠ΅ΠΊΠ΅ (ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ PUSH ).
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΠ΅Π΅ΡΡΡ Π΄Π»Ρ Π»ΡΠ±ΡΡ ΡΠ΅Π»Π΅ΠΉ.
- ΠΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠ° ΠΈΠ· ΡΡΠ΅ΠΊΠ° (ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ POP ).
ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ:
ORG 100Ρ MOV AX, 1234h PUSH AX; ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ AX Π² ΡΡΠ΅ΠΊΠ΅. MOV AX, 5678h; ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ AX. POP AX; Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ AX. RET ΠΠΠΠΠ¦ |
ΠΡΡΠ³ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ΅ΠΊΠ° — ΠΎΠ±ΠΌΠ΅Π½ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ,
Π·Π΄Π΅ΡΡ ΠΏΡΠΈΠΌΠ΅Ρ:
ORG 100Ρ MOV AX, 1212h; Ρ ΡΠ°Π½ΠΈΡΡ 1212h Π² AX.MOV BX, 3434h; Ρ ΡΠ°Π½ΠΈΡΡ 3434h Π² BX PUSH AX; ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ AX Π² ΡΡΠ΅ΠΊΠ΅. PUSH BX; ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ BX Π² ΡΡΠ΅ΠΊΠ΅. POP AX; ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ AX Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ BX. POP BX; ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ BX Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ AX. RET ΠΠΠΠΠ¦ |
ΠΠ±ΠΌΠ΅Π½ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ ΡΡΠ΅ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π°Π»Π³ΠΎΡΠΈΡΠΌ LIFO (Last In First Out), ΠΏΠΎΡΡΠΎΠΌΡ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ 1212h , Π° Π·Π°ΡΠ΅ΠΌ 3434h , ΠΏΡΠΈ pop ΠΌΡ ΡΠ½Π°ΡΠ°Π»Π° ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ 3434h ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅ Π½Π΅Π³ΠΎ 1212Ρ .
ΠΠ±Π»Π°ΡΡΡ ΠΏΠ°ΠΌΡΡΠΈ ΡΡΠ΅ΠΊΠ° Π·Π°Π΄Π°Π΅ΡΡΡ ΡΠ΅Π³ΠΈΡΡΡΠΎΠΌ SS (ΡΠ΅Π³ΠΌΠ΅Π½Ρ ΡΡΠ΅ΠΊΠ°) ΠΈ SP (ΡΡΠ΅ΠΊ Π£ΠΊΠ°Π·Π°ΡΠ΅Π»Ρ) Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠΉΡΠ΅. ΠΠ±ΡΡΠ½ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² Π½Π° Π·Π°ΠΏΡΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
ΠΠ½ΡΡΡΡΠΊΡΠΈΡ Β« PUSH source Β» Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ:
- ΠΡΡΡΠΈΡΠ΅ 2 ΠΈΠ· ΡΠ΅Π³ΠΈΡΡΡΠ° SP .
- ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ SS: SP .
ΠΠ½ΡΡΡΡΠΊΡΠΈΡ Β« POP destination Β» Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ:
- ΠΠ°ΠΏΠΈΡΡΠ²Π°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ SS: SP Π² destination .
- ΠΠΎΠ±Π°Π²ΠΈΡΡ 2 Π² ΡΠ΅Π³ΠΈΡΡΡ SP .
Π’Π΅ΠΊΡΡΠΈΠΉ Π°Π΄ΡΠ΅Ρ, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ SS: SP , Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ Π²Π΅ΡΡΠΈΠ½ΠΎΠΉ ΡΡΠ΅ΠΊΠ° .

..
pop ESI ; ΠΈΠ·Π²Π»Π΅ΡΡ ΠΈΠ· ΡΡΠ΅ΠΊΠ° (Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 01234h Π±ΡΠ»ΠΎ ΡΠ²Π΅ΡΡ
Ρ, Π·Π½Π°ΡΠΈΡ, ΠΎΠ½ΠΎ ΠΈ Π²ΡΠΉΠ΄Π΅Ρ)
pop EDX ; ΠΈΠ·Π²Π»Π΅ΡΡ ΠΈΠ· ΡΡΠ΅ΠΊΠ° Π² EDX
pop ECX ; ΠΈΠ·Π²Π»Π΅ΡΡ ΠΈΠ· ΡΡΠ΅ΠΊΠ° Π² ECX
pop EBX ; ΠΈΠ·Π²Π»Π΅ΡΡ ΠΈΠ· ΡΡΠ΅ΠΊΠ° Π² EBX
pop EAX ; ΠΈΠ·Π²Π»Π΅ΡΡ ΠΈΠ· ΡΡΠ΅ΠΊΠ° Π² EAX
&user32.MessageBoxA> ; \MessageBoxA
00401013 6A 00 push 0 ; /ExitCode = 0
00401015 E8 06000000 call < jmp.&kernel32.ExitProcess> ; \ExitProcess
0040101A FF25 08204000 jmp dword ptr ds:[< user32.MessageBo> ; user32.MessageBoxA
00401020 FF25 00204000 jmp dword ptr ds:[< kernel32.ExitPro> ; kernel32.ExitProcess
ΡΠ»ΠΎΠ²Π° push — ΡΠΎΠ»ΠΊΠ°ΡΡ