Функция копирования в память

BOOTBLK:FF3E             ; =============== S U B R O U T I N E =======================================
BOOTBLK:FF3E
BOOTBLK:FF3E
BOOTBLK:FF3E             code_prepare    proc near                                   ; CODE XREF: CPU_init+D5j
BOOTBLK:FF3E                                                                         ; CPU_init+201j
BOOTBLK:FF3E B0 02                       mov     al, 2
BOOTBLK:FF40 E6 80                       out     80h, al                             ; manufacture's diagnostic checkpoint
BOOTBLK:FF42 B8 18 00                    mov     ax, 18h
BOOTBLK:FF45 8E D0                       mov     ss, ax
BOOTBLK:FF47                             assume ss:nothing
BOOTBLK:FF47 66 BC C0 FF+                mov     esp, 0DFFC0h
BOOTBLK:FF4D 66 83 EC 24                 sub     esp, 24h
BOOTBLK:FF51 66 8B EC                    mov     ebp, esp
BOOTBLK:FF54 BE D0 FF                    mov     si, offset offset_TBL
BOOTBLK:FF57 66 2E 8B 44+                mov     eax, cs:[si+0Eh]
BOOTBLK:FF5C 67 66 89 45+                mov     [ebp+0], eax
BOOTBLK:FF61 66 F7 D8                    neg     eax
BOOTBLK:FF64 67 66 89 45+                mov     [ebp+4], eax
BOOTBLK:FF69 66 2E 8B 44+                mov     eax, cs:[si+12h]
BOOTBLK:FF6E 67 66 89 45+                mov     [ebp+8], eax
BOOTBLK:FF73 66 F7 D8                    neg     eax
BOOTBLK:FF76 67 66 89 45+                mov     [ebp+0Ch], eax
BOOTBLK:FF7B 67 66 C7 45+                mov     dword ptr [ebp+10h], 0DE000h
BOOTBLK:FF84 67 66 C7 45+                mov     dword ptr [ebp+14h], 2000h
BOOTBLK:FF8D 67 66 89 6D+                mov     [ebp+18h], ebp
BOOTBLK:FF92 67 66 C7 45+                mov     dword ptr [ebp+1Ch], 2000h
BOOTBLK:FF9B 67 66 C7 45+                mov     dword ptr [ebp+20h], 0
BOOTBLK:FFA4 8C C8                       mov     ax, cs
BOOTBLK:FFA6 66 0F B7 F0                 movzx   esi, ax
BOOTBLK:FFAA 66 C1 E6 04                 shl     esi, 4
BOOTBLK:FFAE 66 81 C6 20+                add     esi, 0FB20h
BOOTBLK:FFB5 66 6A 08                    push    large 8
BOOTBLK:FFB8 66 56                       push    esi
BOOTBLK:FFBA BE D0 FF                    mov     si, offset offset_TBL
BOOTBLK:FFBD 66 2E 8B 74+                mov     esi, cs:[si+6]
BOOTBLK:FFC2 66 CB                       retfd                                       ; enable 32-bit mode
BOOTBLK:FFC2
BOOTBLK:FFC2             code_prepare    endp
BOOTBLK:FFC2
BOOTBLK:FFC2             ; ---------------------------------------------------------------------------

А вот, он же (правда назван code_unpack) запущен в отладчике с помощью эмулятора ( я параметров ему никаких не передавал - он же вроде их не берет)
00000001	BOOTBLK:code_unpack+2   	out     80h, al         ; manufacture's diagnostic checkpoint	                                        	
00000001	BOOTBLK:code_unpack+4   	mov     ax, 18h                 	EAX=FFFE0018                            	
00000001	BOOTBLK:code_unpack+7   	mov     ss, ax                  	SS=0018                                 	
00000001	BOOTBLK:code_unpack+9   	mov     esp, 0DFFC0h            	ESP=000DFFC0                            	
00000001	BOOTBLK:code_unpack+F   	sub     esp, 24h                	ESP=000DFF9C PF=1 AF=1                  	
00000001	BOOTBLK:code_unpack+13  	mov     ebp, esp                	EBP=000DFF9C                            	
00000001	BOOTBLK:code_unpack+16  	mov     si, offset offset_TBL   	ESI=FFFFFFD0                            	
00000001	BOOTBLK:code_unpack+19  	mov     eax, cs:[si+0Eh]        	EAX=FFFE0000                            	
00000001	BOOTBLK:code_unpack+1E  	mov     [ebp+0], eax            	                                        	
00000001	BOOTBLK:code_unpack+23  	neg     eax                     	EAX=00020000 CF=1 AF=0                  	
00000001	BOOTBLK:code_unpack+26  	mov     [ebp+4], eax            	                                        	
00000001	BOOTBLK:code_unpack+2B  	mov     eax, cs:[si+12h]        	EAX=FFE00000                            	
00000001	BOOTBLK:code_unpack+30  	mov     [ebp+8], eax            	                                        	
00000001	BOOTBLK:code_unpack+35  	neg     eax                     	EAX=00200000                            	
00000001	BOOTBLK:code_unpack+38  	mov     [ebp+0Ch], eax          	                                        	
00000001	BOOTBLK:code_unpack+3D  	mov     dword ptr [ebp+10h], 0DE000h	                                        	
00000001	BOOTBLK:code_unpack+46  	mov     dword ptr [ebp+14h], 2000h	                                        	
00000001	BOOTBLK:code_unpack+4F  	mov     [ebp+18h], ebp          	                                        	
00000001	BOOTBLK:code_unpack+54  	mov     dword ptr [ebp+1Ch], 2000h	                                        	
00000001	BOOTBLK:code_unpack+5D  	mov     dword ptr [ebp+20h], 0  	                                        	
00000001	BOOTBLK:code_unpack+66  	mov     ax, cs                  	EAX=0020F000                            	
00000001	BOOTBLK:code_unpack+68  	movzx   esi, ax                 	ESI=0000F000                            	
00000001	BOOTBLK:code_unpack+6C  	shl     esi, 4                  	ESI=000F0000 CF=0                       	
00000001	BOOTBLK:code_unpack+70  	add     esi, 0FB20h             	ESI=000FFB20 PF=0                       	
00000001	BOOTBLK:code_unpack+77  	push    large 8                 	ESP=000DFF98                            	
00000001	BOOTBLK:code_unpack+7A  	push    esi                     	ESP=000DFF94                            	
00000001	BOOTBLK:code_unpack+7C  	mov     si, offset offset_TBL   	ESI=000FFFD0                            	
00000001	BOOTBLK:code_unpack+7F  	mov     esi, cs:[si+6]          	ESI=FFFEB3C5                            	
00000001	BOOTBLK:code_unpack+84  	retfd                   ; enable 32-bit mode	ESP=000DFF9C CS=0008                    	
00000001	BOOTBLK:FB20            	push    bp                      	ESP=000DFF98

В чем сакральный смысл этой функции? Я понял что он копирует в память кусок, но непонятно какой, и куда потом прыгает.

Вот сама offset_TBL:

BOOTBLK:FFD0 5F          offset_TBL      db  5Fh ; _                                 ; DATA XREF: code_prepare+16o
BOOTBLK:FFD0                                                                         ; code_prepare+7Co
BOOTBLK:FFD1 43                          db  43h ; C
BOOTBLK:FFD2 45                          db  45h ; E
BOOTBLK:FFD3 49                          db  49h ; I
BOOTBLK:FFD4 16                          db  16h
BOOTBLK:FFD5 00                          db    0
BOOTBLK:FFD6 C5 B3 FE FF                 dd 0FFFEB3C5h
BOOTBLK:FFDA E0 40 FF FF                 dd 0FFFF40E0h
BOOTBLK:FFDE 00 00                       dw 0
BOOTBLK:FFE0 FE FF                       dw 0FFFEh
BOOTBLK:FFE2 00 00                       dw 0
BOOTBLK:FFE4 E0 FF                       dw 0FFE0h
BOOTBLK:FFE6 8D A4                       dw 0A48Dh
BOOTBLK:FFE8 24 00                       dw 24h
BOOTBLK:FFEA 00 00                       dw 0
BOOTBLK:FFEC 00 8D                       dw 8D00h
BOOTBLK:FFEE 49 00                       dw 49h

RAM: 
0018:DFF9C	-->	FFFE0000
0018:DFFA0	-->	00020000
0018:DFFA4	-->	FFE00000
0018:DFFA8	-->	00200000
0018:DFFAC	-->	000DE000
0018:DFFB0	-->	00002000
0018:DFFB4	-->	000DFF9C
0018:DFFB8	-->	00002000
0018:DFFBC	-->	00000000

Go to 0008:FFB20

P.S. Отладчик это вполне способен показать IMHO.

Аватар пользователя XVilka

Спасибо! Да вот, кстати не показал, почему-то.

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Разрешённые HTML-теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img>
  • You can use BBCode tags in the text. URLs will automatically be converted to links.

Подробнее о форматировании текста

Антибот - введите цифру.
Ленты новостей