-
乐者为王
本书分为五章,详细地介绍了关于一场革新的便笺、前言:生活的意义、一个书呆子的诞生、大鼻子的孩子、外公的计算机、芬兰的严冬、我的家族、中学时代、长大成人、爱洗桑拿的国家、一种操作系统的诞生、昨天的电脑、上大学、从UNIX开始、第一台386和终端仿真、编程的美妙、开始编程、长腿的终端仿真器、寻求网上帮助等。 -
Linux入门很简单
《Linux入门很简单(195分钟多媒体教学视频)》是一本与众不同的Linux入门读物。作者借鉴历史畅销书《明朝那点事》的写作风格,将技术图书也以风趣幽默的风格一一道来,阅读起来十分过瘾。书中以一个拟人化的Ubuntu操作系统为主角,以Ubuntu10.04为基础,讲解了Ubuntu系统从安装、配置,到搭建开发平台、投入使用的过程。《Linux入门很简单(195分钟多媒体教学视频)》配1张光盘,内容为《Linux入门很简单(195分钟多媒体教学视频)》源代码和书中重点操作的教学视频演示。《Linux入门很简单(195分钟多媒体教学视频)》共8章,内容容安排上采取循序渐进的方式,由浅入深地引导读者安装、配置、使用Ubuntu系统。其中,第1章介绍Linux系统的产生和发展概况;第2章介绍Ubuntu系统的各种安装方法;第3章介绍安装系统后的基本设置;第4章介绍Ubuntu下的常用软件;第5章介绍部分Windows下的软件在Linux中运行的解决方案;第6章介绍命令行的使用及脚本的编写;第7章介绍Ubuntu系统下C/C++、Java、PHP开发环境的搭建;第8章深入讲解一个软件的编译、调试、打包、发布的过程。 -
Binary Hacks ―ハッカー秘伝のテクニック100選
Binary Hacks from O'Reilly Japan is a book about low-level programming on GNU/Linux systems. The goal of the book is to offer useful but not necessarily very well-known techniques as many as we can to readers. Table of Contents Chapter 1. Introduction 1. Introduction to Binary Hacks 2. Terminology of Binary Hacks 3. Using "file" to tell file types 4. Using "od" to dump binary files Chapter 2. Object Files Hacks 5. Introduction to ELF 6. Static libraries and dynamic libraries 7. Using "ldd" to check dependencies of shared libraries 8. Using "readelf" to see information of ELF files 9. Using "objdump" to dump object files 10. Using "objdump" to disassemble object files 11. Using "objcopy" to embed data in executables 12. Using "nm" to see lists of symbols in object files 13. Using "strings" to extract strings from binary files 14. Using "c++filt" to demangle C++ symbols 15. Using "addr2line" to get file names and line numbers by addresses 16. Using "strip" to delete symbols from object files 17. Using "ar" to modify static libraries 18. How to link C and C++ programs 19. How to avoid symbol collision issues 20. Why PIC code is used for shared libraries on GNU/Linux systems 21. Using "statifier" to create pseudo static executables from dynamic executables Chapter 3. GNU Programming Hacks 22. Introduction to GCC extensions 23. Using inline assembler with GCC 24. Using GCC's builtin functions for optimization 25. Writing "Hello World" without using glibc 26. Using TLS (Thread Local Storage) 27. Switching glibc's internal libraries by system capabilities 28. Changing behavior of programs by linked libraries 29. Reducing exported symbols of libraries 30. Using versioned symbols to manage compatibility 31. Calling functions before main() 32. How GCC generates trampoline code at runtime 33. Allowing and disallowing executable flags of code on stacks 34. Running code on heaps 35. Creating PIE (Position Independent Executable) 36. Writing synchronized methods in C++ 37. Creating singletons in C++ 38. Understanding g++'s exceptions (throw) 39. Understanding g++'s exceptions (SjLj) 40. Understanding g++'s exceptions (DWARF2) 41. Understanding runtime cost of g++'s exceptions Chapter 4. Secure Programming Hacks 42. Introduction to GCC secure programming 43. Using "-ftrapv" to detect integer overflows 44. Using "Mudflap" to detect buffer overflows 45. Using "-D_FORTIFY_SOURCE" to detect buffer overflows 46. Using "-fstack-protector" to protect stacks 47. Why you should use unsigned constants to do bitmask 48. Why big shift operations are dangerous 49. Why you should care difference between 0 and NULL on 64-bit systems 50. Thread-safe functions defined by POSIX 51. Writing signal handlers in a safe manner 52. Using "sigwait" to process async signals synchronously 53. Using "sigsafe" to write signal processing safely 54. Using "Valgrind" to detect memory leaks 55. Using "Valgrind" to detect invalid memory access 56. Using "Helgrind" to debug multi-threaded programs 57. Using "fakeroot" to run programs with fake root privilege Chapter 5. Runtime Hacks 58. How programs reach main() 59. How system calls are called 60. Using "LD_PRELOAD" to switch shared libraries 61. Using "LD_PRELOAD" to wrap existing functions 62. Using "dlopen" to do dynamic linking 63. Showing backtraces with C programs 64. Checking running process's absolute path 65. Checking loaded shared libraries of running programs 66. Checking memory maps of running programs 67. Using "libbfd" to list symbols 68. Demangling C++ symbols at runtime 69. Using "ffcall" to call functions with dynamic signatures 70. Using "libdwarf" to get debug information 71. Using "dumper" to pretty-print struct variables 72. How to load object files yourself 73. Using "libunwind" to control call chains 74. Using "GNU lightning" to generate code in a portable manner 75. Getting addresses of stacks 76. Using "sigaltstack" to handle stack overflows 77. Hooking entering and exiting of functions 78. Modifying contexts of programs in signal handlers 79. Getting values of program counters 80. Rewriting your programs at runtime 81. Using "SIGSEGV" to validate accessibility of addresses 82. Using "strace" to trace system calls 83. Using "ltrace" to trace function calls in shared libraries 84. Using "Jockey" to record and replay programs 85. Using "prelink" to improve programs starting up time 86. Using 'livepatch" to patch running programs Chapter 6. Profilers and Debuggers Hacks 87. Using "gprof" to profile programs 88. Using "sysprof" to profile systems very easily 89. Using "oprofile" to profile systems 90. Using "GDB" to control running programs 91. Using debugging support of hardware 92. Setting break points in your C programs Chapter 7. Misc Hacks 93. How Boehm GC works 94. Why you should be careful about memory ordering of processors 95. Light-weight concurrent processing with PCL (Portable Coroutine Library) 96. Counting clock counts of CPUs 97. How floating numbers are expressed in bits 98. What's special about x86's floating numbers instructions 99. Raising signals for operations resulting infinite or NAN. 100. Further reading