談Win32彙編
最近接觸到Win32彙編,才知道彙編必須是和平臺相關的,如做應用則和作業系統和CPU型別相關,而做作業系統就只和的CPU型別有關。對於《微機原理》裡面的彙編,那是DOS彙編,而Win32彙編是基於Windows的彙編。DOS和Windows是兩個完全不同的作業系統了。
DOS彙編功能的實現依靠的是DOS系統提供的軟中斷,DOS程式是面向過程的單任務的;而Win32彙編功能的實現依靠的是WinAPI,基本的元素是與具體CPU型別有關的彙編指令(一般都是X86啦,因為微軟就支援這個~~)。然後記住不多的常用X86彙編指令,結合Win32API就可以寫程式了。當然,在什麼程式設計環境下進行呢?一般都市MASM32 SDK,這個目前最新版本是Vison11(我於2014.9.3下載),當然這個和微軟沒多大關係了,是由牛人維護的~~http://www.masm32.com/
當然,在真正開始程式設計時,還要注意一下MASM程式設計格式,嗯,推薦一本好的書籍《琢石成器—Windows 環境下32位組合語言程式設計》
(其實格式並不複雜,語言語法也不復雜,主體還是WinAPI~~不過此時的呼叫API就比較講究了,不是我們在Visual C++裡面那樣呼叫就可以,還要考慮一些,例如返回值過大~~這個就要自己定義一個緩衝區去存放返回值了~~咦,是不是覺得控制程度很高啊~~
學習這個有什麼用?直接用Visual C++IDE,然後用高階語言去寫程式豈不是很省事?《琢石成器》的作者羅雲彬的解釋是,當我們在Windows下進行加密解密、逆向工程,還有病毒、木馬等有害程式碼的分析和防止工作時,Win32彙編是唯一的選擇。(咦,360是會要你的,求才欲渴啊~~)。嗯,某些遊戲的開發估計也用得上(流程是最重要的使用者體驗嘛~~) 嗯,至於我,這個是在調程式碼時很有幫助的,無法正常執行的程式,只能去看他的彙編程式碼了,這個是終極除錯~~
DOS時代的前輩捧著的是《DOS中斷大全》,Windows時代就要備著《Microsoft Win32 Programmer's Reference》了,這個在我這裡有得下載,在其他站點下載的很多是不能正常開啟的~~咦,所以千辛萬苦找到個能用的,也就共享出來了,不用你們去找了。咦~,都是這樣的,作業系統為我們遮蔽了硬體差異,封裝了很多功能,這個是好的,由此帶來的就是我們要捧著它的厚厚的去以它為標準,好好和它磨合著過了~~
說到DOS,那個作業系統是不錯的(咦,windows保留的那個黑乎乎的視窗叫做控制檯(console),並不是MS-DOS作業系統噢,在這個控制檯中有些DOS的指令是無法執行的~~)DOS的好在哪裡?咦,小,40KB左右,呵呵,用在嵌入式~~不過X86架構的嵌入式晶片沒有。好吧,某一天高興了不知能不能用ARM指令來重寫它,讓它在STM32上跑,哈哈,有空,有心情時試試~~(注意,MS-DOS的彙編原始碼微軟是公佈了的,微軟把它捐給了美國的計算機博物館~~這個我也下載了,有興趣的可以連續我,不過哪天我有空了,把它共享出來吧!~)還有一點就是,DOS沒有系統程式碼的保護區,什麼意思呢,就是你可以修改系統程式碼,或者是把自己的程式碼放進系統程式碼裡執行,所有程式具有相同的許可權,可以訪問一切資源,這個就有了程式可以自己修改自身程式碼了~~(老美的科幻電影常有鏡頭不是傳說哈~~),而Win32基於的80386及以上處理器分了優先順序,Windows和Intel合作的吧,Windows運行於0級,即是最高階,可以訪問一切資源,而使用者程式只能是處於最低階,3級,處於這個級別的程式碼有很多限制了,嗯,最重要的是,它只能讀寫變數區,除此之外的都不能寫。~~)
哈哈,就這樣了~~關於Win32彙編的感想就寫到這裡吧,具體去學習,建議大家捧著《琢石成器—Windows 環境下32位組合語言程式設計》區啃吧!(順便說一下,老羅這個人(就是該書的作者啦),是全國首個破壞過電信系統並被捕的黑客哦,咦,技術高深總是耐不住寂寞嗎~~八卦的新聞連結 http://news.xinhuanet.com/newscenter/2002-04/23/content_369622.htm)