0

我在这里问了一个关于汇编语言的问题。我觉得很难使用 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

但是我不能在 Ollydbg 中使用创建的 COM 文件。所以如果我想改变这个程序在win xp或win 7下工作,这样我就可以使用Ollydbg,我必须做哪些改变,为什么?我的想法 :

  1. 我想我必须更改 ORG 0x100。我认为它特定于 COM 文件。所以我想知道,我应该在这里做些什么改变?COM 文件不能在 win XP 和 win 7 上运行吗?我可以制作 EXE 文件而不是 COM 文件吗?我只是想了解这个过程。

  2. 我必须更改倒数第二行,因为它用于告诉 DOS 程序已完成。我必须在这里做哪些改变,为什么?

  3. 我忘了为什么使用最后一行?任何人都可以告诉我,如果需要替代它?

4

1 回答 1

1

我认为,NASM 不能直接生成 EXE。您需要将 ASM 编译为目标文件,然后使用一些链接器(例如 MinGW 包中的 ld.exe)链接。

在代码中,您将需要创建过程而不是内联代码 (WinMain)。

代码:

mov ax, 0x4c00 
int 0x21

将被从过程返回(或从 kernel32.dll 调用函数)替换。

这可以帮助(一点): http ://en.kioskea.net/faq/1559-compiling-an-assembly-program-with-nasm

您还可以查看能够直接构建 exe的 FASM http://flatassembler.net/ 。

于 2011-09-11T13:19:06.993 回答