老碼識途

出版時間:2012-8  出版社:電子工業(yè)出版社  作者:韓宏  頁數(shù):344  
Tag標簽:無  

內(nèi)容概要

  本書以逆向反匯編為線索,自底向上,從探索者的角度,原生態(tài)地刻畫了對系統(tǒng)機制的學習,以及相關問題的猜測、追蹤和解決過程,展現(xiàn)了系統(tǒng)級思維方式的淬煉方法。該思維方式是架構師應具備的一種重要素質(zhì)。本書內(nèi)容涉及反匯編、底層調(diào)試、鏈接、加載、鉤子、異常處理、測試驅(qū)動開發(fā)、對象模型和機制、線程類封裝、跨平臺技術、插件框架、設計模式、GUI框架設計等。書中包含不少工業(yè)級或非公開案例。讀者不僅能以底層觀和調(diào)試技巧解決各種實際問題;還可掌握一套學習方法,如“猜測—實證—構建”,調(diào)構學習法。

書籍目錄

"第1章 欲向碼途問大道,鏘鏘bit是吾刀
1.1 全局變量引發(fā)的故事
1.1.1 剖析賦值語句機器碼
1.1.2 修改賦值語句機器碼
1.1.3 直接構建新的賦值語句
1.1.4 小結(jié)
1.2 理解指針和指針強制轉(zhuǎn)換
1.2.1 指針和它丟失的類型信息
1.2.2 指針強制轉(zhuǎn)換
1.3 函數(shù)調(diào)用和局部變量
1.3.1 計算指令中的跳轉(zhuǎn)地址
1.3.2 返回故鄉(xiāng)的準備
1.3.3 給函數(shù)傳遞參數(shù)
1.3.4 函數(shù)獲取參數(shù)
1.3.5 局部變量
1.3.6 返回故鄉(xiāng)
1.3.7 返回點什么
1.3.8 掃尾工作
1.3.9 調(diào)用慣例
1.3.10 函數(shù)指針
1.4 數(shù)組、結(jié)構體
1.4.1 數(shù)組
1.4.2 結(jié)構體
1.5 無法溝通——對齊的錯誤
1.5.1 結(jié)構體對齊
1.5.2 無法溝通
1.6 switch語句的思考
1.6.1 switch機制探索
1.6.2 switch語句一定比if-else語句快嗎
1.6.3 switch的再次優(yōu)化
1.7 關于其他高級語言要素的反匯編學習
1.8 全局變量的疑問——重定位和程序結(jié)構
1.8.1 獨一無二的全局變量?
1.8.2 不變的地址和重定位
1.8.3 動態(tài)鏈接庫中的重定位
1.9 匯編的學習之路——閱讀RTL
1.10 程序設置說明
習題1
第2章 庖丁解“碼”:底層的力量與樂趣
2.1 解密之hello world
2.2 奇怪的死循環(huán)
2.3 我們都犯過的錯——指針的指針
2.4 互通的障礙(跨語種調(diào)用)
2.5 錯誤的目的地
2.6 網(wǎng)絡發(fā)送出錯了
2.7 為什么代碼運行完畢卻出錯
2.8 失效的管道
2.8.1 管道的力量
2.8.2 我要控制Telnet客戶端
2.8.3 不是所有管道都可抽象等價
2.8.4 一動不動的48小時
2.9 異常世界歷險記
2.9.1 學習基礎概念
2.9.2 如何返回
2.9.3 那些狀態(tài)保存到哪里了
2.9.4 意外的秘密
習題2
第3章 成長:與程序一起茁壯
3.1 初寫系統(tǒng)
3.1.1 代碼風格
3.1.2 常量
3.1.3 最簡單的電話簿(1):功能設計和相關庫函數(shù)學習
3.1.4 最簡單的電話簿(2):系統(tǒng)實現(xiàn),分割函數(shù)
3.1.5 空字符結(jié)尾串的警覺
3.1.6 讓程序更有組織性
3.2 有序的世界:可測試與跟蹤的系統(tǒng)
3.2.1 電話簿擴展(1):硬盤結(jié)構體數(shù)組
3.2.2 指針的陷阱
3.2.3 動態(tài)數(shù)組
3.2.4 變化的壓力與出路:重構、單元測試和日志
3.2.5 電話簿擴展(2): 可測試的恩賜
3.3 優(yōu)雅的積木
3.3.1 可復用硬盤數(shù)組
3.3.2 分享它(1):理解編譯鏈接過程
3.3.3 分享它(2):我的丑陋鏈接器
3.3.4 分享它(3):靜態(tài)鏈接庫
3.3.5 分享它(4):動態(tài)鏈接庫
3.3.6 積木的藝術
習 題 3
第4章 讓我們創(chuàng)造面向?qū)ο笳Z言吧
4.1 “封裝”數(shù)據(jù)函數(shù)合一,陳倉暗度this傳遞
4.1.1 那些討厭的事
4.1.2 像芯片一樣工作(1):數(shù)據(jù)合一
4.1.3 像芯片一樣工作(2):行為與數(shù)據(jù)合一
4.1.4 不想讓你傳遞“自己”
4.1.5 創(chuàng)造吧,新的語言
4.1.6 是這樣嗎?我們需要證明
4.2 太麻煩了,需要更簡單的創(chuàng)造與銷毀
4.2.1 創(chuàng)造構造和析構函數(shù)
4.2.2 構造中分配資源,析構中釋放資源
4.3 對比C語言的“對象”和面向?qū)ο?br />4.4 體驗封裝的力量
4.4.1 生死原點,整體資源管理
4.4.2 文件流
4.5 整體資源管理的愛恨
4.5.1 擴展技巧:保證成對出現(xiàn),巧妙的自動線程鎖
4.5.2 美麗的幻影:不可靠的自動析構
4.5.3 隱藏的敵人:不請而至的析構和拷貝構造
4.6 封裝之強化:內(nèi)外之別,親疏之分
4.6.1 私有的誕生
4.6.2 私有?阻止不了我
4.6.3 理解繼承的機制(1):模型
4.6.4 理解繼承的機制(2):在C語言中“玩”繼承
4.6.5 保護的誕生
4.7 “變”的煩惱與出路:創(chuàng)造虛函數(shù)
4.7.1 “三變”之苦:格式化字符串
4.7.2 函數(shù)指針,請帶我走出不斷修改的泥潭
4.7.3 再進一步:做成對象
4.7.4 我們需要性能更好的版本
4.7.5 我們需要新語法,創(chuàng)造虛函數(shù)吧
4.7.6 驗證虛表機制(1):反匯編分析
4.7.7 驗證虛表機制(2):直接用虛表來調(diào)用虛函數(shù)
4.8 虛函數(shù)的那些事兒
4.8.1 理解“=”
4.8.2 純虛函數(shù),從dll導入對象
4.8.3 C語言實現(xiàn)虛函數(shù)
4.8.4 魂歸何處:析構之“虛”
4.8.5 理解運行期類型判斷dynamic_cast
4.9 靜態(tài)覆蓋
4.10 靜態(tài)與非靜態(tài)成員函數(shù)的區(qū)別
4.11 遙遠的風景:管窺 .NET對象
習題4
第5章 底層與抽象的混沌:一個跨平臺線程類的封裝、錯誤與進化
5.1 先學習多線程編程吧
5.1.1 概念
5.1.2 Windows下的線程接口
5.1.3 第一個線程程序
5.1.4 那些復雜的參數(shù)和bug
5.2 簡單、重用,讓我們構造線程類吧
5.2.1 無賴的嘗試,原來是它——static
5.2.2 可愛的virtual和可恨的this
5.2.3 私有、保護、公有、只讀、純虛函數(shù),一個都不能少
5.2.4 析構中釋放資源
5.2.5 我們發(fā)現(xiàn)了一個設計模式
5.2.6 我關心,你通知——我們的第二個設計模式
5.3 跨平臺的線程設計
5.3.1 討厭的Linux版本
5.3.2 源代碼跨平臺技術
5.3.3 跨平臺的版本
5.4 崩潰,哪里出錯了
5.4.1 尋找錯誤
5.4.2 C++下整體資源管理的反思
5.4.3 生生死死虛表誤,剝離策略世界殊——重生
習題5
第6章 插件養(yǎng)成記
6.1 一個修改已有功能的實例
6.2 一個可以動態(tài)添加功能的簡單實例
6.3 一個可以動態(tài)添加功能的復雜實例
6.4 從函數(shù)到插件對象
6.5 delete的災難:誰的書
6.5.1 釋放內(nèi)存的崩潰
6.5.2 解決之道:新生活,各管各
習題6
第7章 天堂的階梯
7.1 遙望天堂,那些美麗與簡潔我向往
7.2 從最基礎開始吧,SDK編寫窗體程序
7.2.1 hello window和基本原理
7.2.2 來個復雜點的窗體程序
7.3 構建我的GUI組件(1):簡單組件
7.4 構建我的GUI組件(2):天堂的機器碼跳板
7.4.1 調(diào)試,我要看清你
7.4.2 我們的自定位代碼
7.4.3 自定位代碼版Button類
7.4.4 自定位代碼版Form類
7.4.5 為什么不錯呢
7.5 構建我的GUI組件(3):更多的組件
7.6 天堂階梯,玩賞框架那如花散落的繁復與如索串珠的簡潔之美
7.7 構建我的GUI組件(4):我的天堂
7.8 他們的天堂
習題7

章節(jié)摘錄

版權頁:   插圖:   那么,登記窗體句柄和處理函數(shù)的對應關系有兩種方法。 ①在窗體描述結(jié)構WNDCLASS中指出。窗體千差萬別,如果讓系統(tǒng)構造一個窗體,需要給系統(tǒng)一份窗體圖紙。該圖紙就是WNDCLASS結(jié)構體,其中有兩個重要的成員變量,一個是DM7—2的第l3行的lpszClassName,標識這份圖紙的名字,例中給定名字為“testwin”。后面構造窗體時,就用這個名字告知系統(tǒng)我們想用哪份圖紙構造,第15行CreateWindow構造窗體,其第1個參數(shù)就是“testwin”,指出了圖紙的名字。要用這份圖紙自然需要將它注冊給系統(tǒng),所以第14行RegisterClass完成了該工作。WNDCLASS結(jié)構體另一個成員是第l2行的lpfnWndProc,指出了窗體處理函數(shù)的地址,指示的函數(shù)就是第1~9行的函數(shù)WndProc()。這種方法指出窗體的處理函數(shù),意味著所有用名為“testwin”的WNDCLASS構造出的窗體都擁有同樣的處理函數(shù),如果構造了多個窗體,如何讓函數(shù)區(qū)分到底當前在處理哪個窗體的消息?DM7—2中,第1行窗體處理函數(shù)的第1個參數(shù)hwnd指出了被處理消息屬于哪個窗體。只要在函數(shù)中用判斷hwnd的不同,即可做出相應處理,這樣一個窗體函數(shù)可被多個窗體共用,卻又能各行其是。 ②第①種方法為某類型窗體指定相同處理函數(shù),這種方法可為某個具體窗體對象指定處理函數(shù)。也就是說,可以用同一個WNDCLASS結(jié)構創(chuàng)建出的窗體擁有各自不同的處理函數(shù)。調(diào)用函數(shù)SetWindowLong()即可,SetWindowLong(hwnd,GWL WNDPROC,(LONG)wndProc)將消息處理函數(shù)指針wndProc設定給句柄hwnd指示的窗體。 消息處理函數(shù)怎樣處理消息?從DM7—2第1行可知,它有4個參數(shù)。第1個已解釋,是接收消息的窗體的句柄。第2個是無符號整數(shù),代表消息類型,如宏WM_PAINT就是重繪消息。從winuser.h中可知,該宏聲明為#defme WM_PAINT 0x000F,即說明十進制數(shù)15代表重繪消息。一個消息可能包含相關參數(shù),則由第3、4個參數(shù)指出,其類型為指針,但很多時候被直接當成整數(shù)。比如,鼠標左鍵按下消息WM_LBUTTONDOWN中,wParam的整數(shù)值代表了此時其他鍵按下的狀態(tài),如MK SHIFT代表鍵盤Shift鍵是否按下。讀者可能會問,如果有2個甚至以上的參數(shù)需要表示怎么辦?系統(tǒng)非常節(jié)約,比如還是WM_LBUTTONDOWN消息,需要包含此時鼠標的坐標x和y,它用1Param的高2字節(jié)代表y,低2字節(jié)代表X。如果還有更多信息呢?因為wParam和lParam都聲明為指針,那么就可以將任何結(jié)構體的指針作為wParam或1Param傳遞即可。這與第5章線程函數(shù)的參數(shù)只接收一個void*類型卻可傳遞任何信息是一樣的。

編輯推薦

《老"碼"識途:從機器碼到框架的系統(tǒng)觀逆向修煉之路》包含不少工業(yè)級或非公開案例,讀者不僅能以底層觀和調(diào)試技巧解決各種實際問題;還可掌握一套學習方法,如“猜測—實證—構建”,調(diào)構學習法。

圖書封面

圖書標簽Tags

評論、評分、閱讀與下載


    老碼識途 PDF格式下載


用戶評論 (總計48條)

 
 

  •   從底倒上,從基礎到系統(tǒng),介紹了一種"猜測-構建-實證"的實踐之路,很好,很適合想真正了解計算機的學生,專業(yè)人士看~~
  •   相對偏底層,結(jié)合反匯編的書看效果好點
  •   確實很好,作者是用了心的。這本書適合修煉內(nèi)功用,相信看后能對系統(tǒng)又一個更深的理解。書中說看這本書不需要匯編語言的知識,但顯然如果能有匯編的知識會更好,特別是32位匯編。
  •   從底層匯編開始講起,慢慢一點點看還是不錯的
  •   程序員枯燥的生活就是要學習一些死的要命的東西,沒法子,機器底層只認一對一翻譯的東西,想偷懶機器不答應。
  •   韓老師叫我買的,簡單看了一下,適合我這種喜歡折騰底層的人
  •   本書十分適合于有一定功底的人看,從底到上,深入理解高級語言,順便深入理解了計算機軟硬件系統(tǒng)。使我對計算機的理解又深了一層
  •   不錯,看軟件調(diào)試之前可以看看次書
  •   從底到上,難得國內(nèi)的好書,很實際。
  •   我老師的書籍,早關注了。看了一段時間,終于還是買了。老師再接再勵。
    對當當意見,以前買了個代碼大全2,看了一年多終于看到后面,發(fā)現(xiàn)有一章少了一百多頁。這么嚴重的問題就給我說超過一年了,不予售后服務。我于是郁悶好久,就不怎么在當當買書好久了。評論我也不喜歡寫。不過還是發(fā)一下吧。別憋著。
  •   仔細看后應該會很有收益,目前就看了第一章,對于非軟件非硬件專業(yè)人來說還是有點難度。
  •   內(nèi)容說不上很精彩,但比起那些抄來抄去的書還是有自己的特色。
  •   書剛看一點,內(nèi)容比較詳細,真的不錯,非常適合。。。。。。
  •   快遞給力,當當給力,剩下的就看自己(看書)給力不給力了。
  •   大概翻了翻。邏輯性挺強的一本書。還沒有細讀。但愿不會失望。
  •   很少能在國內(nèi)見到這這高分量的書籍啦,看完本書,可以對整個軟件環(huán)境有更深一層的認識,強烈推薦大家來看看
  •   這本書我們老師寫的, 寫的很好,推薦~~~//第一次在當當上購物,感覺很棒。東西很快就到了。且比亞馬遜便宜一些。加油當當。
  •   粗略地看了一下,內(nèi)容還行,但沒有特別出彩的地方,沒有讓人眼前一亮的地方,反而有些地方像是在湊字數(shù),趕時間。值不值得買,這個不好評價,見仁見智吧。
  •   很專業(yè)的書籍,老公買的
  •   看了章,對基礎原理講的比較透徹。
  •   正版買了5本平均下來34一本,當當便宜不解釋啊
  •   成電韓老師的著作 頂起…… 成電 妓院 雄起……
  •   這本書挺好的,從機器碼講到上層的框架,計算機的同道們一定不能錯過哦
  •   適合了解底層細節(jié)。
  •   該書的內(nèi)容不錯,學會了很多東西??上У氖?,書中有很多頁印刷的時候疊在一起了,那部分根本看不成。開始沒有發(fā)現(xiàn),前面已經(jīng)用筆畫了,也不好換。 建議大家書到以后大致翻看一下,如果有破損或印刷錯誤好及時更換。
  •   正好用得上,不錯的書。
  •   有作者自己的思想,有看頭.
  •   講得很好,很細,值得一讀
  •   書內(nèi)容很給力,就要看看書的人給不給力了。
  •   這本書是國內(nèi)目前出的少有的好書。大慨看完,作者非常注重實踐,注重自我思考和推導能力的培養(yǎng)。底層實現(xiàn)介紹非常仔細,引導思考,真可謂手把手教了,學習起來很容易。讀完這本書影響最深部分應該是作者介紹C語言一些語句的匯編碼實現(xiàn)分析、C++基于C的面向?qū)ο笏枷胗蓙恚惖膶崿F(xiàn)分析、虛函數(shù)分析,手把手的基本調(diào)試。感慨很多,在學校很少有老師這樣講,知其然,知其所以然。推薦正在學校學習編程的,或者正準備找工作的、或者剛從學校出來的,或者工作了仍然對這些認識不深的人,都來讀讀,絕不會讓你失望。當然,這本書也有他的不好,就是排版不太好。希望后續(xù)版本能把排版好好弄弄。
  •   一般吧 看起來有點亂 不習慣
  •   這本書真心很不錯,我只看了前面,感覺很不錯。
  •   現(xiàn)在看這個有些早了,得有基礎
  •   國內(nèi)難得一見的好書,細致明白,作者應該做過教育
  •   看了一部分,是偏windows的,內(nèi)容的形式感覺就像是韓宏老師寫的技術研究日志一般,呵呵,雖然工作有些年頭了,但從中也能學習些東西。
  •   前幾頁還行,后面看不懂,匯編太復雜了
  •   所謂萬變不離其中,一通百通就是這么來的,研究的很深透!
  •   估計要到一定的經(jīng)驗和水平才能很好地消化或理解其精髓
  •   里面很多頁字跡掉色了,好賤啊
  •   寫的通俗易懂,截圖非常好
  •   實踐方法對程序運行的理解通透!
  •   幫同學買的,他非常喜歡收集計算機的書
  •   好書,值得推薦.朋友推薦的。
  •   書看了一些才來評價的
  •   C程序員的書
  •   很不錯的書,可以看下
  •   成為老馬的捷徑!
  •   也沒全看,剛買了,不好說好壞
 

250萬本中文圖書簡介、評論、評分,PDF格式免費下載。 第一圖書網(wǎng) 手機版

京ICP備13047387號-7