2015-10-20 31 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

相關問題