我问了一个关于汇编语言here的问题。我觉得很难使用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,我必须做些什么改变?为什么? 我的想法:
我想我必须改变ORG 0x100。它特定于我认为的COM文件。所以我想知道,我应该在这里做些什么改变? COM文件不能在win XP和win 7上运行吗?我可以制作EXE文件而不是COM文件吗?我只是想了解这个程序。
我必须更改第二行,因为它用于告诉DOS程序已完成。我必须做些什么改变?为什么?
我忘了为什么要使用最后一行?任何人都可以告诉我,如果需要替代它吗?
答案 0 :(得分:1)
我认为,NASM无法直接生成EXE。 您需要将ASM编译到目标文件中,然后链接到某个链接器(例如,来自MinGW包的ld.exe)。
在代码中,您需要创建过程而不是内联代码(WinMain)。
代码:
mov ax, 0x4c00
int 0x21
将替换为从procedure返回(或从kernel32.dll调用函数)。
这可以帮助(一点点): http://en.kioskea.net/faq/1559-compiling-an-assembly-program-with-nasm
您还可以查看能够直接构建exe的FASM http://flatassembler.net/。