使用NASM编译Windows可执行文件

时间:2015-10-20 22:18:32

标签: windows assembly x86 nasm

我想用NASM编译Win32可执行文件,但我不知道怎么做。是否有任何必要的标题告诉Windows这个文件是可执行的?

此外,有人可以告诉我Windows如何知道这是表单应用程序还是控制台应用程序?

1 个答案:

答案 0 :(得分:4)

问题1:

  

我想用NASM编译Win32可执行文件,但我不知道   如何。

<强> 编译:

nasm -f win32 test.asm -o test.o

ld test.o -o test.exe

来源: http://ccm.net/faq/1559-compiling-an-assembly-program-with-nasm

问题2:

  

是否有任何必要的标题告诉Windows这个文件   可执行?

文件扩展名表示可执行文件。通过读取此文件的PE文件结构,“Windows”能够获取正确加载和执行文件所需的所有信息。

问题3:

  

此外,任何人都可以告诉我Windows如何知道这是一个表单   应用程序或控制台应用程序?

阅读本文:

  

在更技术性的说明中,控制台和a之间的唯一区别   Windows可执行文件是exe文件的PE头中的一个字节。   手动切换此字节(例如使用十六进制编辑器)转换   申请类型。这是一个用于创建的发布良好的hack   VB6中的控制台应用程序(此类应用程序不是   明确支持)。

     

要确定和更改应用程序的子系统类型,您需要   读取PE头部分。子系统数据的地址是   虽然没有修复,因为它是可选文件头的一部分   位置由存储在DOS文件头中的地址确定(in   成员e_lfanew)。这个地址实际上指的是   _IMAGE_NT_HEADERS记录,其中包括IMAGE_OPTIONAL_HEADER32结构。这有一个名为int161)的成员   子系统。对于Windows应用程序,成员的值为2,对于Windows应用程序,值为3   控制台应用程序。存在其他子系统(特别是POSIX   和内核)。我写了一个小的VB6应用程序来改变它   应用程序的子系统,可以从ActiveVB下载   源代码。

来源: Difference between Windows and Console application