老碼識途

老碼識途

《老碼識途》是2012年8月電子工業出版社出版的圖書,作者是韓宏。本書以逆向反彙編為線索,自底向上,從探索者的角度,原生態地刻畫了對系統機制的學習,以及相關問題的猜測、追蹤和解決過程,展現了系統級思維方式的淬鍊方法。

內容介紹

該思維方式是架構師應具備的一種重要素質。《老"碼"識途:從機器碼到框架的系統觀逆向修煉之路》內容涉及反彙編、底層調試、連結、載入、鉤子、異常處理、測試驅動開發、對象模型和機制、執行緒類封裝、跨平台技術、外掛程式框架、設計模式、GUI框架設計等。

作品目錄

第1章 欲向碼途問大道,鏘鏘bit是吾刀 1
1.1 全局變數引發的故事 2
1.1.1 剖析賦值語句機器碼 2
1.1.2 修改賦值語句機器碼 6
1.1.3 直接構建新的賦值語句 7
1.1.4 小結 10
1.2 理解指針和指針強制轉換 11
1.2.1 指針和它丟失的類型信息 11
1.2.2 指針強制轉換 13
1.3 函式調用和局部變數 15
1.3.1 計算指令中的跳轉地址 15
1.3.2 返回故鄉的準備 16
1.3.3 給函式傳遞參數 17
1.3.4 函式獲取參數 18
1.3.5 局部變數 20
1.3.6 返回故鄉 20
1.3.7 返回點什麼 23
1.3.8 掃尾工作 28
1.3.9 調用慣例 30
1.3.10 函式指針 31
1.4 數組、結構體 34
1.4.1 數組 34
1.4.2 結構體 35
1.5 無法溝通——對齊的錯誤 37
1.5.1 結構體對齊 37
1.5.2 無法溝通 41
1.6 switch語句的思考 44
1.6.1 switch機制探索 45
1.6.2 switch語句一定比if-else語句快嗎 50
1.6.3 switch的再次最佳化 50
1.7 關於其他高級語言要素的反彙編學習 54
1.8 全局變數的疑問——重定位和程式結構 54
1.8.1 獨一無二的全局變數? 54
1.8.2 不變的地址和重定位 56
1.8.3 動態程式庫中的重定位 64
1.9 彙編的學習之路——閱讀RTL 68
1.10 程式設定說明 76
習題1 76
第2章 庖丁解“碼”:底層的力量與樂趣 79
2.1 解密之hello world 80
2.2 奇怪的死循環 83
2.3 我們都犯過的錯——指針的指針 85
2.4 互通的障礙(跨語種調用) 87
2.5 錯誤的目的地 90
2.6 網路傳送出錯了 91
2.7 為什麼代碼運行完畢卻出錯 93
2.8 失效的管道 96
2.8.1 管道的力量 97
2.8.2 我要控制Telnet客戶端 101
2.8.3 不是所有管道都可抽象等價 101
2.8.4 一動不動的48小時 103
2.9 異常世界歷險記 112
2.9.1 學習基礎概念 112
2.9.2 如何返回 113
2.9.3 那些狀態保存到哪裡了 117
2.9.4 意外的秘密 120
習題2 127
第3章 成長:與程式一起茁壯 131
3.1 初寫系統 132
3.1.1 代碼風格 132
3.1.2 常量 133
3.1.3 最簡單的電話簿(1):功能設計和相關庫函式學習 134
3.1.4 最簡單的電話簿(2):系統實現,分割函式 141
3.1.5 空字元結尾串的警覺 143
3.1.6 讓程式更有組織性 144
3.2 有序的世界:可測試與跟蹤的系統 146
3.2.1 電話簿擴展(1):硬碟結構體數組 146
3.2.2 指針的陷阱 148
3.2.3 動態數組 149
3.2.4 變化的壓力與出路:重構、單元測試和日誌 151
3.2.5 電話簿擴展(2): 可測試的恩賜 155
3.3 優雅的積木 155
3.3.1 可復用硬碟數組 155
3.3.2 分享它(1):理解編譯連結過程 161
3.3.3 分享它(2):我的醜陋連結器 167
3.3.4 分享它(3):靜態程式庫 173
3.3.5 分享它(4):動態程式庫 175
3.3.6 積木的藝術 178
習 題 3 182
第4章 讓我們創造面向對象語言吧 185
4.1 “封裝”數據函式合一,陳倉暗度this傳遞 186
4.1.1 那些討厭的事 186
4.1.2 像晶片一樣工作(1):數據合一 187
4.1.3 像晶片一樣工作(2):行為與數據合一 188
4.1.4 不想讓你傳遞“自己” 189
4.1.5 創造吧,新的語言 190
4.1.6 是這樣嗎?我們需要證明 191
4.2 太麻煩了,需要更簡單的創造與銷毀 194
4.2.1 創造構造和析構函式 194
4.2.2 構造中分配資源,析構中釋放資源 197
4.3 對比C語言的“對象”和面向對象 199
4.4 體驗封裝的力量 201
4.4.1 生死原點,整體資源管理 201
4.4.2 檔案流 203
4.5 整體資源管理的愛恨 204
4.5.1 擴展技巧:保證成對出現,巧妙的自動執行緒鎖 204
4.5.2 美麗的幻影:不可靠的自動析構 205
4.5.3 隱藏的敵人:不請而至的析構和拷貝構造 206
4.6 封裝之強化:內外之別,親疏之分 209
4.6.1 私有的誕生 209
4.6.2 私有?阻止不了我 210
4.6.3 理解繼承的機制(1):模型 211
4.6.4 理解繼承的機制(2):在C語言中“玩”繼承 214
4.6.5 保護的誕生 218
4.7 “變”的煩惱與出路:創造虛函式 218
4.7.1 “三變”之苦:格式化字元串 218
4.7.2 函式指針,請帶我走出不斷修改的泥潭 220
4.7.3 再進一步:做成對象 221
4.7.4 我們需要性能更好的版本 223
4.7.5 我們需要新語法,創造虛函式吧 225
4.7.6 驗證虛表機制(1):反彙編分析 226
4.7.7 驗證虛表機制(2):直接用虛表來調用虛函式 227
4.8 虛函式的那些事兒 227
4.8.1 理解“=” 227
4.8.2 純虛函式,從dll導入對象 230
4.8.3 C語言實現虛函式 231
4.8.4 魂歸何處:析構之“虛” 232
4.8.5 理解運行期類型判斷dynamic_cast 232
4.9 靜態覆蓋 235
4.10 靜態與非靜態成員函式的區別 235
4.11 遙遠的風景:管窺 .NET對象 235
習題4 236
第5章 底層與抽象的混沌:一個跨平台執行緒類的封裝、錯誤與進化 239
5.1 先學習多執行緒編程吧 240
5.1.1 概念 240
5.1.2 Windows下的執行緒接口 240
5.1.3 第一個執行緒程式 242
5.1.4 那些複雜的參數和bug 243
5.2 簡單、重用,讓我們構造執行緒類吧 247
5.2.1 無賴的嘗試,原來是它——static 248
5.2.2 可愛的virtual和可恨的this 249
5.2.3 私有、保護、公有、唯讀、純虛函式,一個都不能少 251
5.2.4 析構中釋放資源 252
5.2.5 我們發現了一個設計模式 252
5.2.6 我關心,你通知——我們的第二個設計模式 253
5.3 跨平台的執行緒設計 255
5.3.1 討厭的Linux版本 255
5.3.2 原始碼跨平台技術 256
5.3.3 跨平台的版本 257
5.4 崩潰,哪裡出錯了 262
5.4.1 尋找錯誤 262
5.4.2 C++下整體資源管理的反思 265
5.4.3 生生死死虛表誤,剝離策略世界殊——重生 267
習題5 268
第6章 外掛程式養成記 271
6.1 一個修改已有功能的實例 272
6.2 一個可以動態添加功能的簡單實例 273
6.3 一個可以動態添加功能的複雜實例 276
6.4 從函式到外掛程式對象 280
6.5 delete的災難:誰的書 283
6.5.1 釋放記憶體的崩潰 283
6.5.2 解決之道:新生活,各管各 288
習題6 291
第7章 天堂的階梯 293
7.1 遙望天堂,那些美麗與簡潔我嚮往 294
7.2 從最基礎開始吧,SDK編寫窗體程式 295
7.2.1 hello window和基本原理 295
7.2.2 來個複雜點的窗體程式 298
7.3 構建我的GUI組件(1):簡單組件 300
7.4 構建我的GUI組件(2):天堂的機器碼跳板 304
7.4.1 調試,我要看清你 304
7.4.2 我們的自定位代碼 313
7.4.3 自定位代碼版Button類 314
7.4.4 自定位代碼版Form類 315
7.4.5 為什麼不錯呢 316
7.5 構建我的GUI組件(3):更多的組件 317
7.6 天堂階梯,玩賞框架那如花散落的繁複與如索串珠的簡潔之美 319
7.7 構建我的GUI組件(4):我的天堂 326
7.8 他們的天堂 330
習題7 332

相關詞條

熱門詞條

聯絡我們