2015-10-20 34 views
-3

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

另外,谁能告诉我Windows如何知道这是一个表单应用程序或控制台应用程序?

+1

你检查[文件](http://www.nasm.us/xdoc/2.11.08/html/nasmdoc0.html)? –

+0

不,阅读起来太长了:) –

+1

并且_“nasm win32 tutorial”_太长以致无法输入搜索引擎? – Michael

回答

3

问题1:

我想编译的Win32可执行文件使用NASM,但我不知道怎么 。

编译:

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知道这是一个形式 应用程序或控制台应用程序?

阅读:

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

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

来源:Difference between Windows and Console application

相关问题