我想用NASM编译Win32可执行文件,但我不知道怎么做。是否有任何必要的标题告诉Windows这个文件是可执行的?
此外,有人可以告诉我Windows如何知道这是表单应用程序还是控制台应用程序?
答案 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下载 源代码。