ΠΊΠΎΠ΄ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ° Π² visual studio
Assembler Π²ΠΌΠ΅ΡΡΠ΅ Ρ C++ Π² Visual Studio 2013
ΠΡΠ΅Π΄ΠΈΡΠ»ΠΎΠ²ΠΈΠ΅
ΠΠ°ΡΠ°Π»ΠΎΡΡ Π²ΡΠ΅ Ρ ΠΏΡΠΎΡΡΠ΅Π½ΠΈΡ ΠΌΠ½ΠΎΠΉ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ Β«ΠΡΡΠ΅ΠΌΠ±Π»Π΅Ρ Π΄Π»Ρ Windows ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Visual StudioΒ» (ΠΎΡΡΡΠ΄Π° ΠΈ ΠΏΠΎΡΡΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΡΠΉ ΠΊΠΎΠ΄). Π’Π°ΠΌ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Visual Studio 2005, Π° Π΄Π»Ρ 2013-ΠΉ ΡΡΡΠ΄ΠΈΠΈ ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΠΎΡ ΠΎΠΆΠΈΠΉ, Π½ΠΎ Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΡΠ»ΠΈΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°ΡΡΠ°Π²ΡΡ Π½Π΅ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π΄ΠΎΠ»Π³ΠΎ ΠΈΡΠΊΠ°ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π²ΡΠ΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΡΠΎ ΡΠ±ΠΎΡΠΊΠΎΠΉ.
Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅
ΠΠ»Ρ ΡΠ΅Ρ , Ρ ΠΊΠΎΠ³ΠΎ ΡΠΎΠ²ΡΠ΅ΠΌ Π½Π΅Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π½Π° ΠΏΡΠΎΡΡΠ΅Π½ΠΈΠ΅: Π² ΠΊΠΎΠ½ΡΠ΅ ΡΡΠ°ΡΡΠΈ (Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ) Π΅ΡΡΡ ΡΡΡΠ»ΠΊΠ° Π½Π° Π³ΠΎΡΠΎΠ²ΡΠΉ ΡΠ°Π±Π»ΠΎΠ½ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈ Π½Π° Π°Π΄Π΄ΠΎΠ½ Π΄Π»Ρ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΊΠΈ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ°.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°
ΠΡΠ±ΠΈΡΠ°Π΅ΠΌ ΡΠ°Π±Π»ΠΎΠ½ Win32 Console Application, ΠΊΠ»ΠΈΠΊΠ°Π΅ΠΌ ΠΠ:
Π‘ΡΠ°Π²ΠΈΠΌ Π³Π°Π»ΠΎΡΠΊΡ Π½Π°ΠΏΡΠΎΡΠΈΠ² Empty project ΠΈ ΠΆΠΌΠ΅ΠΌ Finish:
ΠΡΠ±ΠΈΡΠ°Π΅ΠΌ C++ File ΠΈ ΠΆΠΌΠ΅ΠΌ Add:
ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ, ΡΠΎΠ·Π΄Π°Π΅ΠΌ *.asm ΡΠ°ΠΉΠ» (ΠΏΡΠΎΡΡΠΎ ΠΌΠ΅Π½ΡΠ΅ΠΌ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ Π² ΠΏΠΎΠ»Π΅ Name):
ΠΠ°ΠΆΠ½ΠΎ: ΠΈΠΌΠ΅Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠ°Π·Π½ΡΠΌΠΈ (Π½Π΅ ΡΡΠΈΡΡΠ²Π°Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅), ΠΈΠ½Π°ΡΠ΅ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² *.obj Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π΄ΡΡΠ³ΠΈΠΌ.
Π‘ΡΠ°Π²ΠΈΠΌ Π³Π°Π»ΠΎΡΠΊΡ Π½Π°ΠΏΡΠΎΡΠΈΠ² masm ΠΈ ΠΆΠΌΠ΅ΠΌ ΠΠ:
ΠΠ΅Π»Π°Π΅ΠΌ ΠΏΡΠ°Π²ΡΠΉ ΠΊΠ»ΠΈΠΊ Π½Π° ΡΠ°ΠΉΠ»Π΅ *.asm, Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ Properties. :
Π ΠΏΠΎΠ»Π΅ Item Type Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ Microsoft Macro Assembler ΠΈ ΠΆΠΌΠ΅ΠΌ ΠΠ:
ΠΠ° ΡΡΠΎΠΌ ΡΡΠ°ΠΏΠ΅ ΠΏΡΠΎΠ΅ΠΊΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΈΡΠ°ΡΡ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΌ. ΠΠ°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΎ Π² ΡΠ΅ΠΊΡΠΈΠΈ Π’ΠΎΠ½ΠΊΠΎΡΡΠΈ Π²ΡΠ·ΠΎΠ²Π° ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρ Π‘++ ΠΈ Asm.
ΠΡΠ±ΠΈΡΠ°Π΅ΠΌ ΡΠ°Π±Π»ΠΎΠ½ Win32 Console Application, ΠΊΠ»ΠΈΠΊΠ°Π΅ΠΌ ΠΠ.
Π‘ΡΠ°Π²ΠΈΠΌ Π³Π°Π»ΠΎΡΠΊΡ Π½Π°ΠΏΡΠΎΡΠΈΠ² Empty project ΠΈ ΠΆΠΌΠ΅ΠΌ Finish.
ΠΡΠ±ΠΈΡΠ°Π΅ΠΌ C++ File ΠΈ ΠΆΠΌΠ΅ΠΌ Add.
ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ, ΡΠΎΠ·Π΄Π°Π΅ΠΌ *.asm ΡΠ°ΠΉΠ» (ΠΏΡΠΎΡΡΠΎ ΠΌΠ΅Π½ΡΠ΅ΠΌ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ Π² ΠΏΠΎΠ»Π΅ Name).
ΠΠ°ΠΆΠ½ΠΎ: ΠΈΠΌΠ΅Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠ°Π·Π½ΡΠΌΠΈ(Π½Π΅ ΡΡΠΈΡΡΠ²Π°Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅), ΠΈΠ½Π°ΡΠ΅ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² *.obj Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π΄ΡΡΠ³ΠΈΠΌ.
Π‘ΡΠ°Π²ΠΈΠΌ Π³Π°Π»ΠΎΡΠΊΡ Π½Π°ΠΏΡΠΎΡΠΈΠ² masm ΠΈ ΠΆΠΌΠ΅ΠΌ ΠΠ.
ΠΠ΅Π»Π°Π΅ΠΌ ΠΏΡΠ°Π²ΡΠΉ ΠΊΠ»ΠΈΠΊ Π½Π° ΡΠ°ΠΉΠ»Π΅ *.asm, Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ Properties.
Π ΠΏΠΎΠ»Π΅ Item Type Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ Microsoft Macro Assembler ΠΈ ΠΆΠΌΠ΅ΠΌ ΠΠ.
ΠΠ° ΡΡΠΎΠΌ ΡΡΠ°ΠΏΠ΅ ΠΏΡΠΎΠ΅ΠΊΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΈΡΠ°ΡΡ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΌ. ΠΠ°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΎ Π² ΡΠ΅ΠΊΡΠΈΠΈ Π’ΠΎΠ½ΠΊΠΎΡΡΠΈ Π²ΡΠ·ΠΎΠ²Π° ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρ Π‘++ ΠΈ Asm.
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΊΠΈ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ°
Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π°Π΄Π΄ΠΎΠ½ Π΄Π»Ρ Visual Studio β asmHighlighter, ΠΎΠ΄Π½Π°ΠΊΠΎ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΡΡΠ°ΡΡΠΈ Π²Π΅ΡΡΠΈΠΈ Π΄Π»Ρ VS2013 Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π»ΠΎ. ΠΠ΄Π½Π°ΠΊΠΎ, ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅Π² ΡΠ°Π·Π΄Π΅Π» Discussions, Ρ Π½Π°ΡΠ΅Π» ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Trass3r, ΠΊΠΎΡΠΎΡΡΠΉ, ΠΊ ΡΡΠ°ΡΡΡΡ, ΠΏΠΎΠ΄Π΅Π»ΠΈΠ»ΡΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅ΠΌ Ρ Π²Π΅ΡΡΠΈΠ΅ΠΉ Π°Π΄Π΄ΠΎΠ½Π° Π΄Π»Ρ VS2013. ΠΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Visual Studio SDK ΠΌΠ½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ ΡΠΎΠ±ΡΠ°ΡΡ ΠΏΡΠΎΠ΅ΠΊΡ ΠΈ ΡΠ΅ΠΏΠ΅ΡΡ *.vsix ΠΏΠ°ΠΊΠ΅Ρ Π΅ΡΡΡ Π² ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠΌ Π΄ΠΎΡΡΡΠΏΠ΅.
Π’ΠΎΠ½ΠΊΠΎΡΡΠΈ Π²ΡΠ·ΠΎΠ²Π° ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρ Π‘++ ΠΈ Asm
ΠΠ°Π»Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ call:
Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, Π² *.asm ΡΠ°ΠΉΠ»Π΅:
ΠΈ
ΠΠ°Π½Π½ΡΠΉ ΠΏΡΠΎΡΠΎΡΠΈΠΏ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠ°ΠΊΠΎΠΌΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ Asm-ΠΌΠ΅ΡΠΎΠ΄Π°:
Π‘ΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ, ΠΏΠΎΠ»Π½ΡΠΉ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΏΡΠΈΠΌΠ΅ΡΠ°:
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
ΠΠΎΡΠΎΠ²ΡΠΉ ΡΠ°Π±Π»ΠΎΠ½ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π·Π΄Π΅ΡΡ.
ΠΠ°ΠΊΠ΅Ρ Π΄Π»Ρ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΊΠΈ asm ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π·Π΄Π΅ΡΡ.
ΠΡΡΠ΅ΠΌΠ±Π»Π΅Ρ Π΄Π»Ρ Windows ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Visual Studio
ΠΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· Π½Π°Ρ ΠΈΠ·ΡΡΠ°Π»ΠΈ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ Π² ΡΠ½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅ΡΠ΅, Π½ΠΎ ΠΏΠΎΡΡΠΈ Π²ΡΠ΅Π³Π΄Π° ΡΡΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π»ΠΎΡΡ ΠΏΡΠΎΡΡΡΠΌΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°ΠΌΠΈ ΠΏΠΎΠ΄ DOS. ΠΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π΄Π»Ρ Windows ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ°ΡΡΡ ΠΊΠΎΠ΄Π° Π½Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ, Π² ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ Ρ Ρ ΠΎΡΡ ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ Π²Π°ΠΌ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ Π² Π²Π°ΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ ΠΏΠΎΠ΄ Visual Studio 2005.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°
Π ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΊΠ°ΠΊ Π²ΡΠ·ΡΠ²Π°ΡΡ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ ΠΈΠ· Π‘++ ΠΊΠΎΠ΄Π° ΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ Π² Visual Studio 2005 Π΄Π»Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΊΠΎΠ΄Π° Π½Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ.
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΡΠΎΠ΅ΠΊΡ. ΠΠΊΠ»ΡΡΠ°Π΅ΠΌ Visual Studio, Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ File > New > Project. Π Visual Studio Π½Π΅Ρ ΡΠ·ΡΠΊΠ° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ Π² ΠΎΠΊΠ½Π΅ Π²ΡΠ±ΠΎΡΠ° ΡΠΈΠΏΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΠΏΠΎΡΡΠΎΠΌΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ Π‘++ Win32 ΠΏΡΠΎΠ΅ΠΊΡ. Π ΠΎΠΊΠ½Π΅ Π½Π°ΡΡΡΠΎΠ΅ΠΊ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ Β«Empty ProjectΒ».
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Visual Studio Π½Π΅ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π΅Ρ ΡΠ°ΠΉΠ»Ρ Ρ ΠΊΠΎΠ΄ΠΎΠΌ Π½Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ. ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ Π²ΠΊΠ»ΡΡΠΈΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΡ ΡΠ±ΠΎΡΠΊΠΈ ΡΠΊΠ°Π·Π°Π² ΠΊΠ°ΠΊΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΠΉΠ»Ρ *.asm. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΡΠ½ΠΊΡ ΠΌΠ΅Π½Ρ Β«Custom Build Rules. Β».
Π ΠΎΡΠΊΡΡΠ²ΡΠ΅ΠΌΡΡ ΠΎΠΊΠ½Π΅ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΊΠ°Π·Π°ΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π΄Π»Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ², Visual Studio 2005 ΡΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ Π³ΠΎΡΠΎΠ²ΠΎΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Π΄Π»Ρ ΡΠ°ΠΉΠ»ΠΎΠ² *.asm, Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π»ΠΈΡΡ Π²ΠΊΠ»ΡΡΠΈΡΡ Π΅Π³ΠΎ, ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ² Π½Π°ΠΏΡΠΎΡΠΈΠ² ΠΏΡΠ°Π²ΠΈΠ»Π° Β«Microsoft Macro AssemblerΒ» Π³Π°Π»ΠΎΡΠΊΡ.
ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°
ΠΠ΅ΡΠ΅ΠΉΠ΄Π΅ΠΌ ΠΊ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π½Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°. ΠΠ°ΡΠ½Π΅ΠΌ Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π½Π° c++. ΠΠΎΠ±Π°Π²ΠΈΠΌ Π½ΠΎΠ²ΡΠΉ ΡΠ°ΠΉΠ» Π² ΠΏΠ°ΠΏΠΊΡ Source Files. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Template Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ C++ File ΠΈ Π²Π²ΠΎΠ΄ΠΈΠΌ ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ΅ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ main.cpp. ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΡΡΠΈΡΡΠ²Π°ΡΡ ΠΈΠΌΡ Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ, ΠΎΡΠΎΡΠΌΠΈΠ² ΡΡΠΎ Π² Π²ΠΈΠ΄Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ readName() ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΡΡΡΠ»ΠΊΡ Π½Π° ΡΡΠΈΡΠ°Π½Π½ΠΎΠ΅ ΠΈΠΌΡ. ΠΡ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ°ΠΉΠ»Π°:
Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ Π·Π½Π°Π΅ΠΌ ΠΈΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΡΠ²Π΅ΡΡΠΈ ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²ΠΈΠ΅, Π΅Π³ΠΎ Π±ΡΠ΄Π΅Ρ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΡ sayHello() ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ Π½Π°ΠΏΠΈΡΠ΅ΠΌ Π½Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ, ΡΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΡΠ½Π°ΡΠ°Π»Π° ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΊΠ°Π·Π°ΡΡ ΡΡΠΎ ΠΎΠ½Π° Π±ΡΠ΄Π΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° Π² Π΄ΡΡΠ³ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅, Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π±Π»ΠΎΠΊ ΠΊ main.cpp:
ΠΡΠΎΡ Π±Π»ΠΎΠΊ Π³ΠΎΠ²ΠΎΡΠΈΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ sayHello() Π±ΡΠ΄Π΅Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π° Π² Π΄ΡΡΠ³ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ ΠΈ Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ ΠΏΡΠ°Π²ΠΈΠ»Π° Π²ΡΠ·ΠΎΠ²Π° Β«CΒ». ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ C++ ΠΈΡΠΊΠ°ΠΆΠ°Π΅Ρ ΠΈΠΌΠ΅Π½Π° ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠ°ΠΊ, ΡΡΠΎ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ ΠΏΡΠ°Π²ΠΈΠ» Π²ΡΠ·ΠΎΠ²Π° ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ readName() ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΈ sayHello(), Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ extern Β«CΒ» ΠΏΠ΅ΡΠ΅Π΄ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ readName(), ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ· Π΄ΡΡΠ³ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΏΡΠ°Π²ΠΈΠ»Π° Π²ΡΠ·ΠΎΠ²Π° Β«CΒ».
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΏΡΠΎΠ΅ΠΊΡ, Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΠΎ Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ Debug > Start Without Debugging ΠΈΠ»ΠΈ Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ Ctrl-F5. ΠΡΠ»ΠΈ Π²ΡΠ΅ ΡΠ΄Π΅Π»Π°Π½ΠΎ Π²Π΅ΡΠ½ΠΎ, Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ ΠΎΠΊΠ½ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ:
ΠΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΠ»ΠΎΠΆΠ½ΠΈΠΌ Π·Π°Π΄Π°ΡΡ, ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π½Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΠ»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ calcSumm() ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΡΡΠΌΠΌΡ Π΅Π³ΠΎ ΡΠΈΡΡ. ΠΠ·ΠΌΠ΅Π½ΠΈΠΌ Π½Π°Ρ ΠΊΠΎΠ΄ Π½Π° Π‘++ Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π² Π½Π΅Π³ΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ calcSumm, Π²Π²ΠΎΠ΄ ΡΠΈΡΠ»Π° ΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠΎΠ±Π°Π²ΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΡ Π² ΡΠ°ΠΉΠ» hello.asm, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π² eax, ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΎΠ±ΡΡΠ²Π»ΡΡΡΡΡ ΠΏΠΎΡΠ»Π΅ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° PROC. ΠΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΠΊΠΎΠ΄Π΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ, ΠΎΠ½ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΡΡΡΡ ΠΈΠ· ΡΡΠ΅ΠΊΠ°. Π’Π°ΠΊΠΆΠ΅ Π² ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ°Ρ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅. ΠΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π²Π½Π΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ. ΠΠ½ΠΈ ΡΠΎΡ ΡΠ°Π½Π΅Π½Ρ Π² ΡΡΠ΅ΠΊΠ΅ ΠΈ ΡΠ΄Π°Π»ΡΡΡΡΡ ΠΏΡΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅ ΠΈΠ· ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ:
ΠΠ°ΠΏΡΡΡΠΈΠ² ΠΏΡΠΎΠ΅ΠΊΡ ΠΌΡ ΡΠ²ΠΈΠ΄ΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ:
ΠΡΠ»Π°Π΄ΠΊΠ°
ΠΠΎΠ½Π΅ΡΠ½ΠΎ Π² Π΄Π°Π½Π½ΠΎΠΉ Π·Π°Π΄Π°ΡΠ΅ Π½Π΅Ρ Π½ΠΈΡΠ΅Π³ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΠ³ΠΎ ΠΈ ΠΎΠ½Π° Π²ΠΎΠ²ΡΠ΅ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ. ΠΠΎΠ»Π΅Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΌ Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ, Π° ΡΡΠΎ ΠΆΠ΅ Π½Π°ΠΌ Π΄Π°Π΅Ρ Visual Studio Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π½Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ. ΠΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ Π²ΠΊΠ»ΡΡΠΈΡΡ ΡΠ΅ΠΆΠΈΠΌ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ ΡΠΎΡΠΊΡ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π² hello.asm, Π·Π°ΠΏΡΡΡΠΈΠΌ ΠΏΡΠΎΠ΅ΠΊΡ, ΠΌΡ ΡΠ²ΠΈΠ΄ΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
ΠΠΊΠ½ΠΎ Disassembly (Debug > Windows > Disassembly) ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°. ΠΠΎΠ΄ ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ Π½Π°ΠΏΠΈΡΠ°Π»ΠΈ Π½Π° Π‘++ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠ΅ΡΠ½ΡΠΌ ΡΠ²Π΅ΡΠΎΠΌ. Disassembled code ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠ΅ΡΡΠΌ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ Π΅ΠΌΡ ΠΊΠΎΠ΄Π° Π½Π° C++/Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ. ΠΠΊΠ½ΠΎ Disassembly ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΡΠ»Π°ΠΆΠΈΠ²Π°ΡΡ ΠΊΠΎΠ΄ ΠΈ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡ stepping ΠΏΠΎ Π½Π΅ΠΌΡ.
ΠΠΊΠ½ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² (Debug > Windows > Registers) ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ².
ΠΠΊΠ½ΠΎ ΠΏΠ°ΠΌΡΡΠΈ (Debug > Windows > Memory) ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π΄Π°ΠΌΠΏ ΠΏΠ°ΠΌΡΡΠΈ, ΡΠ»Π΅Π²Π° ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ ΡΠ΅ΡΡΠ½Π°Π΄ΡΠ°ΡΠ΅ΡΠΈΡΠ½ΡΠ΅ Π°Π΄ΡΠ΅Ρ, ΡΠΏΡΠ°Π²Π° ΡΠ΅ΡΠ½Π°Π΄ΡΠ°ΡΠ΅ΡΠΈΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΡΡΠ΅Π΅ΠΊ ΠΏΠ°ΠΌΡΡΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°ΡΡΡΡ, Π²Π²ΠΎΠ΄Ρ Π°Π΄ΡΠ΅Ρ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ ΠΏΠΎΠ»Π΅ Π² Π²Π΅ΡΡ Ρ ΠΎΠΊΠ½Π°.
MASM Π΄Π»Ρ x64 (ml64.exe)
Visual Studio Π²ΠΊΠ»ΡΡΠ°Π΅Ρ 32-ΡΠ°Π·ΡΡΠ΄Π½ΡΡ ΠΈ 64-ΡΠ°Π·ΡΡΠ΄Π½ΡΡ Π²Π΅ΡΡΠΈΡ Microsoft Assembler (MASM) Π΄Π»Ρ ΡΠ΅Π»Π΅Π²ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° x64. ΠΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΉ ml64.exe β ΡΡΠΎ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠ·ΡΠΊ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ° x64. ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ MASM ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ ΠΏΡΠΈ Π²ΡΠ±ΠΎΡΠ΅ ΡΠ°Π±ΠΎΡΠ΅ΠΉ Π½Π°Π³ΡΡΠ·ΠΊΠΈ C++ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Visual Studio. Π‘ΡΠ΅Π΄ΡΡΠ²Π° MASM Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½Ρ Π΄Π»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ. ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΏΠΎ Π·Π°Π³ΡΡΠ·ΠΊΠ΅ ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ ΠΊΠΎΠΏΠΈΠΈ Visual Studio ΡΠΌ. Π² ΡΠ°Π·Π΄Π΅Π»Π΅ install Visual Studio. Π΅ΡΠ»ΠΈ Π²Ρ Π½Π΅ Ρ ΠΎΡΠΈΡΠ΅ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΡΠ΅Π΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Visual Studio, Π½ΠΎ Π²Π°ΠΌ Π½ΡΠΆΠ½Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ, ΡΠΊΠ°ΡΠ°ΠΉΡΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° ΡΠ±ΠΎΡΠΊΠΈ Π΄Π»Ρ Visual Studio.
Π§ΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ MASM Π΄Π»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° Π΄Π»Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌ x64 Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡΡ ΡΡΡΠΎΠΊΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° Π΄Π»Ρ ΡΠ΅Π»Π΅Π²ΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌ x64, ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°Π΄Π°ΡΡ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΠΉ ΠΏΡΡΡ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΡΠ΅Π΄Ρ. Π‘Π²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΡΠΌ. Π² ΡΠ°Π·Π΄Π΅Π»Π΅ Π‘Π±ΠΎΡΠΊΠ° ΠΊΠΎΠ΄Π° C/C++ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅.
ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ ml64.exe ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΡΠΌ. Π² ΡΠ°Π·Π΄Π΅Π»Π΅ ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΈΠΊ ΠΏΠΎ ML ΠΈ ML64 Command-Line.
ΠΡΡΡΠΎΠ΅Π½Π½ΡΠΉ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° ASM Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Π΄Π»Ρ ΡΠ΅Π»Π΅Π²ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² x64 ΠΈ ARM. Π§ΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅Π½Π΅ΡΡΠΈ ΠΊΠΎΠ΄ x86, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΉ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ Π΄Π»Ρ x64 ΠΈΠ»ΠΈ ARM, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² C++, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ°ΠΉΠ»Ρ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π½Π° ΡΠ·ΡΠΊΠ΅ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ°. ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Microsoft C++ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅, Π±ΠΈΡΠΎΠ²ΡΠ΅ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΠΈ Ρ. Π΄., Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π±Π»ΠΈΠ·ΠΊΠΎΠ³ΠΎ ΠΊ ΠΊΡΠΎΡΡ-ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΠΎΠΌΡ ΡΠΏΠΎΡΠΎΠ±Ρ. Π‘Π²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ Π΄ΠΎΡΡΡΠΏΠ½ΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡΡ ΡΠΌ. Π² ΡΠ°Π·Π΄Π΅Π»Π΅ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°.
Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° Π² ΠΏΡΠΎΠ΅ΠΊΡ Visual Studio C++
ΡΠΈΡΡΠ΅ΠΌΠ° ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Visual Studio ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ°ΠΉΠ»Ρ Π½Π° ΡΠ·ΡΠΊΠ΅ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ°, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ MASM Π² ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ C++. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠ°ΠΉΠ»Ρ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π½Π° ΡΠ·ΡΠΊΠ΅ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ° x64 ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΈΡ Π² ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΡ ΡΠ°ΠΉΠ»Π°Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ MASM, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ 64-ΡΠ°Π·ΡΡΠ΄Π½ΡΡ Π²Π΅ΡΡΠΈΡ. ΠΠ°ΡΠ΅ΠΌ ΡΡΠΈ ΡΠ°ΠΉΠ»Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΡΠ·Π°ΡΡ Ρ ΠΊΠΎΠ΄ΠΎΠΌ C++, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΌ Π΄Π»Ρ ΡΠ΅Π»Π΅Π²ΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌ x64. ΠΡΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΏΡΠ΅ΠΎΠ΄ΠΎΠ»Π΅Π½ΠΈΡ ΠΎΡΡΡΡΡΡΠ²ΠΈΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ³ΠΎ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ° x64.
Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° Π² ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΠΏΡΠΎΠ΅ΠΊΡ Visual Studio C++
ΠΡΠ±Π΅ΡΠΈΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡ Π² ΠΎΠ±ΠΎΠ·ΡΠ΅Π²Π°ΡΠ΅Π»Π΅ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ. Π² ΡΡΡΠΎΠΊΠ΅ ΠΌΠ΅Π½Ρ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ Project, Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΡΠ±ΠΎΡΠΊΠΈ.
Π² ΡΡΡΠΎΠΊΠ΅ ΠΌΠ΅Π½Ρ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ Project, Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π½ΠΎΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ.
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΊΠΎΠ΄ Π½Π° ΡΠ·ΡΠΊΠ΅ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ° Π² Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΠΎΠΌ ASM-ΡΠ°ΠΉΠ»Π΅. ΠΡΠΈ ΡΠ±ΠΎΡΠΊΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ MASM Assembler Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ ASM-ΡΠ°ΠΉΠ»Π° Π² ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΠΉ ΡΠ°ΠΉΠ», ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΡΠ΅ΠΌ ΡΠ²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ. Π§ΡΠΎΠ±Ρ ΡΠΏΡΠΎΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌ, ΠΎΠ±ΡΡΠ²ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ° ΠΊΠ°ΠΊ extern «C» Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ C++ Π²ΠΌΠ΅ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠΉ ΠΎΠ± ΠΎΡΠΎΡΠΌΠ»Π΅Π½ΠΈΠΈ ΠΈΠΌΠ΅Π½ c++ Π² ΠΈΡΡ ΠΎΠ΄Π½ΡΡ ΡΠ°ΠΉΠ»Π°Ρ Π½Π° ΡΠ·ΡΠΊΠ΅ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ°.
ΠΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ, ΠΎΡΠ½ΠΎΡΡΡΠΈΠ΅ΡΡ ΠΊ ml64
Π ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ Π½Π° ΡΠ·ΡΠΊΠ΅ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ°, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΠΎΠΌ Π΄Π»Ρ x64, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ml64:
m_i_kuznetsov
Π Π°Π·ΠΌΡΡΠ»Π΅Π½ΠΈΡ ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌ
Π’ΠΎ, ΡΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²Π°ΠΆΠ½ΠΎ, Π½ΠΎ ΡΠ΅ΠΌΡ Π½ΠΈΠ³Π΄Π΅ Π½Π΅ ΡΡΠ°Ρ
Π Π΅ΡΡ ΠΏΠΎΠΉΠ΄ΡΡ Π½Π΅ ΠΎ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ IL, Π° ΠΎΠ± ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°, ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½Π½ΡΡ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ.
Π ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΊΠΎΠ΄Π° Π±ΡΠ²Π°Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, Π²ΠΎ ΡΡΠΎ ΠΏΡΠ΅Π²ΡΠ°ΡΠΈΠ»ΡΡ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠΌ ΠΊΠΎΠ΄. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΎΡΠ²Π΅ΡΠΈΡΡ, ΠΏΠΎΡΠ΅ΠΌΡ Π²ΡΠΎΠ΄Π΅ Π±Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠΉ ΠΊΠΎΠ΄ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΏΠΎΡΠ΅ΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ.
ΠΡΠ»ΠΈ Π³ΠΎΠ²ΠΎΡΠΈΡΡ ΠΎΠ± ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΠΎΠΌ ΠΊΠΎΠ΄Π΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠ΄Π΅ C#, ΡΠΎ Π΅ΡΡΡ ΡΠ΅Π»ΡΡ ΡΡΠΈ (!) ΡΡΠ°Π΄ΠΈΠΈ, Π³Π΄Π΅ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΠΊΠΎΠ΄ ΠΏΡΠΈ Π΅Π³ΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ:
Π‘Π½Π°ΡΠ°Π»Π° Π² VS ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠ·ΡΠΊΠ΅ C#.
Π ΡΠ°ΠΉΠ»Π΅ Program.cs Ρ Π½Π°ΠΏΠΈΡΡ ΡΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ΄:
namespace DasmInt
<
class Program
<
static void Main(string[] args)
<
int a = 4;
int b = 8;
int r;
r = a + b;
Console.WriteLine(«a + b = » + r);
Console.ReadLine();
>
>
>
ΠΠΎΠ΄ ΠΏΡΠΎΡΡΠΎ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅Ρ ΡΡΠΈ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΈ Π·Π°ΡΠ΅ΠΌ ΡΠΊΠ»Π°Π΄ΡΠ²Π°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄Π²ΡΡ ΠΈΠ· Π½ΠΈΡ ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π² ΡΡΠ΅ΡΡΡ. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ΄ Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π² ΠΊΠΎΠ½ΡΠΎΠ»Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ ΠΆΠ΄ΡΡ ΡΠ΅Π°ΠΊΡΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
Π’Π΅ΠΏΠ΅ΡΡ Π½Π°Π΄ΠΎ Π²ΠΊΠ»ΡΡΠΈΡΡ Π΄ΠΈΠ·Π°ΡΡΠ΅ΠΌΠ±Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π² ΠΌΠ΅Π½Ρ Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Debug/Options ΠΈΠ»ΠΈ Tools/Options. Π ΠΎΡΠΊΡΡΠ²ΡΠ΅ΠΌΡΡ ΠΎΠΊΠ½Π΅ Π½Π°ΡΡΡΠΎΠ΅ΠΊ Π½Π°Π΄ΠΎ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π² ΡΠ°Π·Π΄Π΅Π» Debugging/General. ΠΠ°ΡΠ΅ΠΌ Π½ΡΠΆΠ½ΠΎ Π²ΠΊΠ»ΡΡΠΈΡΡ ΠΎΠΏΡΠΈΡ Enable address-level debugging.
Π’Π΅ΠΏΠ΅ΡΡ Ρ ΠΏΠΎΡΡΠ°Π²Π»Ρ ΡΠΎΡΠΊΡ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ (breakpoint) Π½Π° ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ Π·Π°ΠΏΡΡΡ ΠΊΠΎΠ΄ Π½Π° ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠΎΠΌ.
Π ΠΌΠΎΠΌΠ΅Π½Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠ΅ΡΠ²ΡΡΡΡ.
Π ΡΡΠΎΠΌΡ ΠΌΠΎΠΌΠ΅Π½ΡΡ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠΆΠ΅ ΡΠΎΠ·Π΄Π°Π» ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄, ΠΈ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π΅Π³ΠΎ Π΄ΠΈΠ·Π°ΡΡΠ΅ΠΌΠ±Π»ΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ.
Π§ΡΠΎΠ±Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π΄ΠΈΠ·Π°ΡΡΠ΅ΠΌΠ±Π»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄, Π½ΡΠΆΠ½ΠΎ Π² ΠΌΠ΅Π½Ρ Debug/Windows Π²ΡΠ±ΡΠ°ΡΡ ΠΏΡΠ½ΠΊΡ Disassembly. ΠΡΠΊΡΠΎΠ΅ΡΡΡ ΠΎΠΊΠ½ΠΎ Ρ Π΄ΠΈΠ·Π°ΡΡΠ΅ΠΌΠ±Π»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ.
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π² Π΄ΠΈΠ·Π°ΡΡΠ΅ΠΌΠ±Π»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΈΠΌΠ΅ΡΡΡΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΠ΅ Π½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ΠΡΠΎ ΡΠΈΠ»ΡΠ½ΠΎ ΡΠΏΡΠΎΡΠ°Π΅Ρ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΡ ΠΏΠΎ ΠΊΠΎΠ΄Ρ.
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π² Π΄ΠΈΠ·Π°ΡΡΠ΅ΠΌΠ±Π»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΡΠΊΠ°Π·Π°Π½Π° ΡΠΎΡΠΊΠ° ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ, Ρ.Π΅. ΡΡΡΠΎΠΊΠ° ΠΊΠΎΠ΄Π°, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ Π±ΡΠ»ΠΎ ΠΏΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ°. ΠΡΠΈΡΡΠΌ ΡΠΏΡΠ°Π²Π° Π±ΡΠ΄Π΅Ρ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π·Π°ΡΡΠ°ΡΠ΅Π½ΠΎ Π½Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Ρ ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ.
ΠΡΡΠ°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π°ΠΏΠΎΠΌΠ½ΠΈΡΡ, ΡΡΠΎ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠΎΠΌ Π² VS, ΠΈ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΡΠΌΠΈΡΡΠ΅ΡΡΡ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΠ΅Π»ΠΈΠ·Π½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ, ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠΈΡ.
ΠΡΡΠ΅ΠΌΠ±Π»Π΅Ρ. ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΡΡΠ΅Π΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ
ΠΠ±Π½ΠΎΠ²Π». 16 Π‘Π΅Π½ 2021 |
Π―Π·ΡΠΊ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ° Π½Π°ΠΏΡΡΠΌΡΡ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π½Π°Π±ΠΎΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°. ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ Π΄Π°Π½Π½ΠΎΠΌΡ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Ρ, Π²Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΡΡΡΡ:
Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Linux (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Debian ΠΈΠ»ΠΈ Ubuntu);
ΠΊΠΎΠΏΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ° NASM.
ΠΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Ρ ΠΎΡΠΎΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ°, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ:
Microsoft Assembler (MASM);
Borland Turbo Assembler (TASM);
The GNU assembler (GAS).
ΠΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ NASM, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½:
Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΡΠΉ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΊΠ°ΡΠ°ΡΡ Π΅Π³ΠΎ c ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π²Π΅Π±-ΡΠ΅ΡΡΡΡΠΎΠ²;
Ρ ΠΎΡΠΎΡΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ. Π ΠΠ½ΡΠ΅ΡΠ½Π΅ΡΠ΅ Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΉΡΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΏΠΎ Π½Π΅ΠΌΡ;
ΠΊΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΡΠΉ. ΠΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊ Π½Π° Linux, ΡΠ°ΠΊ ΠΈ Π½Π° Windows.
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° NASM
ΠΡΠ»ΠΈ ΠΏΡΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ Linux Π²Ρ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π»ΠΈ Β«ΠΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈΒ», ΡΠΎ NASM Ρ Π²Π°Ρ ΡΠΆΠ΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½. Π§ΡΠΎΠ±Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ Π»ΠΈ Ρ Π²Π°Ρ NASM, Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ:
Π²Π²Π΅Π΄ΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ whereis nasm ΠΈ Π½Π°ΠΆΠΌΠΈΡΠ΅ ENTER.
ΠΡΠ»ΠΈ ΠΎΠ½ Ρ Π²Π°Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½, ΡΠΎ Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
ΠΡΠ»ΠΈ ΠΆΠ΅ Π²Ρ ΡΠ²ΠΈΠ΄Π΅Π»ΠΈ:
Π’ΠΎ NASM Ρ Π²Π°Ρ Π½Π΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½, ΠΈ Π΅Π³ΠΎ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ.
Π§ΡΠΎΠ±Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ NASM, Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ°Π³ΠΈ:
Π Π΅Π΄Π°ΠΊΡΠΎΡ Visual Studio Code
Π― ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠΉ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ ΠΊΠΎΠ΄Π° Visual Studio Code. ΠΠ½ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π²Π°ΠΌ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΏΠΈΡΠ°ΡΡ Π½Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ΅ ΠΏΠΎΠ΄ Linux, Π½ΠΎ ΠΈ Π½Π° Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠ°Ρ .
ΠΠ»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π½Π° ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΡΠ°ΠΉΡ Microsoft Visual Studio Code, ΠΏΡΠΎΠ»ΠΈΡΡΠ°ΡΡ ΡΡΡΠ°Π½ΠΈΡΡ Π²Π½ΠΈΠ· ΠΈ ΡΠΊΠ°ΡΠ°ΡΡ Π²Π΅ΡΡΠΈΡ .deb:
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ VS Code Π±ΡΠ΄Π΅Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½, Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ:
Π½Π°ΠΆΠ°ΡΡ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ Ctrl+P ;
ΠΠΎΠ΄Π΅Π»ΠΈΡΡΡΡ Π² ΡΠΎΡΠΈΠ°Π»ΡΠ½ΡΡ ΡΠ΅ΡΡΡ :