走近彙編理解與核心程式設計

2021-08-22 20:22:25 字數 2191 閱讀 5809

走近彙編理解與核心程式設計

2023年,我工作時的座位坐在wowocock旁邊。wowocock寫**的時候**風格一團糟。滿篇都是混亂型的命名、超級跨全工程的全域性變數,詭異的跳轉。而且屢教不改。但是調程式卻很牛,開著windbg,基本上不用看原始碼,也知道發生了什麼。

因為不用看原始碼,所以看windows核心原有的**和看自己的**基本沒有太大的區別,只要別跟太遠。這樣就獲得了遠遠超出一般只能看懂c語言的程式設計師的能力。許多問題沒有前人的指點也可以自己解決。而且能做出很多別人做不出來的事來。

有時候碰到一些問題,比如說在windowsxp有,但是windows2000下沒有的呼叫。一般人也就直接放棄了。但是他卻會自己去跟蹤了xp下呼叫的實現,然後在2000下寫乙個替代品出來。其實在安全軟體領域,反彙編、自己patch、和crack早已經大行其道。無論你站在**破壞的一方,還是站在正義安全的一方,都不得不這樣做。因為應用層病毒的時代早就過去了,rootkit的時代到來了。

這裡涉及的到其實是乙個理解偵錯程式裡的組合語言的能力的問題。你可以覺得那些rootkit牛人的技術有多強,他們知道很多對你來說聞所未聞的東西。但是實際上他們也可以對你說這其實很簡單。因為答案就在偵錯程式視窗裡的那堆彙編裡。

雖然我大學畢業的時候已經是2023年,但是大學裡的組合語言教材卻還停留在8086階段。無法理喻這種落後性。從實模式程式設計到保護模式程式設計是乙個飛躍,這個過程在從dos進化到windows9x的時候就已經發生。然而我在大學期間裡卻只學到了實模式的程式設計,以簡單的觀念看待x86的cpu,甚至不知道ring0和ring3的切換,本質也就是不知道應用與核心的區別。

實際上大部分程式設計師都是如此。很可能一生都不會再次去接觸那一堆組合語言。當程式崩潰偵錯程式崩出來一堆非c語言的東西,那些只是天書而已。當場關閉然後回頭去猜測問題可能出現在**。如果猜不出來,那麼就可以放棄了。其實原因並不是因為我們懶惰,而是因為我們所學的東西沒有實際用途。一件好東西如果沒有用,就像是屠龍寶刀,如果沒有龍可以屠,那就只是廢鐵一塊。顯然很少有人再去寫實模式下的程式了(更何況是彙編)。而我們急需要做的事情,又不是我們所學能解決得了的。

很多朋友很想學習核心程式設計。因為這聽起來更酷。是真的。這很有趣,而且又可以好好的複習一下組合語言,讓廢鐵重新變成寶刀,那何樂而不為呢。核心程式設計和應用程式設計的區別在於,核心總是執行在複雜的條件下。乙個應用程式只要在自己的程序空間內放心大膽的跑就行了。就算出一點問題,程式崩潰了,問題當然是在這個程序之中了。讓我們甕中捉鱉吧。核心則不同。核心的**可能執行在系統中所有的程序和執行緒環境下。而且是同時的。核心模組之間互相呼叫,和硬體互動。等待中斷,發出指令讓cpu進行種種「熱身」。當問題發生,作業系統將會崩潰。windbg將會向您展示真正的天書,記載著windows在最後崩潰瞬間的狀況。ok,我們不是ms的程式設計師,不可能看到秒鐘在停止前指向某一行c語言**。唯一值得慶幸的是:它們曾今是c語言**,只是經過編譯了。

學習了wowowock多年的除錯經驗,我和他合寫了那本在網上流傳的《天書夜讀》。我個人感覺彙編在應用程式的程式設計中作用不大。因為應用程式設計環境相對簡單,而且**規模巨集大得多。而核心往往是小巧而精緻的。期望只懂c語言就搞定自己編寫的核心模組中的bug顯得不太現實。當然我不排除有這樣的可能。但是當我們寶刀在手,windows核心的天書直接向我們放開閱讀時,還有什麼能難得住我們的呢?我非常感謝博文視點的朋友,最終將《天書夜讀:從組合語言到windows核心程式設計》正式出版。相信更多的程式設計師同行和愛好者,會因此開啟全新視野的大門。

上述文字由《天書夜讀:從組合語言到windows核心程式設計》作者 譚文 提供

【書 名】天書夜讀:從組合語言到windows核心程式設計

【作 者】 譚文,邵堅磊 著

【isbn】 978-7-121-07339-7

【出版社】 電子工業出版社

【出版日期】2023年12月

【宣傳語】

從貌似天書的彙編**中,一探windows底層的核心實現。

在開發中出現的問題,能從windows自身找到答案!

【內 容 簡 介】

本 書從基本的windows程式與彙編指令出發,深入淺出地講解了windows核心的程式設計、除錯、閱讀,以及自行探索的方法。讀者在使用c/c++開發 windows程式的基礎上,將熟練掌握彙編和c語言的應用,深入了解windows底層,並掌握閱讀windows核心的基本方法,以及windows 核心的基本程式設計方法。

本書適合使用c/c++在windows上程式設計的讀者,尤其適合希望加深自己技術功底的windows應用程式設計師、計算機專業的有志於軟體開發的大中院校學生;專業的windows核心程式設計師,亦可從本書得到超越一般核心程式開發的啟發。

走近彙編理解與核心程式設計

2006年,我工作時的座位坐在wowocock旁邊。wowocock寫 的時候 風格一團糟。滿篇都是混亂型的命名 超級跨全工程的全域性變數,詭異的跳轉。而且屢教不改。但是調程式卻很牛,開著windbg,基本上不用看原始碼,也知道發生了什麼。因為不用看原始碼,所以看windows核心原有的 和看自己的...

走近彙編理解與核心程式設計

走近彙編理解與核心程式設計 2006年,我工作時的座位坐在wowocock旁邊。wowocock寫 的時候 風格一團糟。滿篇都是混亂型的命名 超級跨全工程的全域性變數,詭異的跳轉。而且屢教不改。但是調程式卻很牛,開著windbg,基本上不用看原始碼,也知道發生了什麼。因為不用看原始碼,所以看wind...

組合語言程式設計 利用c語言快速理解彙編)

二 資料定址方式 指令執行的操作 加減,傳送 指令操作的資料 mov 操作碼用於資料傳送,功能,將資料從乙個位置傳送到另乙個位置 mov dest,src 相當於c語言的賦值語句 dest srcsrc 表示要傳送的資料或者資料所在的位置 dest 表示資料將要傳送到的位置 將暫存器ebx傳送到ea...