Какие изменения мне нужно сделать, чтобы сделать эту 16-битную сборку 32-битной? - PullRequest
0 голосов
/ 11 сентября 2011

Я задал вопрос об ассемблере здесь . У меня сложилось впечатление, что сложно использовать 16-битные программы. Так что теперь я хочу изменить его на 32 бит. Вот код первой программы, которую я пробовал:

[org 0x0100]
mov ax, 5
mov bx, 10
add ax, bx
mov bx, 15
add ax, bx 
mov ax, 0x4c00
int 0x21

Я назвал его ex01.asm. Я использовал NASM для создания COM-файла. Команда была

nasm ex01.asm -o ex01.com -l ex01.lst

Но я не могу использовать созданный COM-файл в Ollydbg. Так что, если я хочу изменить эту программу для работы в win xp или win 7, чтобы я мог использовать Ollydbg, какие изменения мне нужно сделать и почему? Мои мысли:

  1. Я думаю, что я должен изменить ORG 0x100. Это специфично для COM-файлов, я думаю. Итак, я хочу знать, какие изменения я должен сделать здесь? COM-файл не работает на win XP и win 7? Могу ли я сделать EXE-файл вместо COM-файла? Я просто хочу понять эту процедуру.

  2. Мне нужно изменить вторую последнюю строку, потому что она используется, чтобы сообщить DOS, что программа завершена. Какие изменения я должен сделать здесь и почему?

  3. Я забыл, почему используется последняя строка? Кто-нибудь может сказать мне, и если потребуется замена для этого?

1 Ответ

1 голос
/ 11 сентября 2011

Я думаю, что NASM не может напрямую создавать EXE. Вам нужно будет скомпилировать ASM в объектный файл, а затем связать его с каким-нибудь компоновщиком (например, ld.exe из пакета MinGW).

В коде вам нужно будет создать процедуру вместо встроенного кода (WinMain).

Код:

mov ax, 0x4c00 
int 0x21

будет заменено возвращением из процедуры (или вызовом функции из kernel32.dll).

Это может помочь (немного): http://en.kioskea.net/faq/1559-compiling-an-assembly-program-with-nasm

Вы также можете обратиться к FASM http://flatassembler.net/, который может напрямую создавать exe.

...