Binary Hacks:黑客秘笈100選

《Binary Hacks:黑客秘笈100選》是2010年1月1日中國電力出版社出版的圖書,作者是(日本)高林哲(日本)鵜飼文敏(日本)佐藤祐介

內容簡介

《Binary Hacks:黑客秘笈100選》的主題是關於底層程式的技術。說到底層,就是和“原始的”計算機很接近的意思。軟體的世界是一個抽象化的積累,逐步演化到現在的階段。抽象化就是隱藏底層的複雜部分,相比較來說是可以提高生產性、安全性的方法,並給開發者提供程式化的手段。但是,如果認為完全不依賴底層系統級的技術來進行編程,這是行不通的。追求性能上的最佳,儘可能提高可信賴性,想解決偶爾發生的“謎一樣的錯誤”,在這些情況下,了解底層系統級的技術就顯得尤為重要。遺憾的是,抽象化並不能代替所有的。

《Binary Hacks:黑客秘笈100選》的目的就是在上述的情況下,都能使用的大量Know-how的介紹。《Binary Hacks:黑客秘笈100選》Binary Hack定義為“能驅動軟體的底層技術的Know-how”,從最基本的工具使用開始,安全編程,OS到提高處理器的處理性能的技術,在一個很寬泛的範圍內都進行了說明。

編輯推薦

《Binary Hacks:黑客秘笈100選》:100個業界最尖端的技巧和工具

作者簡介

作者:(日本)高林哲(日本)鵜飼文敏(日本)佐藤祐介 等 譯者:蔣斌 楊超

目錄

本書寄語

編寫說明

前言

第1章介紹

1.Binary Hack入門

2.Binary Hack用語的基礎知識

3.用File查詢檔案的類型

4.用od轉儲二進制檔案

第2章目標檔案Hack

5.ELF入門

6.靜態程式庫和共享庫

7.通過Idd查閱共享庫的依賴關係

8.用readelf表示ELF檔案的信息

9.用objdump來轉儲目標檔案

10.用objdump反彙編目標檔案

11.用Objcopy嵌入執行檔的數據

12.用am檢索包含在目標檔案里的符號

13.用strings從二進制檔案中提取字元串

14.用c++filt對C++的符號進行轉儲

15.用addr2line從地址中獲取檔案名稱和行號

16.用strip刪除目標檔案中的符號

17.用ar操作靜態程式庫

18.在連結c程式和c++程式時要注意的問題

19.注意連結時的標識符衝突

20.建立GNU/Linux的共享庫,為什麼要用PIC編譯?

21.用statitier’對動態連結的執行檔進行模擬靜態連結

第3章G N U編程Hack

22.GCC的GNU擴展入門

23.在GCC上使用內聯彙編(inlineassembler)

24.活用在GCC的built in函式上的最最佳化

25.不使用glibc寫Hello World

26.使用TLS(Thread-Local Storage)

27.根據系統不同用glibc來更換載入庫

28.由連結後的庫來變換程式的運行

29.控制對外公開庫的符號

30.在對外公開庫的符號上利用版本來控制動作

31.在main()的前面調用函式

32.GCC根據生成的代碼來生成運行時的代碼

33.允許,禁止運行放置在stack里的代碼

34.運行放置在heap上的代碼

35.建成PIE(位置獨立運行形式)

36.用C++書寫同步方法(synchronizedmethod)

37.用C++生成singleton

38.理解g++的異常處理(tllrow篇)

39.理解g++的異常處理(sjLj篇)

40.理解g++的異常處理(DWARF2篇)

41.理解g++異常處理的成本

第4章安全編程Htick

42.GCC安全編寫入門

43.用-ftrapv檢測整數溢出

44.用Mudflap檢測出緩衝區溢出

45.用-D_FORTIFY_SOURCE檢測緩衝區溢出

46.用-fstack-protector保護堆疊

47.將進行位遮蔽的常量無符號化

48.注意避免移位過大

49.注意64位環境中0和NULL的不同之處

50.POSIX的執行緒安全函式

51.安全編寫信號處理的方法

52.用sigwait將異步信號進行同步處理

53.用sigsafe將信號處理安全化

54.用Valgrind檢測出記憶體泄漏

55.使用Valgrind檢測出錯誤的記憶體訪問

56.用Helgrind檢測出多執行緒程式的bug

57.用fakeroot在相似的root許可權中運行進程

第5章運行時HaCk

58.程式轉變成main()

59.怎樣調用系統調用

60.用LD_PRELOAD更換共享庫

61.用LD_PRELOAD來lap既存的函式

62.用dlopen進行運行時的動態連結

63.用C表示回溯

64.檢測運行中進程的路徑名

65.檢測正在載入的共享庫

66.掌握process和動態庫map memory

67.用libbfd取得符號的一覽表

68.運行C++語言時進行demangle

69.用ffcall動態決定簽名,讀出函式

70.用libdwarf取得調試信息

71.通過dumper簡化dump結構體的數據

72.自行載入目標檔案

73.通過libunwind控制call chain

74.用GNu lightning Portable生成運行編碼

75.獲得stack的地址

76.用sigaltstack處理stack overflow

77.hook面向函式的enter/exit

78.從signal handler中改寫程式的context

79.取得程式計數器的值

80.通過自動改寫來改變程式的操作

81.使用SIGSEGV來確認地址的有效性

82.用strace來跟蹤系統調用

83.用ltrace來跟蹤進程調用共享庫的函式

84.用Jockey來記錄、再生Linux的程式運行

85.用prelink將程式啟動高速化

86.通過livepatch在運行中的進程上發布補丁

第6章profile調試器Hack

87.使用gprof檢索profile

88.使用sysprof搜尋系統profile

89.使用oprofile獲取詳細的系統profile

90.使用GDB操作運行進程

91.使用硬體調試的功能

92.c程式中break point的設定可以用斷點這個說法

第7章其他的Hack

93.Boehm GC的結構

94.請注意處理器的存儲器順序

95.對Portable Coroutine Library(PCL)進行輕量的並行處理

96.計算CPU的clock數

97.浮點數的bit列表現

98.x86的浮點數運算命令的特殊性

99.用結果無限大和NaN化運算來生成信號

100.文獻介紹

熱門詞條

聯絡我們