《Binary Hacks 黑客秘笈100选》PDF下载

  • 购买积分:13 如何计算积分?
  • 作  者:高林哲等著
  • 出 版 社:北京:中国电力出版社
  • 出版年份:2010
  • ISBN:9787508387932
  • 页数:370 页
图书介绍:本书的主题是关于底层程序的技术,主要讲解了有关计算机系统级的程序技术,一共有100个业界最尖端的技巧和工具。全书共分七章,主要内容包括:Binary Hack的基础知识,目标文件,GNU的编程,安全的编程,程序的运行,profile调试器以及其他的一些Hack。

本书寄语 1

编写说明 3

前言 7

第1章介绍 13

1.Binary Hack入门 13

2.Binary Hack用语的基础知识 15

3.用File查询文件的类型 22

4.用od转储二进制文件 24

第2章目标文件Hack 30

5.ELF入门 30

6.静态链接库和共享库 40

7.通过Idd查阅共享库的依赖关系 44

8.用readelf表示ELF文件的信息 47

9.用objdump来转储目标文件 49

10.用objdump反汇编目标文件 53

11.用objcopy嵌入可执行文件的数据 57

12.用nm检索包含在目标文件里的符号 58

13.用strings从二进制文件中提取字符串 64

14.用C++filt对C++的符号进行转储 66

15.用addr2line从地址中获取文件名和行号 66

16.用strip删除目标文件中的符号 68

17.用ar操作静态链接库 69

18.在链接C程序和C++程序时要注意的问题 70

19.注意链接时的标识符冲突 76

20.建立GNU/Linux的共享库 为什么要用PIC编译? 82

21.用statifier对动态链接的可执行文件进行模拟静态链接 85

第3章GNU编程Hack 88

22.GCC的GNU扩展入门 88

23.在GCC上使用内联汇编(inline assembler) 93

24.活用在GCC的built in函数上的最优化 97

25.不使用glibc写Hello World 100

26.使用TLS (Thread-Local Storage) 104

27.根据系统不同用glibc来更换加载库 106

28.由链接后的库来变换程序的运行 109

29.控制对外公开库的符号 111

30.在对外公开库的符号上利用版本来控制动作 114

31.在main()的前面调用函数 121

32.GCC根据生成的代码来生成运行时的代码 124

33.允许/禁止运行放置在stack里的代码 126

34.运行放置在heap上的代码 128

35.建成PIE(位置独立运行形式) 129

36.用C++书写同步方法(synchronized method) 132

37.用C++生成singleton 136

38.理解g++的异常处理(throw篇) 141

39.理解g++的异常处理(SjLj篇) 142

40.理解g++的异常处理(DWARF2篇) 149

41.理解g++异常处理的成本 153

第4章安全编程Hack 156

42.GCC安全编写入门 156

43.用-ftrapv检测整数溢出 160

44.用Mudflap检测出缓冲区溢出 163

45.用-D_ FORTIFY_ SOURCE检测缓冲区溢出 166

46.用-fstack-protector保护堆栈 170

47.将进行位遮蔽的常量无符号化 173

48.注意避免移位过大 175

49.注意64位环境中0和NULL的不同之处 176

50.POSIX的线程安全函数 179

51.安全编写信号处理的方法 182

52.用sigwait将异步信号进行同步处理 187

53.用sigsafe将信号处理安全化 190

54.用V algrind检测出内存泄漏 198

55.使用V algrind检测出错误的内存访问 200

56.用Helgrind检测出多线程程序的bug 204

57.用fakeroot在相似的root权限中运行进程 207

第5章运行时Hack 211

58.程序转变成main() 211

59.怎样调用系统调用 220

60.用LD_ PRELOAD更换共享库 223

61.用LD_ PRELOAD来lap既存的函数 225

62.用dlopen进行运行时的动态链接 228

63.用C表示回溯 232

64.检测运行中进程的路径名 237

65.检测正在加载的共享库 240

66.掌握process和动态库map memory 246

67.用libbfd取得符号的一览表 250

68.运行C++语言时进行demangle 254

69.用ffall动态决定签名读出函数 257

70.用libdwarf取得调试信息 261

71.通过dumper简化dump结构体的数据 265

72.自行加载目标文件 268

73.通过libunwind控制call chain 275

74.用GNU lightning Portable生成运行编码 278

75.获得stack的地址 281

76.用sigaltstack处理stack overflow 285

77.hook面向函数的enter/exit 294

78.从signal handler中改写程序的context 297

79.取得程序计数器的值 299

80.通过自动改写来改变程序的操作 300

81.使用SIGSEGV来确认地址的有效性 303

82.用strace来跟踪系统调用 305

83.用ltrace来跟踪进程调用共享库的函数 307

84.用Jockey来记录、再生Linux的程序运行 309

85.用prelink将程序启动高速化 310

86.通过livepatch在运行中的进程上发布补丁 313

第6章profile调试器Hack 321

87.使用gprof检索profile 321

88.使用sysprof搜索系统profile 324

89.使用oprofile获取详细的系统profile 326

90.使用GDB操作运行进程 330

91.使用硬件调试的功能 332

92.C程序中break point的设定可以用断点这个说法 336

第7章其他的Hack 338

93.Boehm GC的结构 338

94.请注意处理器的存储器顺序 343

95.对Portable Coroutine Library (PCL)进行轻量的并行处理 348

96.计算CPU的clock数 351

97.浮点数的bit列表现 354

98.x86的浮点数运算命令的特殊性 356

99.用结果无限大和NaN化运算来生成信号 360

100.文献介绍 363