Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «НСдокумСнтированныС ΠΈ малоизвСстныС возмоТности Windows XPΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 77

Автор Π ΠΎΠΌΠ°Π½ КлимСнко

Π“Π»Π°Π²Π° 13

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Debug

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ, являСтся способ создания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Win32 с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ стандартного ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки debug.exe.

Но сначала Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΠΏΠΎΡΡΠ½ΠΈΡ‚ΡŒ, Π·Π°Ρ‡Π΅ΠΌ Π²ΠΎΠΎΠ±Ρ‰Π΅ упоминаСтся этот ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ. Π‘ΠΎΠ³Π»Π°ΡΠΈΡ‚Π΅ΡΡŒ, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‹ ΠΎΠ±Ρ‰Π΅Π³ΠΎ пользования, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡ€Π°Π²Π° Π½ΠΈΡ‡Π΅Π³ΠΎ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ. На Π½ΠΈΡ… Π½Π΅Ρ‚ ΠΏΡ€ΠΈΠ²ΠΎΠ΄Π° ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-дисков, дисковода, Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π° ΠΈΠ»ΠΈ нСльзя ΡΠΊΠ°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΠ· Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π° Ρ„Π°ΠΉΠ»Ρ‹. Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, администраторы сдСлали Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ нСльзя Π±Ρ‹Π»ΠΎ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ свои Ρ„Π°ΠΉΠ»Ρ‹, Π² Ρ‚ΠΎΠΌ числС вирусы, ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‡ΠΈΠΊΠΈ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹, троянскиС ΠΊΠΎΠ½ΠΈ. Но ΡƒΠΆΠ΅ стало стандартом, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° debug.exe Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² поставку Windows ΠΈ ΠΎ Π½Π΅ΠΉ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π·Π½Π°Π΅Ρ‚ всС мСньшС ΠΈ мСньшС администраторов…

Π­Ρ‚ΠΎ Π±Ρ‹Π» Ρ‚ΠΎΠ½ΠΊΠΈΠΉ Π½Π°ΠΌΠ΅ΠΊ администраторам ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… общСствСнных ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ².

ΠŸΠ Π˜ΠœΠ•Π§ΠΠΠ˜Π•

ΠžΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ debug.exe Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ поставку всСх вСрсий Windows (находится Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ %systemroot%\system32) ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ DOS-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° языкС «АссСмблСр» ΠΈΠ»ΠΈ машинном языкС.

 Π˜Ρ‚Π°ΠΊ, запустим ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ строку ΠΈ Π²Π²Π΅Π΄Π΅ΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ β€” debug.exe. ПослС этого ΠΌΡ‹ ΠΏΠΎΠΏΠ°Π΄Π΅ΠΌ Π² срСду ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΎ Ρ‡Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΈΠ· появившСгося привСтствия Π² Π²ΠΈΠ΄Π΅ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ курсора.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ посмотрим Π½Π° сам ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΡΡ‚Π΅Π½ΡŒΠΊΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Win32, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ стандартноС ΠΎΠΊΠ½ΠΎ привСтствия.

ΠŸΠ Π˜ΠœΠ•Π§ΠΠΠ˜Π•

Π”Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π±Ρ‹Π» взят ΠΈΠ· ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΆΡƒΡ€Π½Π°Π»Π° Β«Π’Π°Ρˆ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Β» Π·Π° 2003 Π³ΠΎΠ΄. 

Листинг 13.1. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Win32 Ρ‚ΠΈΠΏΠ° Hello, World!

f 0 400 0

f1000 1200 0

a0

db4d,5a

а 3с db40

Π° 40

db 50,45,0,0

dw 14c,1

Π° 54

dw e0,10f,10b

Π° 68 dw 10d0

a 74

dw 0,40,1000,0,200,0

dw 4,0,0,0,4

a 90

dw 2000,0,200,0,0,0,2

a b4 dw 10

a c0

dw 1090,0,3c

a 140

dw 1000,0,1000,0,200,0,200,0

a 15c

dw 20,e000

a 1010

db 54,68,69,73,20,54,69,74,6c,65,3f

a 1020

db 54,68,69,73,20,4d,65,73,73,61,67,65,3f

a 1040

db 55,53,45,52,33,32,2e,64,6c,6c

a 1050

db 4b,45,52,4e,45,4c,33,32,2e,64,6c,6c

a 1060

db 0,0,4d,65,73,73,61,67,65,42,6f,78,41

Π° 1070

db 0,0,45,78,69,74,50,72,6f,63,65,73,73

Π° 1080

dw 1060,0,0,0,1070,0,0,0

Π° 1000

dw 1060,0,0,0,1070,0,0,0

Π° 1090

dw 1080,0,0,0,0,0,1040,0,1000,0

dw 1088,0,0,0,0,0,1050,0,1008,0

a 10d0

db 6a,24

db 68,10,10,40,0

db 68,20,10,40,0

db 6a,0

db ff,15,0,10,40,0

db 6a,0

db ff,15,8,10,40,0

m 1000 1200 200

m 0 400 100

n Β«ΠΏΡƒΡ‚ΡŒ ΠΈ имя создаваСмого Ρ„Π°ΠΉΠ»Π°.binΒ»

r cx 400 w

q

Π’ΠΎΡ‚ ΠΈ вСсь ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, написанной Π½Π° машинном языкС ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ ΠΎΠΊΠ½ΠΎ, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Π½ΠΎΠ΅ Π½Π° рис. 13.1. 

Рис. 13.1 Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ 

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² этом ΠΊΠΎΠ΄Π΅. Для Π½Π°Ρ‡Π°Π»Π° опишСм ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ°, примСняСмыС Π² Π½Π΅ΠΌ.

F Β«Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ адрСс» Β«ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ адрСс» Β«Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΒ»

Данная ΠΊΠΎΠΌΠ°Π½Π΄Π° заполняСт Β«Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π΅ΠΌΒ» Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ памяти, начиная с Β«Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ адрСса» ΠΈ заканчивая Β«ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΌ адрСсом».

A «адрСс»

Команда Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΡƒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ содСрТимоС, записанноС Π² памяти, начиная с ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ «адрСса». ПослС Π΅Π΅ Π²Π²ΠΎΠ΄Π° ΠΏΠ΅Ρ€Π΅Π΄ Π²Π°ΠΌΠΈ появится ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΠ΅Π½ΠΈΠ΅, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅, ΠΊΠ°ΠΊΠΎΠΉ участок памяти Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ рСдактируСтся. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΡƒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΡƒΠΆΠ΅ ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ Π²Π°ΠΌ участок памяти, Π½ΡƒΠΆΠ½ΠΎ Π² пустой строкС Π½Π°ΠΆΠ°Ρ‚ΡŒ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ Enter.

МоТно Ρ‚Π°ΠΊΠΆΠ΅ ввСсти Π΄Π°Π½Π½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π±Π΅Π· значСния адрСса β€” Π² этом случаС Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ адрСса памяти, примСняСмого ΠΏΡ€ΠΈ послСднСй ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ останова.

m Β«Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ адрСс» Β«ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ адрСс» «адрСс назначСния»

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ содСрТимоС Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° памяти, начиная с Β«Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ адрСса» ΠΈ заканчивая Β«ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΌ адрСсом», Π² ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΡƒΡŽΡΡ с адрСса назначСния.

N Β«ΠΏΡƒΡ‚ΡŒ ΠΈ имя Ρ„Π°ΠΉΠ»Π°Β»

Данная ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ создаваСмый ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠΎΠΌ Ρ„Π°ΠΉΠ» (ΠΈ Π² ΠΊΠ°ΠΊΠΎΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ). Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ создавался для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ MS-DOS, поэтому ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π•Π₯Π•-Ρ„Π°ΠΉΠ»Ρ‹ β€” ΠΈΠΌΠ΅Π½Π½ΠΎ поэтому Π² ΠΊΠΎΠ΄Π΅ ΠΈ создаСтся BIN-Ρ„Π°ΠΉΠ» (послС Π΅Π³ΠΎ создания Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ BIN Π² Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ EXE).

Команда примСняСтся Ρ‚Π°ΠΊΠΆΠ΅ для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ„Π°ΠΉΠ»Π° ΠΈ указания ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² запуска Ρ„Π°ΠΉΠ»Π° (Π² этом случаС послС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ n Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠ΄Ρ‚ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹).

R «рСгистр»

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΡƒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ содСрТимоС ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ рСгистра процСссора. Π’ контСкстС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° измСняСтся содСрТимоС рСгистра Π‘Π₯. ПослС Π²Π²ΠΎΠ΄Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ появится ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΠ΅Π½ΠΈΠ΅ (Π² Π²ΠΈΠ΄Π΅ двоСточия) для Π²Π²ΠΎΠ΄Π° Π½ΠΎΠ²ΠΎΠ³ΠΎ содСрТимого рСгистра.

Если ввСсти ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π±Π΅Π· указания ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ рСгистра, Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ Π²Π°ΠΌΠΈ отобразится содСрТимоС всСх рСгистров процСссора, всСх Ρ„Π»Π°Π³ΠΎΠ² (ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚, Π±Ρ‹Π»ΠΎ Π»ΠΈ зарСгистрировано ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с числами, являСтся Π»ΠΈ число Ρ‡Π΅Ρ‚Π½Ρ‹ΠΌ ΠΈ Ρ‚.Π΄.) ΠΈ содСрТимоС Π΄Π°Π½Π½ΠΎΠΉ области памяти.

МоТно Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ установки Ρ„Π»Π°Π³ΠΎΠ². Для этого Π½ΡƒΠΆΠ½ΠΎ ввСсти Ρ‚Π°ΠΊΡƒΡŽ Ρ€Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹: r f, послС Ρ‡Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ Π²Π°ΠΌΠΈ отобразится установка Ρ„Π»Π°Π³ΠΎΠ² Π² Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΈ ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΠ΅Π½ΠΈΠ΅ для рСдактирования Ρ„Π»Π°Π³ΠΎΠ². Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Ρ„Π»Π°Π³ΠΎΠ², Π½ΡƒΠΆΠ½ΠΎ ввСсти Π² ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΠ΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½Ρ‹ΠΉ Π΅ΠΌΡƒ Ρ„Π»Π°Π³. НапримСр, для Ρ„Π»Π°Π³Π° cy (пСрСнос) Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ„Π»Π°Π³ nc (Π½Π΅Ρ‚ пСрСноса).

W «адрСс»

И Π½Π°ΠΊΠΎΠ½Π΅Ρ†, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ записываСтся содСрТимоС памяти Π½Π° диск Π² Π²ΠΈΠ΄Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Win32. Π‘Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° данная ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ запись Ρ„Π°ΠΉΠ»Π° ΠΈΠ· адрСса памяти CS:100, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ самому ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ адрСс памяти, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ запись.

Q

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠΊΠ½ΠΎ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ°.

ОписаниС кода

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅ описаниС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π½ΡΡ‚ΡŒΡΡ описаниСм самого ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. И ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π±ΡƒΠ΄Π΅ΠΌ Ρ‚Π°ΠΊ: сначала указываСтся адрСс памяти (ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°), Π° ΠΏΠΎΡ‚ΠΎΠΌ ΠΊΡ€Π°Ρ‚ΠΊΠΎ говорится ΠΎ Ρ‚ΠΎΠΌ, для Ρ‡Π΅Π³ΠΎ ΠΌΡ‹ записываСм ΠΏΠΎ этому адрСсу памяти Π΄Π°Π½Π½Ρ‹Π΅.

ΠŸΠ Π˜ΠœΠ•Π§ΠΠΠ˜Π•

Π•Ρ‰Π΅ ΠΏΠ΅Ρ€Π΅Π΄ описаниСм ΠΊΠΎΠ΄Π° стоит ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ… db ΠΈ dw, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… начинаСтся запись Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² адрСса памяти β€” эти ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠ΄Π½ΠΎΠΉ записываСмой ячСйки (ячСйки ΠΎΡ‚Π΄Π΅Π»ΡΡŽΡ‚ΡΡ запятыми). Если ΡƒΠΊΠ°Π·Π°Π½Π° пСрвая ΠΊΠΎΠΌΠ°Π½Π΄Π°, Ρ‚ΠΎ ΠΎΠ΄Π½Π° ячСйка Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ Π² памяти 1 Π±Π°ΠΉΡ‚, Π° Ссли ΡƒΠΊΠ°Π·Π°Π½Π° вторая ΠΊΠΎΠΌΠ°Π½Π΄Π°, Ρ‚ΠΎ ΠΎΠ΄Π½Π° ячСйка Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ 2 Π±Π°ΠΉΡ‚Π°.

И Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ β€” всС значСния Π² ΠΊΠΎΠ΄Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π² ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚ΠΈΡ€ΠΈΡ‡Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅ ΠΈ ΠΏΠΈΡˆΡƒΡ‚ΡΡ Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС.

Π‘Π½Π°Ρ‡Π°Π»Π° Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ нулями (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ) Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ‹ памяти ΠΎΡ‚ 0 Π΄ΠΎ 400 ΠΈ ΠΎΡ‚ 1000 Π΄ΠΎ 1200. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒΡΡ сама ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌ β€” ΠΈΠΌΠ΅Π½Π½ΠΎ Π² Π½Π΅ΠΌ для удобства ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π²Π½Π°Ρ‡Π°Π»Π΅ собрана ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°.

Начиная с адрСса 0 ΠΈ заканчивая адрСсом 15c, формируСтся Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Π Π•-Ρ„Π°ΠΉΠ»Π°: Π²Π½Π°Ρ‡Π°Π»Π΅ ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ DOS-Ρ„Π°ΠΉΠ»Π° (адрСс 0, записываСтся MZ), ΠΏΠΎΡ‚ΠΎΠΌ указываСтся, с ΠΊΠ°ΠΊΠΎΠ³ΠΎ адрСса Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Π Π•-Ρ„Π°ΠΉΠ»Π° (содСрТимоС адрСса 3c), ΠΈ Π² этом адрСсС ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ сам Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Π Π•-Ρ„Π°ΠΉΠ»Π° (адрСс 40, записываСтся Β«Π Β», Β«Π•Β», 0,0). По этому ΠΆΠ΅ адрСсу записываСтся ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ процСссора, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° (для i386 вводится 14c), ΠΈ количСство сСкций, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ. Π”Π°Π»ΡŒΡˆΠ΅, ΠΏΠΎ адрСсу 54, указываСтся Ρ€Π°Π·ΠΌΠ΅Ρ€ NT-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°, Ρ„Π»Π°Π³ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ «магичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Β». Если значСния ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… адрСсов Π±Ρ‹Π»ΠΈ статичны, Ρ‚ΠΎ содСрТимоС адрСса 68 зависит ΠΎΡ‚ самой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ β€” ΠΎΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° адрСс Ρ‚ΠΎΡ‡ΠΊΠΈ Π²Ρ…ΠΎΠ΄Π° Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. Начиная с этого адрСса, Π±ΡƒΠ΄Π΅Ρ‚ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ сам ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. По адрСсу 74 вводится Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ адрСс Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ (0,40), Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ Π² памяти ΠΈ Π² Ρ„Π°ΠΉΠ»Π΅ (1000,0,200,0), Π° Ρ‚Π°ΠΊΠΆΠ΅ вСрсия ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы ΠΈ вСрсия подсистСмы (4,0,0,0,4). По адрСсу 90 указываСтся Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠ±Ρ€Π°Π·Π° с Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌΠΈ Π² памяти (2000), Ρ€Π°Π·ΠΌΠ΅Ρ€ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Π² Ρ„Π°ΠΉΠ»Π΅ (200) ΠΈ подсистСма (2). По адрСсу b4 указываСтся количСство Π²Ρ…ΠΎΠ΄ΠΎΠ² Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ смСщСний (10), Π° ΠΏΠΎ адрСсу c0 ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ сами Π²Ρ…ΠΎΠ΄Ρ‹ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ (ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½): адрСс Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° (1090) ΠΈ Π΅Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ (3c). По адрСсу 140 начинаСтся Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (ΠΎΠΏΡΡ‚ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ Π²Ρ…ΠΎΠ΄): Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΡ‹ΠΉ объСм памяти (1000), с ΠΊΠ°ΠΊΠΎΠ³ΠΎ адрСса начинаСтся (1000), сколько мСста Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Π² Ρ„Π°ΠΉΠ»Π΅ (200) ΠΈ ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΌΡƒ ΡΠΌΠ΅Ρ‰Π΅Π½ΠΈΡŽ Π² Π½Π΅ΠΌ находится (200). И послСдний адрСс Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° β€” 15c. Π’ Π½Π΅ΠΌ хранятся Ρ„Π»Π°Π³ΠΈ (сСкция кодовая, ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, запись ΠΈ исполнСниС).

ПослС формирования Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ β€” Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ адрСсов ΠΎΡ‚ 1010 Π΄ΠΎ 1070. Π‘Π½Π°Ρ‡Π°Π»Π° записываСтся Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ сообщСния ΠΈ Π΅Π³ΠΎ тСкст (адрСса 1010 ΠΈ 1020), ΠΏΠΎΡ‚ΠΎΠΌ названия Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±ΡƒΠ΄ΡƒΡ‚ взяты Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ MessageBox (Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ нашС ΠΎΠΊΠ½ΠΎ) ΠΈ ExitProcess (Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ) (адрСс 1040 β€” USER32.DLL, Π° адрСс 1050 β€” KERNEL32.DLL). И Π½Π°ΠΊΠΎΠ½Π΅Ρ†, сами названия Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ (адрСс 1060 β€” MessageBoxA ΠΈ адрСс 1070 β€” ExitProcess), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΈΡˆΡƒΡ‚ΡΡ с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ рСгистра.