小智 9
问题 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 如何知道这是表单应用程序还是控制台应用程序?
读这个:
从技术角度来说,控制台和 Windows 可执行文件之间的唯一区别是 exe 文件的 PE 标头中的一个字节。手动切换该字节(例如使用十六进制编辑器)转换应用程序类型。这是一个发布良好的 hack,用于在 VB6 中创建控制台应用程序(未明确支持此类应用程序)。
要确定和更改应用程序的子系统类型,您需要阅读部分 PE 标头。但是子系统数据的地址不是固定的,因为它是可选文件头的一部分,其位置由存储在 DOS 文件头(在成员 e_lfanew 中)中的地址确定。该地址实际上指向 _IMAGE_NT_HEADERS 记录,该记录又包含 IMAGE_OPTIONAL_HEADER32 结构。它有一个名为 Subsystem 的 int161) 成员。该成员的值为 Windows 应用程序的 2 和控制台应用程序的 3。存在其他子系统(特别是 POSIX 和内核)。我编写了一个小的 VB6 应用程序来更改应用程序的子系统,它可以作为源代码从 ActiveVB 下载。
归档时间: |
|
查看次数: |
6847 次 |
最近记录: |