Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.135.185.194] |
|
Сообщ.
#1
,
|
|
|
Прошу помочь разобраться с кодом
IDA выдает вот такой листинг F000:0000 ; F000:0000 ; +-------------------------------------------------------------------------+ F000:0000 ; | This file is generated by The Interactive Disassembler (IDA) | F000:0000 ; | Copyright (c) 2007 by DataRescue sa/nv, <ida@datarescue.com> | F000:0000 ; +-------------------------------------------------------------------------+ F000:0000 ; F000:0000 ; Input MD5 : 28987D85E87427A762221DFAFD273A9A F000:0000 F000:0000 ; File Name : C:\-*censored*-\SN140-AE002.BIN F000:0000 ; Format : Binary file F000:0000 ; Base Address: F000h Range: F0000h - 100000h Loaded length: 10000h F000:0000 F000:0000 .8086 F000:0000 .model small F000:0000 .intel_syntax noprefix F000:0000 F000:0000 ; =========================================================================== F000:0000 F000:0000 ; Segment type: Pure code F000:0000 seg000 segment byte public 'CODE' F000:0000 assume cs:seg000 F000:0000 assume es:nothing, ss:nothing, ds:nothing F000:0000 F000:0000 ; =============== S U B R O U T I N E ======================================= F000:0000 F000:0000 ; Attributes: noreturn F000:0000 F000:0000 sub_F0000 proc near ; CODE XREF: entry_near+DE j F000:0000 mov ax, 1 F000:0003 mov ax, 0AF9h F000:0006 mov ax, 0F000h F000:0009 mov ax, 200h F000:000C mov ax, 0F000h F000:000F mov ds, ax F000:0011 assume ds:nothing F000:0011 mov bx, 4 ; DS:0F000h F000:0014 add ax, [bx] F000:0016 mov ds, ax ; DS:0AF9h F000:0018 assume ds:nothing F000:0018 mov ax, 200h F000:001B mov es, ax F000:001D assume es:nothing F000:001D mov ax, 325h F000:0020 sub ax, 200h F000:0023 jz short loc_F005B F000:0025 xor dx, dx F000:0027 cld F000:0028 F000:0028 loc_F0028: ; CODE XREF: sub_F0000+59 j F000:0028 cmp ax, 1000h F000:002B ja short loc_F003B F000:002D add ax, ax F000:002F add ax, ax F000:0031 add ax, ax F000:0033 mov cx, ax F000:0035 mov dx, 1 F000:0038 jmp short loc_F003E F000:0038 ; --------------------------------------------------------------------------- F000:003A db 90h ; Ð F000:003B ; --------------------------------------------------------------------------- F000:003B F000:003B loc_F003B: ; CODE XREF: sub_F0000+2B j F000:003B mov cx, 8000h F000:003E F000:003E loc_F003E: ; CODE XREF: sub_F0000+38 j F000:003E xor si, si F000:0040 mov di, si F000:0042 rep movsw F000:0044 mov bx, es F000:0046 add bx, 1000h F000:004A mov es, bx F000:004C assume es:nothing F000:004C mov bx, ds F000:004E add bx, 1000h F000:0052 mov ds, bx F000:0054 assume ds:nothing F000:0054 sub ax, 1000h F000:0057 or dx, dx F000:0059 jz short loc_F0028 F000:005B F000:005B loc_F005B: ; CODE XREF: sub_F0000+23 j F000:005B cld F000:005C mov ax, 0BA1h F000:005F mov bx, 325h F000:0062 mov es, bx F000:0064 assume es:nothing F000:0064 sub ax, bx F000:0066 jz short loc_F0099 F000:0068 xor dx, dx F000:006A F000:006A loc_F006A: ; CODE XREF: sub_F0000+97 j F000:006A cmp ax, 1000h F000:006D ja short loc_F007D F000:006F add ax, ax F000:0071 add ax, ax F000:0073 add ax, ax F000:0075 mov cx, ax F000:0077 mov dx, 1 F000:007A jmp short loc_F0080 F000:007A ; --------------------------------------------------------------------------- F000:007C db 90h ; Ð F000:007D ; --------------------------------------------------------------------------- F000:007D F000:007D loc_F007D: ; CODE XREF: sub_F0000+6D j F000:007D mov cx, 8000h F000:0080 F000:0080 loc_F0080: ; CODE XREF: sub_F0000+7A j F000:0080 mov si, ax F000:0082 xor di, di F000:0084 xor ax, ax F000:0086 rep stosw ; Clear entire RAM F000:0088 mov ax, si F000:008A mov bx, es F000:008C add bx, 1000h F000:0090 mov es, bx F000:0092 assume es:nothing F000:0092 sub ax, 1000h F000:0095 or dx, dx F000:0097 jz short loc_F006A F000:0099 F000:0099 loc_F0099: ; CODE XREF: sub_F0000+66 j F000:0099 mov ax, 200h F000:009C mov ds, ax F000:009E assume ds:nothing F000:009E mov ss, ax F000:00A0 assume ss:nothing F000:00A0 mov sp, 0DFFEh F000:00A3 xor ax, ax F000:00A5 mov ds, ax F000:00A7 assume ds:nothing F000:00A7 mov ax, cs F000:00A9 mov bx, 0 F000:00AC mov word ptr [bx], 0D2h ; 'T' F000:00B0 mov [bx+2], ax F000:00B3 mov bx, 10h F000:00B6 mov cx, 1Ch F000:00B9 F000:00B9 loc_F00B9: ; CODE XREF: sub_F0000+C3 j F000:00B9 mov word ptr [bx], 0D2h ; 'T' F000:00BD mov [bx+2], ax F000:00C0 add bx, 4 F000:00C3 loop loc_F00B9 F000:00C5 mov ax, 200h F000:00C8 mov ds, ax F000:00CA assume ds:nothing F000:00CA mov es, ax F000:00CC assume es:nothing F000:00CC call sub_F02A1 F000:00CC sub_F0000 endp F000:00CC F000:00CC ; --------------------------------------------------------------------------- F000:00CF db 0EBh ; û F000:00D0 db 22h ; " F000:00D1 db 90h ; Ð F000:00D2 db 0CFh ; ¦ F000:00D3 db 0CFh ; ¦ F000:00D4 db 80h ; À F000:00D5 db 0FCh ; ¹ F000:00D6 db 25h ; % F000:00D7 db 75h ; u F000:00D8 db 17h F000:00D9 db 53h ; S F000:00DA db 50h ; P F000:00DB db 6 F000:00DC db 33h ; 3 F000:00DD db 0DBh ; - F000:00DE db 8Eh ; Î F000:00DF db 0C3h ; + F000:00E0 db 8Ah ; Ê F000:00E1 db 0D8h ; + F000:00E2 db 3 F000:00E3 db 0DBh ; - F000:00E4 db 3 F000:00E5 db 0DBh ; - F000:00E6 db 26h ; & F000:00E7 db 89h ; É F000:00E8 db 17h F000:00E9 db 26h ; & F000:00EA db 8Ch ; Ì F000:00EB db 5Fh ; _ F000:00EC db 2 F000:00ED db 7 F000:00EE db 58h ; X F000:00EF db 5Bh ; [ F000:00F0 db 0CFh ; ¦ F000:00F1 db 0CCh ; ¦ F000:00F2 db 0CCh ; ¦ F000:00F3 db 0CCh ; ¦ F000:00F4 db 0CCh ; ¦ F000:00F5 db 0CCh ; ¦ F000:00F6 db 0CCh ; ¦ F000:00F7 db 0C7h ; ¦ F000:00F8 db 6 F000:00F9 db 0 F000:00FA db 0 F000:00FB db 0 F000:00FC db 0 F000:00FD db 0CBh ; T F000:00FE ; --------------------------------------------------------------------------- F000:00FE push bp F000:00FF mov bp, sp F000:0101 xor ax, ax F000:0103 mov al, [bp+4] F000:0106 call sub_F0117 F000:0109 pop bp F000:010A retn F000:010B ; --------------------------------------------------------------------------- F000:010B push bp F000:010C mov bp, sp F000:010E mov ah, 1 F000:0110 call sub_F0117 F000:0113 xor ah, ah F000:0115 pop bp F000:0116 retn F000:0117 F000:0117 ; =============== S U B R O U T I N E ======================================= F000:0117 F000:0117 F000:0117 sub_F0117 proc near ; CODE XREF: seg000:0106 p F000:0117 ; seg000:0110 p F000:0117 push es F000:0118 xor bx, bx F000:011A mov es, bx F000:011C assume es:nothing F000:011C push word ptr es:0Ah F000:0121 mov bx, 0Ah F000:0124 push bx F000:0125 mov bx, sp F000:0127 call dword ptr ss:[bx] F000:012A add sp, 4 F000:012D pop es F000:012E retn F000:012E sub_F0117 endp F000:012E F000:012F ; --------------------------------------------------------------------------- F000:012F F000:012F entry_far: ; CODE XREF: seg000:FFF0 J F000:012F jmp short entry_near F000:0131 ; --------------------------------------------------------------------------- F000:0131 nop F000:0132 mov dx, 100h F000:0135 mov al, 61h ; 'a' F000:0137 out dx, al F000:0138 nop F000:0139 nop F000:013A nop F000:013B nop F000:013C nop F000:013D retn F000:013E ; --------------------------------------------------------------------------- F000:013E mov dx, 100h F000:0141 mov al, 62h ; 'b' F000:0143 out dx, al F000:0144 nop F000:0145 nop F000:0146 nop F000:0147 nop F000:0148 nop F000:0149 retn F000:014A ; --------------------------------------------------------------------------- F000:014A mov dx, 100h F000:014D mov al, 65h ; 'e' F000:014F out dx, al F000:0150 nop F000:0151 nop F000:0152 nop F000:0153 nop F000:0154 nop F000:0155 retn F000:0156 ; --------------------------------------------------------------------------- F000:0156 mov dx, 100h F000:0159 mov al, 66h ; 'f' F000:015B out dx, al F000:015C nop F000:015D nop F000:015E nop F000:015F nop F000:0160 nop F000:0161 retn F000:0162 ; --------------------------------------------------------------------------- F000:0162 mov dx, 100h F000:0165 mov al, 67h ; 'g' F000:0167 out dx, al F000:0168 nop F000:0169 nop F000:016A nop F000:016B nop F000:016C nop F000:016D retn F000:016D ; --------------------------------------------------------------------------- F000:016E db 0 F000:016F db 0 F000:0170 ; --------------------------------------------------------------------------- F000:0170 add [bx+si-1], bh F000:0174 mov es, ax F000:0176 assume es:nothing F000:0176 mov di, 0 F000:0179 mov byte ptr es:[di], 0EAh ; 'ú' F000:017D mov word ptr es:[di+1], 12Fh F000:0183 mov ax, cs F000:0185 mov es:[di+3], ax F000:0189 mov bx, 0 F000:018C mov cx, 0 F000:018F F000:018F loc_F018F: ; CODE XREF: seg000:019A j F000:018F mov ax, cs:[bx] F000:0192 xor cl, al F000:0194 xor ch, ah F000:0196 inc bx F000:0197 inc bx F000:0198 or bx, bx F000:019A jnz short loc_F018F F000:019C mov bx, 16Fh F000:019F and bx, 0FFFEh F000:01A3 mov cs:[bx], cx F000:01A6 nop F000:01A7 int 3 ; Trap to Debugger F000:01A8 F000:01A8 ; =============== S U B R O U T I N E ======================================= F000:01A8 F000:01A8 F000:01A8 sub_F01A8 proc near ; CODE XREF: sub_F01A8+1 j F000:01A8 ; sub_F11FA+25 p ... F000:01A8 nop F000:01A9 loop sub_F01A8 F000:01AB retn F000:01AB sub_F01A8 endp F000:01AB F000:01AC F000:01AC ; =============== S U B R O U T I N E ======================================= F000:01AC F000:01AC ; Attributes: noreturn F000:01AC F000:01AC entry_near proc near ; CODE XREF: seg000:entry_far j F000:01AC mov dx, 10h F000:01AF in ax, dx ; Interrupt controller, 8259A. F000:01B0 and ax, 2010h F000:01B3 jz short loc_F01DB F000:01B5 mov dx, 20h ; ' ' F000:01B8 mov al, 80h ; 'À' F000:01BA out dx, al ; Interrupt controller, 8259A. F000:01BB F000:01BB loc_F01BB: ; CODE XREF: entry_near+2D j F000:01BB mov dx, 10h ; Read U4 U47 F000:01BE in ax, dx F000:01BF and ax, 10h ; Check for BTL signal F000:01C2 jz short loc_F01DB F000:01C4 mov dx, 20h ; ' ' F000:01C7 mov ax, 84h ; 'Ä' F000:01CA out dx, ax ; Interrupt controller, 8259A. F000:01CB nop F000:01CC nop F000:01CD nop F000:01CE nop F000:01CF nop F000:01D0 nop F000:01D1 nop F000:01D2 nop F000:01D3 nop F000:01D4 nop F000:01D5 mov ax, 80h ; 'À' F000:01D8 out dx, ax ; Interrupt controller, 8259A. F000:01D9 jmp short loc_F01BB F000:01DB ; --------------------------------------------------------------------------- F000:01DB F000:01DB loc_F01DB: ; CODE XREF: entry_near+7 j F000:01DB ; entry_near+16 j F000:01DB mov dx, 52h ; 'R' F000:01DE mov al, 0FFh F000:01E0 out dx, al F000:01E1 mov dx, 20h ; ' ' F000:01E4 mov al, 4 F000:01E6 out dx, al ; Interrupt controller, 8259A. F000:01E7 nop F000:01E8 nop F000:01E9 nop F000:01EA nop F000:01EB nop F000:01EC nop F000:01ED nop F000:01EE nop F000:01EF nop F000:01F0 nop F000:01F1 nop F000:01F2 nop F000:01F3 mov al, 0 F000:01F5 out dx, al ; Interrupt controller, 8259A. F000:01F6 mov dx, 0FFFEh F000:01F9 mov al, 0 F000:01FB out dx, al F000:01FC nop F000:01FD nop F000:01FE nop F000:01FF nop F000:0200 nop F000:0201 mov al, 7 F000:0203 out dx, al F000:0204 nop F000:0205 nop F000:0206 nop F000:0207 nop F000:0208 nop F000:0209 mov dx, 0FFFDh F000:020C mov al, 0 F000:020E out dx, al F000:020F nop F000:0210 nop F000:0211 nop F000:0212 nop F000:0213 nop F000:0214 mov al, 0Fh F000:0216 out dx, al F000:0217 nop F000:0218 nop F000:0219 nop F000:021A nop F000:021B nop F000:021C mov dx, 0FFFCh F000:021F mov al, 0F0h ; '¨' F000:0221 out dx, al F000:0222 nop F000:0223 nop F000:0224 nop F000:0225 nop F000:0226 nop F000:0227 mov dx, 0FFFAh F000:022A mov al, 0 F000:022C out dx, al F000:022D nop F000:022E nop F000:022F nop F000:0230 nop F000:0231 nop F000:0232 mov dx, 0FFF9h F000:0235 mov al, 10h F000:0237 out dx, al F000:0238 nop F000:0239 nop F000:023A nop F000:023B nop F000:023C nop F000:023D mov dx, 0FFF8h F000:0240 mov al, 20h ; ' ' F000:0242 out dx, al F000:0243 nop F000:0244 nop F000:0245 nop F000:0246 nop F000:0247 nop F000:0248 mov dx, 0FFFBh F000:024B mov al, 30h ; '0' F000:024D out dx, al F000:024E nop F000:024F nop F000:0250 nop F000:0251 nop F000:0252 nop F000:0253 mov dx, 0FFF0h F000:0256 mov al, 2 F000:0258 out dx, al F000:0259 nop F000:025A nop F000:025B nop F000:025C nop F000:025D nop F000:025E mov dx, 0FFF4h F000:0261 mov al, 11h F000:0263 out dx, al F000:0264 nop F000:0265 nop F000:0266 nop F000:0267 nop F000:0268 nop F000:0269 mov dx, 0FFF5h F000:026C mov al, 0C8h ; 'L' F000:026E out dx, al F000:026F nop F000:0270 nop F000:0271 nop F000:0272 nop F000:0273 nop F000:0274 mov dx, 0FFF6h F000:0277 mov al, 8 F000:0279 out dx, al F000:027A nop F000:027B nop F000:027C nop F000:027D nop F000:027E nop F000:027F mov dx, 0FFF2h F000:0282 mov al, 0 F000:0284 out dx, al F000:0285 nop F000:0286 nop F000:0287 nop F000:0288 nop F000:0289 nop F000:028A jmp sub_F0000 F000:028D ; --------------------------------------------------------------------------- F000:028D retn F000:028D entry_near endp F000:028D F000:028E Смущает инструкция по адресу F000:028A которая передает управление в начало сегмента. Там же по идее должны вектора прерываний находиться? Сами инструкции (в начале сегмента) тоже выглядят бессмысленными... С другой стороны я их прослеживал - со временем они выходят на осмысленный код. Собственно вопрос - это нормальный код или нет? Можно списать на проделки компилятора? Добавлено Процессор - NEC UPD70216H |
Сообщ.
#2
,
|
|
|
Цитата SomeOtherOne @ Там же по идее должны вектора прерываний находиться? Вектора прерываний находятся по адресу 0000:0000. Эта же инструкция передает адрес в начало сегмента (не нулевого). Цитата SomeOtherOne @ Сами инструкции (в начале сегмента) тоже выглядят бессмысленными... например? Цитата SomeOtherOne @ Собственно вопрос - это нормальный код или нет? А что такое "ненормальны код"? Код как код, с учетом того, что его выдал дизассемблер. |
Сообщ.
#3
,
|
|
|
Цитата shm @ А что такое "ненормальны код"? Ну вот например: F000:0000 mov ax, 1 F000:0003 mov ax, 0AF9h F000:0006 mov ax, 0F000h F000:0009 mov ax, 200h F000:000C mov ax, 0F000h F000:000F mov ds, ax AX пять раз загружается один раз используется. DS тоже самое: F000:000C mov ax, 0F000h F000:000F mov ds, ax F000:0011 mov bx, 4 F000:0014 add ax, [bx] F000:0016 mov ds, ax Вот это ветвление никогда не срабатывает: F000:001D mov ax, 325h F000:0020 sub ax, 200h F000:0023 jz short loc_F005B короче первые два десятка строк на код не похожи я почему и сомневаюсь - может это таблица какаянить.. Цитата shm @ Вектора прерываний находятся по адресу 0000:0000. Эта же инструкция передает адрес в начало сегмента (не нулевого). Да, действительно... получается что вектора в оперативку загружаются. Может эмулятор какой посоветуете? Чтоб IDA-шный вывод туда загрузить и посмотреть как оно работает. |
Сообщ.
#4
,
|
|
|
Весьма странно видеть это:
Цитата SomeOtherOne @ ибо это же код команды nop. F000:003A db 90h ; Ð |
Сообщ.
#5
,
|
|
|
Попробую по другому спросить
Что нужно сделать чтобы запустить встроенный в IDA отладчик для этого кода? в моем случае меню "Debugger" отсутствует, панели инструментов отладчика неактивны. Пробовал загружать Notepad.exe - меню "Debugger" появляется. Как подключить отладчик к моему коду - не могу сообразить... |
Сообщ.
#6
,
|
|
|
Пришел к выводу что проблема не имеет простого решения.
Все дело в том что IDA PRO это супер крутейший интерактивнейший мега дизассемблер-турбоотладчик. И чтобы использовать всю эту круть надо всего ничего - написать плагин-эмулятор железяки в которой ты ковыряешься. такие дела... Ушел курить IDA SDK. |