машинный код для DOS системы

У меня есть машинный код, меня интересует, как его запустить и проверить, код системы dos, в каком расширении он должен быть?

b8  21 0a 00 00
a3  0c 10 00 06
b8  6f 72 6c 64
a3  08 10 00 06
b8  6f 2c 20 57
a3  04 10 00 06
b8  48 65 6c 6c
a3  00 10 00 06
b9  00 10 00 06
ba  10 00 00 00
bb  01 00 00 00
b8  04 00 00 00
cd 80
b8  01 00 00 00 
cd 80
b8 417574686f723a2049504f6c656b73656e6b6f

Ответы (2 шт):

Автор решения: PRODIGY

в каком расширении он должен быть?

Скопируйте эти значения в любой НЕХ-редактор (HxD), и сохраните с расширением "BIN". Теперь открываете этот бинарник в дизассемблере, и таким образом получаете исходник. В данном случае он представляет собой "Hello World" для линуха, т.к. в коде имеются вызовы INT-80h. В конце есть строка автора - вот результат:

File: asm.bin
Size: 89
Type: Binary

* Entry Point:

00000000: B8210A0000           mov eax, 00000A21
00000005: A30C100006           mov [0600100C], eax
0000000A: B86F726C64           mov eax, 646C726F
0000000F: A308100006           mov [06001008], eax
00000014: B86F2C2057           mov eax, 57202C6F
00000019: A304100006           mov [06001004], eax
0000001E: B848656C6C           mov eax, 6C6C6548
00000023: A300100006           mov [06001000], eax

00000028: B900100006           mov ecx, 06001000
0000002D: BA10000000           mov edx, 00000010
00000032: BB01000000           mov ebx, 00000001
00000037: B804000000           mov eax, 00000004
0000003C: CD80                 int 80

0000003E: B801000000           mov eax, 00000001
00000043: CD80                 int 80

00000045: B841757468           Author: IPOleksenko
→ Ссылка
Автор решения: PRODIGY

Примеры исходников и их опкодов для "Hello World!" DOS и Win. Скачайте отсюда FASM, и скопируйте эти исходники в его окно. Теперь нажмите F9, и на выходе получите исполняемые файлы *.com и *.exe.

Вот код для MS-DOS:

;//---------------
org   100h
jmp   start

msg     db    'Hello World! $'

start:  mov   ah,9     ;// функция AH=9 сервиса DOS int-21h (вывод строки на консоль)
        mov   dx,msg   ;// адрес строки
        int   21h      ;// зовём сервис!
        xor   ax,ax    ;// fn.AH=0 сервиса биос (ждать нажатия клавиши)
        int   16h      ;// сервис BIOS для работы с клавиатурой
        ret            ;// выход из программы.

Опкоды программы выше (скопировать в блокнот и сохранить как *.com): EB0E48656C6C6F20576F726C64212024B409BA0201CD2131C0CD16C3

Это то-же "Hello World", только для Windows от 2К до Win10. Опкоды размером 2 КБ, поэтому не привожу.

;// for Windows
;//---------------
format  pe gui
include 'win32ax.inc'
.data
msg     db  'Hello World!',0
.code
start:  invoke  MessageBox,0,msg,0,0 
        invoke  ExitProcess,0
.end start
→ Ссылка