我想使用NASM編譯Win32可執行文件,但我不知道如何。是否有任何必要的標題告訴Windows這個文件是可執行的?編譯與NASM的Windows可執行文件
另外,誰能告訴我Windows如何知道這是一個表單應用程序或控制檯應用程序?
我想使用NASM編譯Win32可執行文件,但我不知道如何。是否有任何必要的標題告訴Windows這個文件是可執行的?編譯與NASM的Windows可執行文件
另外,誰能告訴我Windows如何知道這是一個表單應用程序或控制檯應用程序?
問題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下載爲 源代碼。
你檢查[文件](http://www.nasm.us/xdoc/2.11.08/html/nasmdoc0.html)? –
不,閱讀起來太長了:) –
並且_「nasm win32 tutorial」_太長以致無法輸入搜索引擎? – Michael