我目前正在學習arkane彙編語言藝術。
我寫了顯示一個對話框(在Windows 8.1)的程序。 我檢查了msdn參考並找出如何更改所述對話框的光學和行爲。我還了解了返回值的存儲位置以及如何讀取它。所以我的問題不是那種「幫我卡住」。
看看這個小對話框程序:
.386
.model flat, stdcall
includelib "C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x86\user32.lib"
includelib "C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x86\kernel32.lib"
MessageBoxA PROTO :DWord, :DWord, :DWord, :DWord
ExitProcess PROTO :DWord
.data
Caption db "Masm shizzle",0
Text db "Click OK my friend",0
.code
start:
push 11h
push OFFSET Caption
push OFFSET Text
push 0
call MessageBoxA
push 0
call ExitProcess
end start
這工作就像一個魅力,我想通了如何參數需要在堆棧上進行訂購。
我又試圖提高代碼,並使其更具可讀性和更清潔的,所以我打破了.CODE段到:
.code
start:
invoke MessageBoxA, 0, addr Text, addr Caption, 11h
invoke ExitProcess, 0
end start
然後我絆了那宣佈你這樣做可能會使代碼更易讀網頁通過在「windows.inc」的幫助下使用符號名稱。 它說那裏我甚至不需要寫functionA(ANSI)。
所以invoke調用是這樣的:
invoke Messagebox, NULL, addr Text, addr Caption, MB_ICONINFORMATION
的問題是,這些符號名是從MASM32包,從「windows.inc」更具體。
雖然我基本上不反對使用masm32,但我想知道是否在只有Visual Studio安裝的「standart」Windows主機上有相同的文件,我可以使用它。
具體而言,如果我想運行(甚至編譯)上的遠程mashine這個代碼,我不能假設有一個主機上存在的MASM32安裝,所以包括將指向無處迴歸。 (我的理解,或者是打包成可執行文件,如果我預編譯嗎?)
如果這是不可能沒有MASM32,那麼我想我需要寫一個符號名庫....
的'windows.inc'文件只需要在代碼組裝存在,而不是當它運行。如果最終用戶想重新編譯代碼,他們將需要MASM32來完成。 (或者兼容的第三方彙編程序,但是這樣的彙編程序應該提供它自己的include文件版本。)所以我認爲你沒有問題。 –
感謝您爲此帶來了一些清晰的內容。所以我想我只是預編譯我應該需要的所有版本。爲了完善,有沒有一個微軟等同於這個文件? – clockw0rk
其實我沒有意識到MASM32是第三方軟件包。我不知道是否有微軟的等價物,大概不是。根據授權,您可能只需將相關內容直接複製到您的源代碼中即可。 –