(精選)新版WIN32匯編開發(fā)環(huán)境介紹及RadAsm簡明教程_第1頁
(精選)新版WIN32匯編開發(fā)環(huán)境介紹及RadAsm簡明教程_第2頁
(精選)新版WIN32匯編開發(fā)環(huán)境介紹及RadAsm簡明教程_第3頁
(精選)新版WIN32匯編開發(fā)環(huán)境介紹及RadAsm簡明教程_第4頁
(精選)新版WIN32匯編開發(fā)環(huán)境介紹及RadAsm簡明教程_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、寫在前面的話:在準(zhǔn)備做教程的時(shí)候去查資料,關(guān)于WIN32下匯編方面的,本來想找些現(xiàn)成的拿到教程里用下,但發(fā)現(xiàn)貌似只有一篇,是2005年時(shí)jhkdiy寫的,而且翻來翻去發(fā)現(xiàn)所有圖片也都失效了。所以準(zhǔn)備自己寫一個(gè)算了,一勞永逸,還是拿jhkdiy前輩的作品為基礎(chǔ),大量的內(nèi)容都是抄用原文的,只是把已經(jīng)丟失的部分都補(bǔ)上,畢竟大家看那個(gè)內(nèi)容應(yīng)該已經(jīng)習(xí)慣了。正文:現(xiàn)在很多朋友都在學(xué)習(xí)匯編語言,一方面匯編語言是大學(xué)計(jì)算機(jī)課程的必修課,另一方面則是為了從其它語言轉(zhuǎn)到匯編語言來,無論什么原因,我認(rèn)為學(xué)習(xí)匯編語言是件很有趣的事,學(xué)習(xí)它不但可以深入了解編程語言的內(nèi)部表現(xiàn),也是進(jìn)一步了解操作系統(tǒng)的途徑??墒呛芏嗯笥巡?/p>

2、知道匯編語言也可以開發(fā)基于Windows的窗口程序,現(xiàn)在64位CPU都已經(jīng)在應(yīng)用了,而在學(xué)校學(xué)的匯編還是十年前的8086/8088匯編語言,不但是基于Dos環(huán)境的16位匯編語言,而且用于開發(fā)程序的MASM也是不支持32位的。所以很多朋友的感受是在學(xué)校學(xué)了匯編等于沒學(xué),因?yàn)閷W(xué)到的知識(shí)在Windows平臺(tái)上根本用不上或不知如何去用。       有部分朋友原來學(xué)過其它語言,如VB、Delphi、C等等,隨著學(xué)習(xí)的深入而想學(xué)習(xí)匯編語言,因?yàn)閷W(xué)習(xí)加解密和逆向工程匯編是必學(xué)的語言。而且如果是追求程序的高效和靈活的話匯編更是不二之選。 

3、      學(xué)習(xí)匯編語言的基礎(chǔ)不難,難的是怎么用的問題,如何能在Windows環(huán)境下用匯編語言解決一些實(shí)際的應(yīng)用問題正是很多朋友想了解的知識(shí)。這里有必要提一下Win32匯編的編程方式,所謂的Win32Asm就是利用匯編語言來直接調(diào)用Windows系統(tǒng)提供的API函數(shù),其中不加任何限制和封裝。而現(xiàn)在很多語言都或多或少地對API函數(shù)進(jìn)行了封裝,諸如我們熟悉的VC中的MFC就把很多API函數(shù)封裝成類的成員函數(shù),VB就封裝得更厲害了。如果你已經(jīng)有使用API函數(shù)的經(jīng)驗(yàn),如果你已經(jīng)有匯編語言的基礎(chǔ),那么你進(jìn)入Win32Asm只是換個(gè)環(huán)境而已,沒有其它的路障

4、在你面前。那么究竟如何在已有匯編基礎(chǔ)的情況下學(xué)習(xí)Windows環(huán)境的編程呢?有這方面的文章或資料嗎?可以說很少!但都是精品,Win32匯編界公認(rèn)的入門經(jīng)典是Iczelion的Win32匯編教程,網(wǎng)上同時(shí)有它的英文版和中文翻譯版下載,如果找不到的話給個(gè)郵件給我。另外一個(gè)就是國內(nèi)的羅云彬編著的Windows環(huán)境下32位匯編語言程序設(shè)計(jì)網(wǎng)上也有該書的pdf文件下載??墒莾煞N教程都沒有介紹在Windows環(huán)境下的匯編IDE使用,羅云彬的書依然建議用makefile方式來手工編譯程序,而源代碼的編輯則用editplus來做。老實(shí)說,當(dāng)一個(gè)人已經(jīng)熟悉了一種環(huán)境后在另一個(gè)環(huán)境下總會(huì)有所比較,而比較的結(jié)果是:

5、用匯編開發(fā)程序還是這么麻煩,我已經(jīng)習(xí)慣了VB、VC等Windows環(huán)境下的集成開發(fā)環(huán)境,一下子要自己整合編輯、編譯、連接、運(yùn)行、調(diào)試等的工具確實(shí)是一個(gè)不好的開端。難道就沒有一個(gè)類似于Vb、VC的匯編集成開發(fā)環(huán)境嗎?還是那句:很少,但都是精品!最多人使用的莫過于RadAsm了,最新版本是RadASM 2.2.0.3d (09-14-2005),整個(gè)程序很像我們熟知的VB開發(fā)界面,一樣可以像VC那樣用向?qū)Х绞浇⒁粋€(gè)工程。關(guān)鍵字著色、自動(dòng)完成API函數(shù)等,總之在常用開發(fā)環(huán)境下有的功能它都有,沒有的它也有。它支持多種匯編編譯器,目前支持MASM、TASM、NASM、FASM、GoAsm、HLA(Hi

6、gh Level Assembly);還支持多國語言,夠多了吧。另外一個(gè)受人矚目的匯編IDE是WinAsm,最新的版本是WinAsm V5.0.4.142 ,它同樣的是一個(gè)出色的匯編開發(fā)環(huán)境,老實(shí)說,我個(gè)人感覺它和Radasm并沒有很大的區(qū)別,無論是開發(fā)界面和功能上都大同小異。或許造成用戶群的多少只是因?yàn)閭€(gè)人喜好不同而造成的。遺憾的是它目前只有英文版,只支持MASM。還有一個(gè)小有名氣的是Easy Code,最新的版本是Easy Code 1.00.0.0029(9-23-2005),這個(gè)開發(fā)環(huán)境好像是VB環(huán)境的近親,因?yàn)榈谝淮慰吹剿臅r(shí)候以為打開了Vb,實(shí)在太像了。而且它對窗口和控件做過了一定

7、的封裝,如我們知道雙擊在VB窗口中建立的按鈕可以直接跳到該按鈕的代碼編輯行,而這個(gè)Easy Code也有同樣的功能。       前面說的都是國外的IDE,國內(nèi)有沒有呢?有,我目前知道的只有AogoSoft的MASMPLUS,相信很多朋友都知道       值得一提的是,上面介紹的所有開發(fā)環(huán)境都是免費(fèi)的,讓我們真誠地對這些無私奉獻(xiàn)的程序英雄們說聲謝謝吧。       好了,上面介紹了win32Asm的開發(fā)環(huán)境,到底怎

8、么上手呢?我并無意將自己的嗜好強(qiáng)加于各位讀者,但還是建議用RadAsm來入門Win32Asm的IDE,沒有其它原因,只因?yàn)楹唵魏糜枚夜δ軓?qiáng)大,等自己熟悉它之后再試試其它AsmIDE也不遲。令我奇怪的是下載的RadAsm并沒有自帶幫助文件,而要自己單獨(dú)下載,以至于我一開始的時(shí)候更本無法上手,只能慢慢地摸索才知道它的很多的功能。下面我將會(huì)用RadAsm2.2.0.1來介紹RadAsm的簡單使用,更多的功能就等待你去發(fā)掘了。(1)代碼編輯區(qū),所有關(guān)鍵字著色,當(dāng)然配色是可以改的,編輯區(qū)除了有普通文本編輯的功能外,它還有列選擇和過程隱藏功能,例如過程名的最左邊有一個(gè)“”號(hào)的框,可以單擊它來隱藏具體代碼

9、或顯示所有文本。CtrlB進(jìn)行列選擇、CrtlE展開所有的模塊、ShiftF8下書簽。(2)API函數(shù)自動(dòng)檢索,例如鍵入了“SetWindow”后,自動(dòng)列出所有以SetWindow開頭的API函數(shù)。上下鍵進(jìn)行函數(shù)選擇,按下“Tab”鍵自動(dòng)鍵入所選的函數(shù)。(3)下圖這一個(gè)小小框很有用,它完整地列出了API函數(shù)原型,當(dāng)你的鼠標(biāo)在一個(gè)函數(shù)上的時(shí)候它就顯示改函數(shù)的原型。菜單“視圖”>“信息工具”可以顯示或隱藏該窗口。(4)下圖中這是一個(gè)輸出窗口,在編譯程序時(shí)它輸出編譯信息,如果有錯(cuò)的話會(huì)提示那里錯(cuò)了(顯示行號(hào)),錯(cuò)了什么(錯(cuò)誤信息),這里實(shí)質(zhì)是各個(gè)編譯器的輸出信息,因編譯器的不同而不同。菜單“視

10、圖”>“輸出窗口”或 工具欄的圖標(biāo)可以顯示或隱藏該窗口(5)下圖中從左到右3個(gè)按鈕的功能為:1:顯示或隱藏行號(hào);2:展開所有模塊;3:隱藏所有模塊,大家都知道匯編程序通常都很長,動(dòng)不動(dòng)就有千行的代碼,在這么長的代碼中找到一個(gè)函數(shù)模塊并不是一件很快的事,這時(shí)我們就可以利用2、3的功能來方便我們查看代碼(6)下圖這里標(biāo)出了當(dāng)前打開的窗口,可以利用F6瀏覽下一個(gè)窗口,Alt1。9切換到從左數(shù)起的第N個(gè)窗口,例如圖中只有2個(gè)窗口,則可以按下Alt1切換到從左邊數(shù)起的第一個(gè)窗口。(7)下圖這是工程管理窗口,每建立一個(gè)程序都有一個(gè)工程文件,將代碼文件和資源文件分開管理,類似于VB的工程管理窗口。在這

11、里可以為工程添加和刪除文件或資源。(8)下圖這是工程屬性窗口,如果當(dāng)前在編輯代碼,則它列出代碼中的所有函數(shù)名,雙擊列表中的函數(shù)名可以直接跳到該函數(shù)的首行。如果要查看代碼中有那些常數(shù)定義和結(jié)構(gòu)定義可以其上的下拉列表框中選擇。(9)這四個(gè)按鈕就是:編譯、構(gòu)建、運(yùn)行、構(gòu)建并運(yùn)行按鈕。編譯按鈕只編譯代碼文件,不編譯資源文件;構(gòu)建按鈕則同時(shí)編譯匯編文件、資源文件、和進(jìn)行連接成Exe文件;運(yùn)行按鈕不用介紹了吧。構(gòu)建并運(yùn)行按鈕則一次搞定所有的工作:編譯代碼文件、連接obj文件和Res文件、如果其中沒錯(cuò)的話則運(yùn)行程序,如果任何一項(xiàng)有錯(cuò)都會(huì)停止而提示錯(cuò)誤信息。幾個(gè)快捷鍵是:ShiftF5   

12、;              編譯資源文件(即編譯Rc文件為Res文件)F5                         編譯ASM文件AltCtrlF5          連接文件AltShiftF5       

13、  構(gòu)建AltF5                    編譯、連接、運(yùn)行CtrlShiftF5         運(yùn)行程序RadAsm安裝和配置現(xiàn)在對RadAsm應(yīng)該有一點(diǎn)認(rèn)識(shí)了吧,下面介紹RadAsm的安裝和環(huán)境的配置問題,本節(jié)的最后用一個(gè)簡單的小程序來測試我們的IDE是否配置妥當(dāng)。呵呵,其實(shí)RadAsm根本不用安裝,下載到的是一個(gè)壓縮包,直接把它解壓縮到一個(gè)文件夾中就可以了

14、,為了講解的方便,我以自己的配置為例:系統(tǒng)是Win2000-Pro,RadAsm的版本是2.2.0.1,我把RadAsm解壓縮到F:Asm RadASM22en 文件夾中;匯編編譯器為Masm32V8.2, 下載后也是一個(gè)自解壓文件,我把它解壓到F:Asmmasm32 文件夾中。如果你下載了RadAsm的語言包,則可以把它解壓到RadAsm22en 文件夾中。好了,安裝RadAsm就是這樣簡單的了,基本上沒什么注意的地方?,F(xiàn)在講講RadAsm的配置,進(jìn)入RadAsm22en 文件夾,運(yùn)行RadAsm.exe 。如果打開后是英文界面而你又想使用中文,則可以通過菜單:選項(xiàng)語言選項(xiàng) 選擇“簡體中文”

15、,然后單擊“Ok”按鈕來切換到中文界面:下面的講解都會(huì)以中文界面為準(zhǔn),雖然這樣做有可能會(huì)因?yàn)楦髦形姆g有所不同而造成中文顯示不同,但相信大家都能理解其中的意思。       我們首要的任務(wù)是配置MASM32,單擊菜單 選項(xiàng)à路徑設(shè)置,在彈出的對話框中即可設(shè)置匯編編譯器的路徑:最重要的是設(shè)置好masm32的路徑,只要該路徑設(shè)置好,整個(gè)開發(fā)環(huán)境就可以立即工作了??梢奟adAsm的安裝和配置都很簡單,為了驗(yàn)證我們配置的環(huán)境能否正常工作,下面做一個(gè)只顯示一個(gè)對話框的程序來進(jìn)行測試。單擊菜單 文件à新建文件 或按快捷鍵 Ct

16、rlN,在代碼編輯窗口中鍵入如下的代碼:(注意大小寫敏感)完成后我把代碼保存為F:backupDoctest.asm,然后再單擊菜單 構(gòu)建。如果大家還記得的話,就知道這是編譯、連接、運(yùn)行一次搞定的選項(xiàng),當(dāng)編譯器路徑?jīng)]有配置錯(cuò)誤,程序即會(huì)進(jìn)行編譯、連接和運(yùn)行。至于匯編代碼我就不解析了,也不是本教程的范圍。如果編譯期間發(fā)生了錯(cuò)誤,則可以在輸出窗口中查看錯(cuò)誤提示,一般第一次的錯(cuò)誤都是沒有設(shè)置好Masm32的路徑。如果沒錯(cuò)的話RadAsm會(huì)顯示整個(gè)編譯和連接的過程,如上面的程序就輸出如下信息:F:Asmmasm32BinML.EXE /c /coff /Cp /nologo /I"F:Asm

17、masm32Include" "F:backupDoctest.asm"       Assembling: F:backupDoctest.asmF:Asmmasm32BinLINK.EXE /SUBSYSTEM:WINDOWS /RELEASE /VERSION:4.0 /LIBPATH:"F:Asmmasm32Lib" "F:backupDoctest.obj" Microsoft (R) Incremental Linker Version 5.12.807

18、8Copyright (C) Microsoft Corp 1992-1998. All rights reserved.Executing:       "F:backupDoctest.exe"Make finished.Total compile time 1693 ms可以從上面的示例知道,用RadAsm集成開發(fā)環(huán)境一點(diǎn)也不比那些高級語言的IDE遜色,用RadAsm也比自己手工編輯makefile要簡單的多,用它來練習(xí)Iczelion和羅云彬的教程是很不錯(cuò)的選擇。RadAsm開發(fā)標(biāo)準(zhǔn)窗口程序開發(fā)窗口程序主要

19、有兩種方式,一種是創(chuàng)建標(biāo)準(zhǔn)的窗口程序,這過程需要先填充WNDCLASSEX結(jié)構(gòu),然后則是注冊窗口創(chuàng)建窗口顯示窗口進(jìn)入消息循環(huán)對消息進(jìn)行處理;另一種更為常用的是基于對話框的窗口,這種方式首先建立資源文件,資源包括對話框、各類標(biāo)準(zhǔn)控件、圖標(biāo)、光標(biāo)、BMP文件等,如果用過Vc的朋友就一定不會(huì)陌生了,建立好資源后將資源編譯成RES文件,然后在程序中使用各種資源,這種方式的好處是省去了建立標(biāo)準(zhǔn)窗口的步驟,而且對話框也是與用戶進(jìn)行交互的主要工具,程序員也可以集中關(guān)注程序功能而不必花太多時(shí)間在界面上。這一節(jié)主要講怎樣利用RadAsm建立工程,編寫標(biāo)準(zhǔn)的窗口程序。為了更直觀地講解RadAsm的使用,我們將建立

20、一個(gè)基于對話框的RadAsm程序的工程。你將會(huì)看到,除了單擊下一步外,剩下需要做的只是粘貼代碼,按一下工具欄上的“go all”按鈕來編譯、連接、運(yùn)行程序。一切將會(huì)簡單而易行。好了,我們現(xiàn)在打開RadAsm,單擊菜單 文件新建工程,在彈出的對話框中設(shè)置好工程名和工程的類型,如下圖所示:由于工程類型的選擇影響到整個(gè)程序的編譯和連接,所以大家在選擇時(shí)不可以隨便選一個(gè)類型就完事了。下面列出幾個(gè)常用的工程類型:1:如果要開發(fā)一個(gè)帶有資源的標(biāo)準(zhǔn)窗口程序,則選擇Win32App類型,   假如程序要用到對話框、圖標(biāo)、菜單、快捷鍵等的話就應(yīng)該選擇這個(gè)類型。2:如果要開發(fā)一個(gè)沒有資源的標(biāo)準(zhǔn)

21、窗口程序,則選擇Win32App(No Resource) 類型,一般不用資源的情況很少,但本節(jié)用來測試的例子就是一個(gè)沒有資源的標(biāo)準(zhǔn)窗口程序。3:如果要開發(fā)一個(gè)Windows下的控制臺(tái)程序,則應(yīng)選擇Console APP 。4:如果只開發(fā)一個(gè)Dll,則應(yīng)選擇Dll project類型。設(shè)置好后單擊“下一步”按鈕;現(xiàn)在程序問你是否使用模板,這要看具體做什么程序了,如建立標(biāo)準(zhǔn)窗口程序可以使用“WIN32EXE.tpl”模板,對話框程序可以使用“DialogApp.tpl”模板。當(dāng)然可以不使用模板,我們現(xiàn)在就這么做,在模板選項(xiàng)中單擊“None”選項(xiàng),然后單擊“下一步”按鈕。來到這里我們可以設(shè)置需要那

22、些類型的文件和文件夾,當(dāng)然,“ASM”文件是必選的,其它有用的選項(xiàng)我們在講解對話框程序時(shí)再述。再次單擊“下一步”按鈕,設(shè)置如上圖所示。好了,大家都可以看到工程向?qū)У竭@里就完成了,單擊“完成”按鈕吧?,F(xiàn)在工程就建立完成了,是不是很容易?嗯!現(xiàn)在看看開發(fā)窗口右邊的工程管理器窗口,我們剛才建立的工程生成了一個(gè)“Test.Asm”文件,該文件就是主代碼文件了,我們可以雙擊它來打開代碼編輯窗口:現(xiàn)在把代碼粘貼過來,如果格式不好自己再整理一下;考慮到有些朋友手頭上暫時(shí)沒有該例子的代碼,沒有的朋友可以直接復(fù)制下面的文本到RadAsm的代碼編輯窗口中:.constIDD_DLG_MAIN  

23、; equ 1000IDC_EDT_OUTPUT   equ 1003IDC_EDT_FIRST   equ 1001IDC_EDT_SECOND   equ 1002IDC_BTN_OUTPUT   equ 1007IDC_BTN_EXITAPP   equ 1008.data       szExitApp db   "你真的要退出程序嗎?",0    

24、   szTitle   db   "對話框程序",0       ;將兩個(gè)字符串合并為一個(gè)的格式化字符串。       szFormat   db   "%s%s", 0       hInstance dd   ?   

25、60; ;程序?qū)嵗浔?#160;     .codeDlgProc proc uses ebx esi edi hwnd, uMsg, wParam, lParam             ;定義了三個(gè)局部數(shù)組,類型均為字節(jié)型       LOCAL szBuffer1256:byte       LOCA

26、L szBuffer2256:byte       LOCAL szOutputBuf512:byte             mov       eax, uMsg       .if    eax = WM_INITDIALOG   &

27、#160;            ;這里編寫窗口初始化的代碼,下面是將三個(gè)局部數(shù)組清零              invoke RtlZeroMemory, addr szBuffer1, sizeof szBuffer1           

28、60;  invoke RtlZeroMemory, addr szBuffer2, sizeof szBuffer2              invoke RtlZeroMemory, addr szOutputBuf, sizeof szOutputBuf             .elseif eax = WM_COMMAND &

29、#160;            mov       eax, wParam              .if   ax = IDC_EDT_FIRST          

30、0;          ;這里編寫處理第一個(gè)文本框的代碼              .elseif    ax = IDC_EDT_SECOND                 &

31、#160;   ;這里編寫處理第二個(gè)文本框的代碼              .elseif    ax = IDC_BTN_OUTPUT                     ;先獲取兩個(gè)文本框的文本,分別保存在szB

32、uffer1和szBuffer2中                     ;然后通過格式化函數(shù)wsprintf將兩個(gè)文本合并,最后輸出到第三個(gè)文本框中。                     in

33、voke GetDlgItemText, hwnd, IDC_EDT_FIRST, addr szBuffer1, sizeof szBuffer1                     invoke GetDlgItemText, hwnd, IDC_EDT_SECOND, addr szBuffer2, sizeof szBuffer2    

34、0;                invoke wsprintf, addr szOutputBuf, addr szFormat, addr szBuffer1, addr szBuffer2                     invoke

35、 SetDlgItemText, hwnd, IDC_EDT_OUTPUT, addr szOutputBuf              .elseif    ax = IDC_BTN_EXITAPP                    

36、 invoke SendMessage, hwnd, WM_CLOSE, 0, 0              .endif       .elseif    eax = WM_CLOSE              ;這里處理程序退出代碼 &

37、#160;            invoke MessageBox, hwnd, addr szExitApp, addr szTitle, MB_ICONQUESTION or MB_YESNO              .if    al = IDYES      

38、;               invoke EndDialog, hwnd, NULL              .endif      .else           

39、;   mov       eax, FALSE              ret       .endif       mov       eax, TRUE       retDlgProc endp;程序入口點(diǎn)start:  

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論