• Jason Note
  • 1. Command
    • 1.1. 10 條 Linux
    • 1.2. Open Chinese Convert 開放中文轉換
    • 1.3. Command Tips
    • 1.4. Useful Linux Commands
    • 1.5. Opencc 使用
  • 2. Shared Libraries
    • 2.1. Shared Libraries Setup
  • 3. Linux Tools
    • 3.1. Linux Basic
      • 3.1.1. 學會使用命令幫助
      • 3.1.2. 文件及目錄管理
      • 3.1.3. 文本處理
      • 3.1.4. 磁盤管理
      • 3.1.5. 進程管理工具
      • 3.1.6. 性能監控
      • 3.1.7. 網絡工具
      • 3.1.8. 用戶管理工具
      • 3.1.9. 系統管理及IPC資源管理
    • 3.2. Linux工具進階
      • 3.2.1. 程序構建
      • 3.2.2. 程序調試
      • 3.2.3. 性能優化
    • 3.3. 工具參考篇
      • 3.3.1. gdb 調試利器
      • 3.3.2. ldd 查看程序依賴庫
      • 3.3.3. lsof 一切皆文件
      • 3.3.4. ps 進程查看器
      • 3.3.5. pstack 跟蹤進程棧
      • 3.3.6. strace 跟蹤進程中的系統調用
      • 3.3.7. ipcs 查詢進程間通信狀態
      • 3.3.8. top linux下的任務管理器
      • 3.3.9. free 查詢可用內存
      • 3.3.10. vmstat 監視內存使用情況
      • 3.3.11. iostat 監視I/O子系統
      • 3.3.12. sar 找出系統瓶頸的利器
      • 3.3.13. readelf elf文件格式分析
      • 3.3.14. objdump 二進制文件分析
      • 3.3.15. nm 目標文件格式分析
      • 3.3.16. size 查看程序內存映像大小
      • 3.3.17. wget 文件下載
      • 3.3.18. scp 跨機遠程拷貝
      • 3.3.19. crontab 定時任務
      • 3.3.20. trace-cmd
    • 3.4. Doxygen
    • 3.5. Jdbshell
    • 3.6. 二進位實用程式(objdump, readelf,ar, nm等)
    • 3.7. UNIX 下繪圖面面觀
    • 3.8. performance 分析
      • 3.8.1. Application 效能分析有妙招 — 使用 perf 走天下
      • 3.8.2. 藉助PERF工具分析CPU使用率
      • 3.8.3. linux下的內核測試工具——perf使用簡介
      • 3.8.4. Perf -- Linux下的系統性能調優工具,第 1 部分
      • 3.8.5. Perf -- Linux下的系統性能調優工具,第 2 部分
      • 3.8.6. 系統級性能分析工具 — Perf
      • 3.8.7. perf 性能分析實例——使用perf優化cache利用率
      • 3.8.8. Linux 效能分析工具: Perf - NCKU 2015
      • 3.8.9. Linux 效能分析工具: Perf - NCKU 2016
    • 3.9. Mounting samba shares from a unix client
    • 3.10. cppcheck 靜態程式分析工具
    • 3.11. perf 原理和實務
    • 3.12. gnuplot 語法解說和示範
    • 3.13. 運用 gprof + graphviz 學習 Open Source
    • 3.14. 有病治病,沒病強身: Cppcheck + Valgrind
  • 4. Android note
    • 4.1. android resource
    • 4.2. Android debug 技巧
      • 4.2.1. Android下打印調試堆棧方法
      • 4.2.2. Android調試技巧(一)
      • 4.2.3. 理解Android Crash處理流程
      • 4.2.4. 理解Native Crash處理流程
      • 4.2.5. Native進程之Trace原理
      • 4.2.6. debuggerd守護進程
    • 4.3. GDB在線調試Android Framework Native C/C++代碼
    • 4.4. 什麼時候用startService,什麼時候用bindService
    • 4.5. android的消息處理機制(圖+源碼分析)——Looper,Handler,Message
    • 4.6. Android中Handler Runnable與Thread的區別詳解
    • 4.7. Android Service與Native Service
    • 4.8. Handler, Message, Looper, MessageQueue
    • 4.9. Android 各層中日誌打印功能的應用
    • 4.10. Android指令和命令參數
    • 4.11. Android中進程與進程、線程與線程之間如何通信
    • 4.12. startService的創建過程
    • 4.13. service組件-bindService源碼分析
    • 4.14. [轉]Android 執行緒 - Thread 與 Handler
    • 4.15. [轉] Android 執行緒 - Runnable 與 Handler
    • 4.16. [轉] Android 非同步任務 - AsyncTask
    • 4.17. [轉]Android.mk 組織結構
    • 4.18. 如何下載編譯Android goldfish(Kernel)
    • 4.19. 自己動手編譯android源碼
    • 4.20. Android 核心使用 kgdb
    • 4.21. BusyBox 安裝
    • 4.22. Android 常用開發工具
    • 4.23. 開發最佳實踐
    • 4.24. Analyzing UI Performance with Systrace
    • 4.25. Android 常用指令
    • 4.26. Android下設置CPU核心數和頻率
    • 4.27. Android系統的智能指針(輕量級指針、強指針和弱指針)的實現原理分析
    • 4.28. gradle 教學
    • 4.29. Gradle的一些總結
    • 4.30. 線程通信基礎流程分析 Handler、Looper、Message、MessageQueue
    • 4.31. 多執行緒-Handler和Thread的關係 (2)
    • 4.32. jni
      • 4.32.1. 使用JNI進行Java與C/C++語言混合編程
      • 4.32.2. JNI Java <-> native Struct
    • 4.33. Android消息機制
      • 4.33.1. 概述設計架構
      • 4.33.2. Message和MessageQueue
      • 4.33.3. Looper
      • 4.33.4. Handler
    • 4.34. 關於Service
      • 4.34.1. Android之Service總結
      • 4.34.2. startService及bindService的區別
      • 4.34.3. android service 之一 (start service)
      • 4.34.4. android service 之二(IntentService)
      • 4.34.5. Android Service 之三(Bind Service, 繼承自 Binder 類)
      • 4.34.6. Android Service 之三(Bind Service,使用 Messenger)
      • 4.34.7. Android Service 之三(Bind Service,使用 AIDL)
    • 4.35. 關於Activity
      • 4.35.1. Android之Activity總結
    • 4.36. IPC
      • 4.36.1. 進程通信之Messenger&AIDL使用詳解
      • 4.36.2. 為什麼 Android 要採用 Binder 作為 IPC 機制?
    • 4.37. Carson_Ho筆記
      • 4.37.1. Android多線程全面解析:IntentService用法&源碼
      • 4.37.2. Android四大組件:Service生命週期最全面解析
      • 4.37.3. Android四大組件:Service服務史上最全面解析
      • 4.37.4. (本地、可通信的、前臺、遠程)Service使用全面介紹
      • 4.37.5. Android:遠程服務Service(含AIDL & IPC講解)
    • 4.38. 反組譯 apk
    • 4.39. 如何使用篇
      • 4.39.1. 如何瞭解Task、Thread、ThreadPool、Handler、Looper、Message、MessageQueue、AsyncTask
      • 4.39.2. 如何使用Handler
      • 4.39.3. 如何使用HandlerThread
      • 4.39.4. 如何使用Thread和Handler
      • 4.39.5. 如何使用Service
      • 4.39.6. 如何使用IntentService
      • 4.39.7. 如何使用AsyncTask
    • 4.40. android thread
      • 4.40.1. Android多線程的四種方式
      • 4.40.2. Android的幾種多線程方式(AsyncTask,HandlerThread,IntentService,ThreadPool),使用場景以及注意事項
      • 4.40.3. Android 多線程編程的總結
    • 4.41. 簽署你的Android應用程式(.keystore)
    • 4.42. Building Andordi & Kernels
    • 4.43. Handler消息機制再梳理
    • 4.44. 用Interface實作Call Back機制
    • 4.45. EventBus套件的基本用法
  • 5. Ubuntu
    • 5.1. Ubuntu installer
    • 5.2. Windows與Ubuntu雙系統,開機時偵測不到彼此的解決方法
    • 5.3. ssh tunnel
    • 5.4. tmate-slave 架設
  • 6. QEMU
    • 6.1. X86_QEMU
    • 6.2. ARM_QEMU
    • 6.3. Qemu_KGDB_Ftrace
    • 6.4. 5 分鐘 Linux 0.11 快速構建實驗環境
    • 6.5. Debug Assembly with GDB for ARMv8 on QEMU
    • 6.6. ARM體系結構--寄存器
    • 6.7. Run Debian iso on QEMU ARMv8
    • 6.8. QEMU ARM64 guide
    • 6.9. QEMU install
    • 6.10. 編譯 linux 0.11,並且使用 QEMU + GDB 調試 kernel ( Ubuntu 11.04, GCC 4.5.2)
    • 6.11. How to Build A Custom Linux Kernel For Qemu (2015 Edition)
    • 6.12. X86 Kernel
    • 6.13. FreeNOS
    • 6.14. 建構 Linux 0.11 的開發環境
    • 6.15. KGDB + QEMU + SSH
    • 6.16. 打造屬於自己的linux發行版
    • 6.17. 編譯內核+BusyBox定製一個Linux提供ssh和web服務
    • 6.18. 用Qemu模擬ARM
    • 6.19. qemu-arm 快速驗證arm應用程式
    • 6.20. How Other People Use QEMU
    • 6.21. buildroot & dropbear
    • 6.22. ARM64 Linux kernel + busybox rootFS via NFS over QEMU with GDB
    • 6.23. 奔跑吧-linux內核-qemu調試內核
    • 6.24. Linux kernel v4.0 code for <奔跑吧Linux內核>
    • 6.25. 奔跑 linux kernel GDB 使用
    • 6.26. QEMU运行Linux Kernel环境配置
    • 6.27. 基于QEMU的Linux Driver开发环境的配置
    • 6.28. Myrunninglinuxkernel_5.0
  • 7. fcamel
    • 7.1. [轉]ld, ld.so 和 ldconfig 的行為
    • 7.2. [轉]解決 undefined symbol / reference
    • 7.3. [轉] 列出用到的 shared library
    • 7.4. [轉]用 LD_PRELOAD 替換動態連結的函式庫
    • 7.5. [轉] 用 strace 和 ltrace 找出用到的 system call 和 library call
    • 7.6. [轉] 加速 linking time
    • 7.7. [轉] 從 C 呼叫 C++ 函式的過程理解程式編譯、連結的原理
    • 7.8. [轉] 對 C++ 的觀感
    • 7.9. [轉]在 Linux 下開發 C/C++ 的新手指南
    • 7.10. [轉]瞭解 C/C++ 程式行為的技巧
      • 7.10.1. 查 C/C++ symbol 定義的方法
      • 7.10.2. 閱讀 C/C++ 原始碼的好幫手
      • 7.10.3. 配合 c++filt 讀程式
      • 7.10.4. 加速 gdb 載入 symbol 時間
      • 7.10.5. 在 x86-64 上對 system call 使用 conditional break
      • 7.10.6. 用 strace 找出 Ubuntu 如何提示未安裝的指令
      • 7.10.7. 自行編譯含 debug symbol 的套件 (package)
      • 7.10.8. gdb 顯示 STL container 的方法
      • 7.10.9. 善用 strace、debugger 從執行期間找出問題根源
      • 7.10.10. 用 python gdb 客製化 backtrace 的結果
    • 7.11. 寫 linux daemon 的注意事項
    • 7.12. signal 小知識
    • 7.13. gold 和 GNU ld 行為差異造成的問題
    • 7.14. 如何在 Linux 上使用自行編譯的第三方函式庫
    • 7.15. 在 Ubuntu 上找出第三方函式庫的程式碼
  • 8. ARM
    • 8.1. ARM彙編語言
    • 8.2. ARM尋址方式
    • 8.3. Introduction to ARMv8 64-bit Architecture
    • 8.4. ARM彙編指令調試方法
  • 9. ARM emulation
    • 9.1. Compiling Linux kernel for QEMU ARM emulator
    • 9.2. Compiling Linux kernel 3.0 with Emdebian ARM toolchain
    • 9.3. Compile Linux kernel 3.2 for ARM and emulate with QEMU
    • 9.4. Busybox for ARM on QEMU
    • 9.5. Linux NFS Root under QEMU ARM emulator
    • 9.6. Trying Debian for ARM on QEMU
    • 9.7. Debugging ARM programs inside QEMU
    • 9.8. U-boot for ARM on QEMU
    • 9.9. Booting Linux with U-Boot on QEMU ARM
    • 9.10. Simplest bare metal program for ARM
    • 9.11. Hello world for bare metal ARM using QEMU
    • 9.12. Emulating ARM PL011 serial ports
    • 9.13. ARM926 interrupts in QEMU
    • 9.14. Using Ubuntu ARM cross-compiler for bare metal programming
    • 9.15. Using Newlib in ARM bare metal programs
    • 9.16. Using CodeSourcery bare metal toolchain for Cortex-M3
    • 9.17. QEMU ARM semihosting
    • 9.18. Simulating AT91 with Skyeye
  • 10. Linux Kernel
    • 10.1. MY_example
      • 10.1.1. send pid to kernel by ioctl and kernel send_sig to user space
    • 10.2. LKD
      • 10.2.1. 核心簡介
      • 10.2.2. 核心開發準備
      • 10.2.3. Linux 行程
      • 10.2.4. 行程排程
      • 10.2.5. 系統呼叫
    • 10.3. 我理解的邏輯地址、線性地址、物理地址和虛擬地址
    • 10.4. 用ttyS0獲取dmesg信息
    • 10.5. Buddy Algorithm
    • 10.6. 分析oops的機器碼
    • 10.7. oops調試
    • 10.8. 可搶佔
    • 10.9. 異或的用法
    • 10.10. 定製編譯內核模塊的GCC參數
    • 10.11. Linux 記憶體基礎
    • 10.12. Linux內存管理之分頁機制
    • 10.13. Linux虛擬內存概述
    • 10.14. 程序的裝載和鏈接
    • 10.15. IA32CPU內存管理機制
    • 10.16. Linux內存管理之分段機制
    • 10.17. 邏輯地址,線性地址及物理地址的區別
    • 10.18. 分段機制和分頁機制
    • 10.19. 段選擇器 段描述符 段描述符表 線性地址形成
    • 10.20. Linux 內核的編譯系統
    • 10.21. 如何編譯linux kernel
    • 10.22. Linked List in Linux Kernel
    • 10.23. Linux Kernel: 強大又好用的list_head結構
    • 10.24. send signal to user-space
    • 10.25. kernel 發 signal 通知 pid task_struct->comm
    • 10.26. Linux內核調試方法 gdboc gdboe JTAG
    • 10.27. Linux內核kernel panic機制淺析
    • 10.28. 如何在linux kernel 中加入system call
    • 10.29. 查看Linux內核編譯配置
    • 10.30. Ubuntu更換內核方法
    • 10.31. 調試工具ltrace strace ftrace的使用
    • 10.32. 根據內核Oops 定位代碼
    • 10.33. 內核和用戶空間共享內存的實現例程-proc和mmap
    • 10.34. 陳鍾誠Linux Kernel
      • 10.34.1. 簡介
      • 10.34.2. 行程結構
      • 10.34.3. Linux 的記憶體管理
      • 10.34.4. Linux 的檔案系統
      • 10.34.5. Linux 的輸出入系統
      • 10.34.6. Linux 的目的檔
      • 10.34.7. Linux 的動態連結與載入 (Dynamic Linking)
    • 10.35. 例說linux內核與應用數據通信系列
      • 10.35.1. (一):添加一個系統調用
      • 10.35.2. (二):proc虛擬文件系統
      • 10.35.3. (三):讀寫內核設備驅動文件
      • 10.35.4. (四):映射設備內核空間到用戶態
    • 10.36. 把握linux內核設計思想系列
      • 10.36.1. (一):系統調用
      • 10.36.2. (二):硬中斷及中斷處理
      • 10.36.3. (三):下半部機制之軟中斷
      • 10.36.4. (四):下半部機制之tasklet
      • 10.36.5. (五):下半部機制之工作隊列及幾種機制的選擇
      • 10.36.6. (六):內核時鐘中斷
      • 10.36.7. (七):內核定時器和定時執行
      • 10.36.8. (八):進程管理分析
      • 10.36.9. (九):進程調度
      • 10.36.10. (十):內核同步
      • 10.36.11. (十一):內存管理之頁的分配與回收
    • 10.37. 移植 Linux Kernel 造成無法開機之解決方案以及除錯工具
    • 10.38. delay/ sleep 延遲函式學習筆記
    • 10.39. 密碼學演算法實作流程
    • 10.40. 效能工具 – perf 來分析探討硬體加密之瓶頸
    • 10.41. Linux kernel 調試打log流和斷點流
    • 10.42. Linux kernel v4.0 code for <奔跑吧Linux內核>
    • 10.43. Trace Kernel 程式的一些小技巧
    • 10.44. Modern Maker : 從那些 Maker 的大小事看 Linux 核心 系列
      • 10.44.1. Day 2:「我需要 perf!」「請給我 eBPF!」
      • 10.44.2. Day 3:安裝 ply 和 perf
      • 10.44.3. Day 4:小試身手 -- 是誰住在 Rpi 的 LED 裡?
      • 10.44.4. Day 5:ply 語法簡介
      • 10.44.5. Day 6:I2C (Part 1) - 簡介與環境設置
      • 10.44.6. Day 7:I2C (Part 2) - ftrace 爽颯登場!
      • 10.44.7. Day 8:Device Tree (Part 1)
      • 10.44.8. Day 9:暖身運動 - 媽!我在核心裡面了!第一個核心模組
      • 10.44.9. Day 10:I2C Driver (Part 1) - 使用 Device Tree 來找 Driver
      • 10.44.10. Day 11:I2C Driver (Part 2) - 這是一個間諜檔案!把 I2C 的傳輸包成字元驅動程式
      • 10.44.11. Day 12:I2C Driver (Part 2) - 細節、追蹤與驗證
      • 10.44.12. Day 13:SPI (Part 1) - 原來是 Shift Register 啊!我還以為是 SPI 呢!
      • 10.44.13. Day 14:SPI (Part 2) - ftrace 啦!哪次不 ftrace?
      • 10.44.14. Day 15:SPI Driver (Part 1) - DT Overlay
      • 10.44.15. Day 16:SPI Driver (Part 2) - 傳簡單的訊息!
      • 10.44.16. Day 17:SPI Driver (Part 3) -- 又是一個間諜檔案!
      • 10.44.17. Day 18:spidev - 辣個 userspace 的驅動程式
      • 10.44.18. Day 19:GPIO (Part 1) -- 人生的謊言:GPIO 很簡單
      • 10.44.19. Day 20:GPIO (Part 2) - 沒有用到 GPIO 子系統的 GPIO
      • 10.44.20. Day 21:GPIO (Part 3) - 所以我說那個裝置樹呢?
      • 10.44.21. Day 22:GPIO (Part 4) - 今晚,我想來點驅動程式佐 GPIO
      • 10.44.22. Day 23:IIO (Part 1) - 構造改革!自動幫感測器做好介面的子系統!
      • 10.44.23. Day 24:IIO (Part 2) - 基本術語與架構
      • 10.44.24. Day 25:IIO (Part 3) - 變數命名大師?第一個 IIO 驅動程式!
      • 10.44.25. Day 26:IIO (Part 4) - 幫感應器寫驅動程式!以 TCRC5000 為例
      • 10.44.26. Day 27:IRQ (Part 1) - 斷開魂結!
      • 10.44.27. Day 28:IRQ (Part 2) - 中斷突進!簡單的 IRQ 程式
      • 10.44.28. Day 29:IRQ (Part 3) - 這是核心執行緒的味道!Threaded IRQ
      • 10.44.29. Day 30:賽後感言
    • 10.45. Embedded Linux Primer 讀書筆記
      • 10.45.1. Chapter 2: The Big Picture
      • 10.45.2. Chapter 4:淺談Linux 核心
      • 10.45.3. Chapter 5 : Kernel Initialization
      • 10.45.4. Chapter 6 : User Space Initialization
      • 10.45.5. Chapter 8: 裝置驅動程式的基本知識
      • 10.45.6. Chapter 9: File system
  • 11. Linux Driver
    • 11.1. Linux Device Driver Programming
      • 11.1.1. Linux 裝置驅動程式的概要
      • 11.1.2. Linux 的授權
      • 11.1.3. 準備開發裝置驅動程式
      • 11.1.4. 開發驅動程式的第一步
      • 11.1.5. 開發 driver 需要的基礎知識
      • 11.1.6. 實際撰寫驅動程式
      • 11.1.7. 控制硬體
      • 11.1.8. 記憶體
      • 11.1.9. 計時器
      • 11.1.10. 同步與鎖定
      • 11.1.11. 中斷
      • 11.1.12. 測試與除錯
    • 11.2. 《深入Linux設備驅動程序內核機制》之MMAP內存頁面示例
    • 11.3. Linux Device Model 三角關係
    • 11.4. Linux設備模型(1)_基本概念
    • 11.5. Linux設備模型(2)_Kobject
    • 11.6. mmap driver implementation
    • 11.7. 嵌入式Linux驅動模板精講與項目實踐
    • 11.8. 動手寫 Linux Driver
  • 12. OS
    • 12.1. [轉]打造簡易作業系統
      • 12.1.1. (一) 開機Hello World實例
      • 12.1.2. (二) Boot Loader + 作業系統載入實例 (QEMU)
      • 12.1.3. (三) Boot Loader + 作業系統載入實例 (CF Card)
      • 12.1.4. (四) 由16位元真實模式 (Real Mode) 進入32位元保護模式 (Protect Mode)
      • 12.1.5. (五) 使用Local Descriptor Table (LDT)
      • 12.1.6. (六) 簡介Call Gate
      • 12.1.7. (七) 利用Call Gate與TSS (Task-State Segment)實現特權等級的轉換
    • 12.2. Page Table size太大之解決
  • 13. Linux System
    • 13.1. 事件驅動伺服器
    • 13.2. Multi-pthread note
      • 13.2.1. fork + pthread_create 記憶體空間差異
      • 13.2.2. Pros and Cons
      • 13.2.3. Linux內核中線程的實現方式
    • 13.3. linux系統編程
      • 13.3.1. 文件與IO(一):文件描述符、open,close
      • 13.3.2. 文件與IO(二):系統調用read和write
      • 13.3.3. 文件與IO(三):利用lseek()創建空洞文件
      • 13.3.4. 文件與IO(四):目錄訪問相關係統調用
      • 13.3.5. 文件與IO(五):stat()系統調用獲取文件信息
      • 13.3.6. 文件與IO(六):實現ls -l功能
      • 13.3.7. 文件與IO(七):時間函數小結
      • 13.3.8. 文件與IO(八):文件描述符相關操作-dup,dup2,fcntl
      • 13.3.9. 進程(一):進程與程序
      • 13.3.10. 進程(二):進程生命週期與PCB(進程控制塊)
      • 13.3.11. 進程(三):進程複製fork,孤兒進程,殭屍進程
      • 13.3.12. 進程(四):進程退出exit,_exit區別即atexit函數
      • 13.3.13. 進程(五):exec系列函數(execl,execlp,execle,execv,execvp)使用
      • 13.3.14. 進程(六):父進程查詢子進程的退出,wait,waitpid
      • 13.3.15. 進程(七):system()函數使用
      • 13.3.16. 進程(八):守護進程詳解及創建,daemon()使用
      • 13.3.17. 信號(一):中斷與信號
      • 13.3.18. 信號(二):信號處理流程(產生、註冊、註銷、執行)
      • 13.3.19. 信號(三):信號安裝、signal、kill,arise講解
      • 13.3.20. 信號(四):alarm和可重入函數
      • 13.3.21. 信號(五):信號集操作函數,信號阻塞與未決
      • 13.3.22. 信號(六):信號發送函數sigqueue和信號安裝函數sigaction
      • 13.3.23. 信號(七):被信號中斷的系統調用和庫函數處理方式
      • 13.3.24. 信號(八):三種時間結構及定時器setitimer()詳解
      • 13.3.25. 管道(一):匿名管道(pipe)
      • 13.3.26. 管道(二):管道讀寫規則
      • 13.3.27. 管道(三):命令管道(FIFO)
      • 13.3.28. 錯誤處理:perror,strerror和errno
      • 13.3.29. 利用backtrace和backtrace_symbols函數打印調用棧信息
      • 13.3.30. linux系統編程:setjmp和longjmp函數用法
      • 13.3.31. linux新定時器:timefd及相關操作函數
    • 13.4. Note
      • 13.4.1. IPC
        • 13.4.1.1. PIPE
        • 13.4.1.2. Signal
    • 13.5. Linux Debugging
      • 13.5.1. 使用反彙編理解C++程序函數調用棧
      • 13.5.2. 熟悉AT&T彙編語言
      • 13.5.3. C++函數調用的參數傳遞方法總結(通過gdb+反彙編)
      • 13.5.4. 使用GDB來理解C++ 對象的內存佈局(多重繼承,虛繼承)
      • 13.5.5. coredump 分析入門
      • 13.5.6. 動態庫注入、ltrace、strace、Valgrind
      • 13.5.7. 使用反彙編理解動態庫函數調用方式GOT/PLT
      • 13.5.8. core真的那麼難以追蹤嗎?
      • 13.5.9. 一次生產環境下的“內存洩露”
    • 13.6. Linux 作業系統分析
      • 13.6.1. 破解Linux操作系統的奧祕
      • 13.6.2. How program works
      • 13.6.3. 進程的創建與可執行程序的加載
      • 13.6.4. 內核裝載ELF的過程總結
    • 13.7. 如何更新linux console畫面
    • 13.8. 服務器進程為何通常fork()兩次
    • 13.9. 創建 Daemon 程式
    • 13.10. Linux信號處理機制
    • 13.11. 函數調用棧的獲取原理分析
    • 13.12. 在Linux程序中輸出函數調用棧
    • 13.13. C/C++混合編程
    • 13.14. linux下C與C++混合編程
    • 13.15. Static 與 Shared 的函式庫撰寫
    • 13.16. Linux 的 time 指令
    • 13.17. 孤兒進程與殭屍進程[總結]
    • 13.18. pkg-config 使用及建立方法
    • 13.19. 簡述configure、pkg-config、pkg_config_path三者的關係
    • 13.20. 動態庫的鏈接和鏈接選項-L,-rpath-link,-rpath
    • 13.21. LD_LIBRARY_PATH與-L的關係
    • 13.22. shell環境變量以及set,env,export的區別
    • 13.23. 用gcc 自製 Library
    • 13.24. 如何使用pkg-config工具編譯鏈接第三方庫
    • 13.25. stdout & stderr & fflush()
    • 13.26. 使用system()函數執行命令行命令簡述
    • 13.27. ldconfig及 LD_LIBRARY_PATH,LD_DEBUG ,LD_PRELOAD
    • 13.28. SIGINT 後 KILL 自己
    • 13.29. my_note
      • 13.29.1. thread_create & signal 使用技巧
    • 13.30. pthread_sigmask 控制線程的信號掩碼
    • 13.31. C 的 Thread Pool 筆記
    • 13.32. IP addresses from a C program
    • 13.33. OpenMP in linux
    • 13.34. Mutexes VS Semaphores 大揭祕
    • 13.35. dlopen & dlsym 用法
    • 13.36. pthread_create & pthread_join & pthread_exit 基本用法
    • 13.37. LINUX下動態庫調用靜態庫的方法
    • 13.38. C語言互斥鎖-雙條件變量實現循環打印
    • 13.39. tutorial-pthreads
    • 13.40. 《Programming with POSIX Threads》筆記
    • 13.41. mmap映射空間與內存和磁盤的IO性能對比
    • 13.42. 一個並發10k的簡易群聊天室(使用epoll)
    • 13.43. Mutex 與 Semaphore 最大的差異是
    • 13.44. [讀書會] Linux環境編程:從應用到內核
    • 13.45. example
    • 13.46. 64位x86的函數調用棧佈局
    • 13.47. 如何手工展開函數棧來定位問題
    • 13.48. 第3章 行程(process)環境
    • 13.49. 打印出一個完整的程序調用堆棧信息
    • 13.50. Linux 下 IPC 的運作方式
    • 13.51. 細說linux IPC
      • 13.51.1. 基於socket的進程間通信(上)
      • 13.51.2. 基於socket的進程間通信(下)
      • 13.51.3. mmap系統調用共享內存
      • 13.51.4. posix 共享內存
      • 13.51.5. system V共享內存
      • 13.51.6. pipe和FIFO
      • 13.51.7. 信號(上)
      • 13.51.8. 信號(下)
      • 13.51.9. posix消息隊列
      • 13.51.10. system V 消息隊列
      • 13.51.11. 細說linux IPC:各種IPC形式比較總結
      • 13.51.12. 補充 現代Linux有兩種共享內存機制
    • 13.52. Linux同步與互斥應用
      • 13.52.1. (零):基礎概念
      • 13.52.2. (一):posix線程及線程間互斥
      • 13.52.3. (二):posix線程同步
      • 13.52.4. (三):posix線程實現單個生產者和單個消費者模型
      • 13.52.5. (四):posix信號量的互斥與同步
      • 13.52.6. (五):system V信號量的互斥與同步
      • 13.52.7. (六):文件鎖
    • 13.53. Linux下利用backtrace追蹤函數調用堆棧以及定位段錯誤
    • 13.54. sendfile:Linux中的"零拷貝"
    • 13.55. Linux Note: daemon 與 background process 的差異
    • 13.56. x86 有個有個 lea 指令 (Load Effective Address)
    • 13.57. Linux平臺延時之sleep、usleep、nanosleep、select比較
    • 13.58. linux 用戶空間 和 內核空間 延時函數
    • 13.59. 即時系統 使用排程器
    • 13.60. 性能分析工具使用 callgrind+kcachegrind
      • 13.60.1. 2(RDTSC)
    • 13.61. linux編程的108種奇淫巧計
      • 13.61.1. 1(FALSE SHARING)
      • 13.61.2. 2(RDTSC)
      • 13.61.3. 3(magic 2)
      • 13.61.4. 4(編譯展開)
      • 13.61.5. 5(rbp寄存器)
      • 13.61.6. 6(shellcode)
      • 13.61.7. 7(Lock-free實驗)
      • 13.61.8. 8(嵌入彙編的另一種寫法)
      • 13.61.9. PForDelta索引壓縮算法的實現
      • 13.61.10. 11(亂序)
      • 13.61.11. 12(存儲計算)
      • 13.61.12. 15(減少複製)
      • 13.61.13. 16(如何達到內存最大帶寬,複雜指令)
      • 13.61.14. 17(如何達到內存最大帶寬,精簡指令,預取和NT)
      • 13.61.15. 18(SIMD)
      • 13.61.16. 關於bit操作(bit_set test_bit)
      • 13.61.17. put variables in a regsiter
      • 13.61.18. Userspace I/O scheduling for multi-file operations
      • 13.61.19. Manual FIle Locking
    • 13.62. Linux下fork函數及pthread函數的總結
    • 13.63. C++ 在類裡面使用多線程技術
    • 13.64. 深入 Linux 多線程編程
    • 13.65. C/C++每線程(thread-local)變量的使用
    • 13.66. 在pthread的線程函數中,使用類的非靜態成員函數來執行
    • 13.67. 從 pthread 轉換到 std::thread
    • 13.68. 如何在運行時加載C++函數和類別
    • 13.69. 主線程退出對子線程的影響
  • 14. Assembly
    • 14.1. myAssembly
    • 14.2. Linux 平臺學X86組合語言
      • 14.2.1. 現代計算機結構組成與工作過程
      • 14.2.2. 處理器指令碼及IA-32平臺瞭解
      • 14.2.3. 相關開發工具
      • 14.2.4. 從“hello world!”開始
      • 14.2.5. 使用gdb調試彙編程序
      • 14.2.6. 數據的傳送
      • 14.2.7. 堆棧的使用
      • 14.2.8. 條件跳轉
      • 14.2.9. 循環指令
      • 14.2.10. 整數運算
      • 14.2.11. 字符串的傳送
      • 14.2.12. 字符串的存儲與加載
      • 14.2.13. 字符串的比較與搜索
      • 14.2.14. 函數的使用
      • 14.2.15. 使用命令行參數
      • 14.2.16. 在彙編語言中調用C庫函數
      • 14.2.17. 在彙編中使用linux系統調用
      • 14.2.18. 內聯彙編
      • 14.2.19. C語言中調用匯編函數
      • 14.2.20. 彙編庫的使用(結)
    • 14.3. [轉]如何在 Linux 下使用 GNU AS 撰寫組合語言
    • 14.4. 在 Linux 下使用 GNU AS 編寫組合語言 - 使用 gdb 進行除錯
    • 14.5. linux反彙編旁門左道小技巧一則
    • 14.6. gas學習 by Jian Lee
    • 14.7. 閱讀assembly code
    • 14.8. Linux asm系統調用:32位和64位的區別
    • 14.9. 如何在linux下編譯彙編程序,內功心法是彙編程序的結構
  • 15. Toolchain
    • 15.1. cross compiler install
    • 15.2. buildroot install
    • 15.3. arm交叉編譯器gnueabi、none-eabi、arm-eabi、gnueabihf、gnueabi區別
  • 16. GDB
    • 16.1. gdb常用指令
    • 16.2. Beej's Quick Guide to GDB
    • 16.3. 簡易 GDB Script 教學,應用
    • 16.4. [轉]GDB的妙用
    • 16.5. GDB中應該知道的幾個調試方法
    • 16.6. KGDB
    • 16.7. [轉]Debug Xorg with GDB on Ubuntu
    • 16.8. [轉]使用 GDB 以樹狀方式將函式流程印出
    • 16.9. gdb 除錯技術
    • 16.10. gdb 的 multiarch
    • 16.11. gdb 編譯
    • 16.12. KGDB Linux Kernel for Samsung
    • 16.13. 用GDB追蹤glibc代碼執行過程
    • 16.14. 使用GDB分析二進位資料
    • 16.15. cgdb 編譯&使用
    • 16.16. gdb C++ 小技巧
    • 16.17. gdb 展開 C/C++ 的 macro
    • 16.18. solib-absolute-prefix 和solib-search-path的區別
    • 16.19. 利用gdb進行shared library的除錯
    • 16.20. 用GDB跟蹤觀察共享庫函數的地址翻譯過程
    • 16.21. KGDB調試LINUX內核
    • 16.22. GDB調試原理 ptrace系統調用
    • 16.23. gdb 遠程qemu-arm調試
    • 16.24. gdb顯示結構體
    • 16.25. GDB C++ STL printer
    • 16.26. GDB dashboard: debug info at a glance
    • 16.27. 在程式碼中使用 signal() 插入中斷點,讓 GDB 暫停程式做 debugging
    • 16.28. 只要出問題,<del>C4炸藥</del> gdb 都能搞定
    • 16.29. 懶人除錯法
    • 16.30. 兩種將gdb的輸出信息存到文件的方法
    • 16.31. 使用call命令在GDB中重複調用某函數
    • 16.32. 通過 GDB 學習 C 語言
    • 16.33. 用GDB反彙編調試linux內核
    • 16.34. GDB下查看記憶體指令(x指令)
    • 16.35. How to debug glib source code via gdb
    • 16.36. How to use GDB debug OpenCV programmes?
    • 16.37. GDB實用教學:自動化你的debug
    • 16.38. GDB 反向調試(Reverse Debugging)
    • 16.39. 讓程序崩潰時產生coredump
    • 16.40. 很經典的GDB調試命令,包括查看變量,查看內存
    • 16.41. gdb調試帶參數程序
    • 16.42. 整理常用的gdb技巧
    • 16.43. GDB命令基礎,讓你的程序bug無處躲藏
    • 16.44. valgrind + gdb
    • 16.45. 調試技巧備忘
    • 16.46. Trace Function Calls Using GDB Revisited
    • 16.47. [GDB] 除錯 python 程式 thread 間互相等待 mutex,造成 deadlock 的問題
  • 17. Linux內核分析雲課堂學習筆記
    • 17.1. 圖解分析彙編代碼以理解計算機是如何工作的
    • 17.2. 基於mykernel的一個簡單的時間片輪轉多道程序內核代碼分析
    • 17.3. 使用gdb跟蹤Linux內核啟動過程
    • 17.4. 使用庫函數API和C代碼中嵌入彙編代碼兩種方式使用同一個系統調用
    • 17.5. 分析system_call中斷處裡過程
    • 17.6. 初學Linux進程的描述和進程的創建
    • 17.7. 初學《Linux內核如何裝載和啟動一個可執行程序》
    • 17.8. 初學Linux中進程調度與進程切換過程
    • 17.9. Linux內核學習總結
    • 17.10. 小博魚筆記
      • 17.10.1. Linux內和分析(一)計算機是如何工作的
      • 17.10.2. Linux內和分析(二)操作系統是如何工作的
  • 18. C++
    • 18.1. 筆記
      • 18.1.1. C++ 通過虛函數表,直接外部訪問類中的函數,並且脫離類
      • 18.1.2. 使用gdb探究C++內存佈局
      • 18.1.3. C++動多態實現之虛函數與虛表指針
    • 18.2. [轉]C++ 對象的內存佈局
    • 18.3. [轉] C++對象模型之簡述C++對象的內存佈局
    • 18.4. [轉]C++對象模型之詳述C++對象的內存佈局
    • 18.5. [轉]C++ 虛函數表解析
    • 18.6. 如何判斷 C++ 物件的類別?
    • 18.7. A Simple C++ Function Call Stack Trace Utility
    • 18.8. 探索C++虛函數在g++中的實現
    • 18.9. 樸實的C++設計
    • 18.10. C++ 智能指針
    • 18.11. Mutex::Autolock for c++
    • 18.12. C++ STL 學習總結(全面)
    • 18.13. 學習C++:實踐者的方法(Beta1)
    • 18.14. STL 容器 (一) - 基本介紹
    • 18.15. STL 容器 (二) - Iterator
    • 18.16. C/C++ 十三誡
    • 18.17. 標準類型轉換:static_cast, dynamic_cast, reinterpret_cast, and const_cast
    • 18.18. example
      • 18.18.1. vector 用法
      • 18.18.2. 父子類別之間函數呼叫
      • 18.18.3. C++: 父類調用子類的成員函數
      • 18.18.4. Std Pair 用法
      • 18.18.5. 2D vector array using std::vector
      • 18.18.6. arraycopy using std::vector
      • 18.18.7. std::vector 封裝到 shared_ptr
      • 18.18.8. shared_ptr 向下轉型
    • 18.19. C++的Class中的一些重點整理
    • 18.20. LOG 建構解構
    • 18.21. c++ typeid() 用法 如何正確的顯示 變數型態名稱的亂碼、異常
    • 18.22. shared_ptr 使用建構解構驗證記憶體回收
    • 18.23. 實例研討: 從 C++ 學習 C 高級技巧
    • 18.24. 為何 Google 禁止工程師使用 C++ static object?
    • 18.25. 是否能讓 C++ template 的標頭檔只含宣告不含實作?
    • 18.26. 改善C++程序的150個建議
    • 18.27. C++物件模型
      • 18.27.1. 物件模式(一)
      • 18.27.2. 物件模式(二)
    • 18.28. C++類對象內存結構
    • 18.29. C++四種繼承關係中內存分佈
    • 18.30. GDB來理解C++ 對象的內存佈局
    • 18.31. 利用函數指針實現父類函數調用子類函數
    • 18.32. c++子類和父類指針的轉換
    • 18.33. C中調用C++與C++調用C
    • 18.34. C++11之多線程
      • 18.34.1. (一、標準庫的線程封裝類Thread和Future)
      • 18.34.2. (二、互斥對象和鎖)
      • 18.34.3. (三、條件變量)
    • 18.35. mutex
      • 18.35.1. C++11併發之std::mutex
      • 18.35.2. timed_mutex 例子
    • 18.36. C++靜態成員函數訪問非靜態成員的幾種方法
    • 18.37. Mutex + Timer 模擬時間鎖
    • 18.38. How to Stop or Terminate a Thread
    • 18.39. C++ 11 thread run函數不需要 static
    • 18.40. template c++ to allocate dynamic matrix 2D
  • 19. GNU make
    • 19.1. example
      • 19.1.1. 好用 Makefile
    • 19.2. CMake
      • 19.2.1. CMake 初探
      • 19.2.2. CMake 入門
      • 19.2.3. 讓cmake顯示gcc/g++的編譯信息
      • 19.2.4. 把玩 CMake 的第一步
      • 19.2.5. cmake CFLAGS CXXFLAGS
      • 19.2.6. CMake 入門/加入編譯選項
      • 19.2.7. CMake for windows
      • 19.2.8. CMake 常用指令
    • 19.3. 如何調試makefile變量
    • 19.4. 跟我一起寫Makefile:make運行
    • 19.5. Makefile的常用技術總結
    • 19.6. Makefile 語法簡介
    • 19.7. Makefile 先編譯出so 後在編譯出執行檔
    • 19.8. 利用 Autotools 來建立 Makefile 檔案
    • 19.9. GNU Makefile 雜項語法備忘
    • 19.10. SCons筆記(詳細版)
    • 19.11. 高級Makefile技巧
    • 19.12. Makefile條件編譯debug版和release版
    • 19.13. Makefile範例教學
    • 19.14. Linux C++編譯及 靜態/動態 鏈接庫 筆記
    • 19.15. Makefile的基本結構
    • 19.16. 深入學習Make命令和Makefile(上)
    • 19.17. 深入學習Make命令和Makefile(下)
    • 19.18. Makefile 中的 $@, $^, $< , $? 符號
    • 19.19. 從頭開始寫項目Makefile
      • 19.19.1. (零):前言
      • 19.19.2. (一):基本規則
      • 19.19.3. (二): 隱含規則自動推導
      • 19.19.4. (三):變量的使用
      • 19.19.5. (四):偽目標
      • 19.19.6. (五):嵌套執行
      • 19.19.7. (六):參數傳遞、條件判斷、include
      • 19.19.8. (七):統一目標輸出目錄
      • 19.19.9. (八):模式規則
      • 19.19.10. (九):目錄搜索
      • 19.19.11. (十):make內嵌函數及make命令顯示
    • 19.20. Makefile 語法和示範 by Jserv
    • 19.21. Makefile 好範例
  • 20. [轉]國王的耳朵是驢耳朵
    • 20.1. Linker script初探 - GNU linker ld手冊略讀
    • 20.2. GNU ld初探
    • 20.3. 系統函式庫的debug 資訊放在那邊?
    • 20.4. Nm 的欄位說明
    • 20.5. Objdump -t 的欄位說明
    • 20.6. C語言在Linux下組裝經驗分享
    • 20.7. Hello World
    • 20.8. Using as 手冊筆記
    • 20.9. Hello Linux ARM 組合語言
    • 20.10. 談談.git 目錄
    • 20.11. Linux下面快速搜尋PDF的方式
    • 20.12. from-source-to-binary-how-gnu-toolchain-works
    • 20.13. 使用strace找出程式缺少的檔案路徑
    • 20.14. GNU LD 手冊略讀
      • 20.14.1. GNU LD 手冊略讀 (0): 目錄和簡介
      • 20.14.2. GNU LD 手冊略讀 (1): Chapter 3 ~ Chapter 3.5
      • 20.14.3. GNU LD 手冊略讀 (2): Chapter 3.6 SETCIONS
      • 20.14.4. GNU LD 手冊略讀 (3): Chapter 3.7 ~ Chapter 3.11
    • 20.15. C語言
      • 20.15.1. 談談strip
      • 20.15.2. C 語言的潛規則型態轉換
      • 20.15.3. C 語言的format string
      • 20.15.4. C 語言的逗號
      • 20.15.5. 系統函式庫的debug 資訊放在那邊?
      • 20.15.6. C語言archive 明明有symbol卻link時出現unsolved Symbol錯誤
      • 20.15.7. Gcc的幾個參數筆記
      • 20.15.8. Linux中誰來呼叫C語言中的main?
      • 20.15.9. Linux下面的C語言使用getopt Parse Command Line參數
      • 20.15.10. 談談autotools 的 Build, Target, 和host
      • 20.15.11. GNU: The C Preprocessor 導讀
      • 20.15.12. Linux 檔案的hole
      • 20.15.13. Linux中使用C語言載入data object 檔案資料
      • 20.15.14. Rtenv的linker Script解釋
      • 20.15.15. 尋找"Hello World\n"
      • 20.15.16. 談談C語言的全域變數和 Linux Object 檔案的關係
      • 20.15.17. 抓漏 - gdb 和 valgrind 合體技
      • 20.15.18. 抓漏 - 使用valgrind檢查C語言memory Leak
      • 20.15.19. C99的inline Function
    • 20.16. Linux Kernel Pratice 0: Buildroot (1/2)
    • 20.17. Linux Kernel Pratice 0: Buildroot (2/2) - 自行編譯kernel
    • 20.18. 使用gdb 靜態分析C 語言名稱和參數相同函數的原始檔位置
    • 20.19. Linux Kernel Pratice 0.5: 使用gdb 加 Qemu Trace Linux Kernel Runtime 行為
  • 21. Shell
    • 21.1. shell十三問
      • 21.1.1. 何為shell
      • 21.1.2. shell prompt(PS1)與Carriage Return(CR)關係
      • 21.1.3. 別人echo、你也echo,是問echo知多少?
      • 21.1.4. ""(雙引號)與''(單引號)差在哪?
      • 21.1.5. 問var=value 在export前後的差在哪?
      • 21.1.6. exec跟source差在哪?
      • 21.1.7. ()與{}差在哪?
      • 21.1.8. $(())與$()還有${}差在哪?
      • 21.1.9. $@與$*差在哪?
      • 21.1.10. && 與 || 差在哪?
      • 21.1.11. >與< 差在哪?
      • 21.1.12. 你要if還是case呢?
      • 21.1.13. for what? while與until差在哪?
    • 21.2. MY_script
      • 21.2.1. 選單
      • 21.2.2. AutoROM_new.sh
      • 21.2.3. script 執行自己log 的紀錄
      • 21.2.4. 批次Audio編碼轉換
    • 21.3. Bash的陷阱
  • 22. simplelinux
    • 22.1. 照妖鏡和火眼金睛
    • 22.2. 局部變量
    • 22.3. 全局變量
    • 22.4. 值傳遞
    • 22.5. 數組與指針
    • 22.6. 字符串
    • 22.7. 結構體
    • 22.8. 奇怪的宏
    • 22.9. 內存對齊
    • 22.10. 函數幀
    • 22.11. 函數幀應用一:誰調用了main?
    • 22.12. 函數幀應用二:所有遞歸都可以變循環
    • 22.13. 未初始化全局變量
    • 22.14. 進程內存分佈
    • 22.15. 編譯優化
    • 22.16. static變量 及 作用域控制
    • 22.17. 變量名、函數名
    • 22.18. 函數指針
    • 22.19. 可變參數
    • 22.20. C語言的棧是靜態的
    • 22.21. 內聯彙編
    • 22.22. 彙編實現的動態棧
    • 22.23. linux0.01進程時間片的消耗和再生
    • 22.24. linux2.6.XX進程切換和時間片再生
  • 23. OpenSource
    • 23.1. C/C++開源程式碼
    • 23.2. 免費的編程中文書籍索引
  • 24. wirelessr
    • 24.1. Linux Shell
      • 24.1.1. Expect妙用無窮
    • 24.2. C Design Pattern
      • 24.2.1. Template Method
      • 24.2.2. Observer
      • 24.2.3. Strategy
      • 24.2.4. Polymorphism in C
  • 25. 設計模式
    • 25.1. 23種設計模式的趣味解釋
    • 25.2. 設計模式經驗談
    • 25.3. 設計模式整理列表
    • 25.4. 物件導向程式設計五大原則:SOLID
    • 25.5. 如何正確地寫出單例模式
    • 25.6. 如何正確地使用設計模式?
    • 25.7. Design Pattern 與 Double Dispatching
    • 25.8. <總結> 設計模式之 開放封閉原則OCP C++示例
    • 25.9. c++面向對象設計的SOLID原則
  • 26. OpenWrt
    • 26.1. OpenWRT 編譯環境搭建
  • 27. Python
    • 27.1. example
      • 27.1.1. 月營收這樣看!三種月營收選股法 – Python實作教學
      • 27.1.2. 個股年成交資訊
      • 27.1.3. Python 基本爬蟲程式 以 Google 新聞為例
      • 27.1.4. Python 新聞關鍵字查詢
      • 27.1.5. PTTcrawler (PTT文章爬蟲)
      • 27.1.6. Python_by_David_Chiu
      • 27.1.7. google news 爬文
      • 27.1.8. 如何抓取廉價航空的機票價格 – 以酷航
      • 27.1.9. 露天拍賣 & 編碼問題
      • 27.1.10. fb 社團爬標題發文者內容
      • 27.1.11. Python中將打印輸出導向檔案
      • 27.1.12. 轉換GDB調用棧到流程圖
      • 27.1.13. Retrieving Gmail blocked attachments
      • 27.1.14. 如何抓取上市股票交易明細
      • 27.1.15. 臺鐵資料下載
      • 27.1.16. Find all files in directory with extension .txt in Python
      • 27.1.17. Audio 利用ffmpeg 編碼轉換
      • 27.1.18. 集臺證所融資融券餘額全部資料
      • 27.1.19. goodinfo
      • 27.1.20. sqlite3 技術手冊
      • 27.1.21. 利用PYTHON + GMAIL SMTP 寄送EMAIL及附檔 CATEGORIES
      • 27.1.22. Post 抓取高鐵
      • 27.1.23. goodinfo 經營績效
      • 27.1.24. 使用Pandas 函式將臺灣銀行的牌告匯率存進資料庫中
      • 27.1.25. 抓三大法人的網頁資料
      • 27.1.26. 讀取檔案指定的行
      • 27.1.27. 產生曲線圖
      • 27.1.28. 畫出Euler angle 曲線圖
      • 27.1.29. 標準差計算
      • 27.1.30. 畫四元數曲線圖
      • 27.1.31. 多筆行平均總和
      • 27.1.32. SWIG
      • 27.1.33. Scrapy + Python 3: PTT 資料抓取與分析
      • 27.1.34. ptt using selenium
      • 27.1.35. Line notify
      • 27.1.36. PTT爬文物品 + line 發送
      • 27.1.37. 露天拍賣 換頁
      • 27.1.38. ultrasound raw data
      • 27.1.39. campsaver.py
      • 27.1.40. 選出股本50億以上的股票代號
      • 27.1.41. goodinfo 股票篩選
      • 27.1.42. 抓取臺股證交所每日股價資料,儲存到MongoDB
      • 27.1.43. 音頻文件按照正常語句,斷句拆分的處理方法
      • 27.1.44. 台股大盤季線計算
    • 27.2. pandas
      • 27.2.1. pandas 入門
      • 27.2.2. Python Pandas DataFrame 的 iloc[0] 與 iloc[[0]]
      • 27.2.3. Pandas Dataframes to_html: Highlighting table rows
      • 27.2.4. open HTML 網頁分析
      • 27.2.5. Pandas 無法處理HTML 透過Soup 輔助
      • 27.2.6. pandas create dataframe example
      • 27.2.7. Convert list of numpy.float64 to float and Converting strings to floats in a DataFrame
      • 27.2.8. Pandas Excel example
      • 27.2.9. 十分鐘快速入門 Pandas
      • 27.2.10. Add a row to dataframe
      • 27.2.11. Pandas DataFrame 的 iloc[0] 與 iloc[[0]]
      • 27.2.12. 數據操作(Pandas) 完整
      • 27.2.13. pandas read csv
      • 27.2.14. read html
    • 27.3. 編碼
      • 27.3.1. Python - 瞭解bytes、str與unicode的區別
      • 27.3.2. 淺談 python2及 python3處理中文字串編碼的差異
      • 27.3.3. 立即停止使用 setdefaultencoding('utf-8'), 以及為什麼
      • 27.3.4. Python + Requests 編碼問題
      • 27.3.5. Python 的編碼
      • 27.3.6. 瞭解Unicode
      • 27.3.7. python string and unicode string
      • 27.3.8. python2 與 python3 編碼差異
    • 27.4. django
      • 27.4.1. 使用heroku部署django應用測試
      • 27.4.2. Python Django 快速入門教學
      • 27.4.3. Django 基本命令
    • 27.5. 正則 Regex
      • 27.5.1. Python的re模塊
    • 27.6. BeautifulSoup
      • 27.6.1. remove script tags with BeautifulSoup
      • 27.6.2. 使用BeautifulSoup
      • 27.6.3. Python使用beautifulsoup解析HTML、XML
      • 27.6.4. python爬蟲之BeautifulSoup
    • 27.7. 爬蟲
      • 27.7.1. Python爬蟲模擬登錄的黑魔法
      • 27.7.2. Selenium 使用 CSS locator 定位 HTML element
    • 27.8. 常見錯誤訊息
    • 27.9. 安裝 Jupyter
    • 27.10. 編譯python & 安裝pip
    • 27.11. pip 使用詳解
    • 27.12. 5個很好的Python面試題
    • 27.13. Python-網頁爬蟲-&-文本處理-&-科學計算-&-機器學習-&-數據挖掘兵器譜
    • 27.14. 選擇Python科學計算發行版
    • 27.15. Python常用的數學函數
    • 27.16. python debug 入門
    • 27.17. Python 直譯器如何處理字串編碼
    • 27.18. Python--線性代數篇
    • 27.19. python字符串連接的N種方式
    • 27.20. Python調用Linux下的動態庫(so)
    • 27.21. python堆棧回溯示例代碼
    • 27.22. Generate c/c++ header file from a CSV file (for array declaration)
    • 27.23. 觀察技巧 with Chrome開發人員工具
    • 27.24. steepandcheap alerts
    • 27.25. Anaconda使用總結
    • 27.26. python setup.py uninstall
    • 27.27. Python 原始碼 使用 gdb trace
    • 27.28. Debugging CPython with gdb
    • 27.29. PTT gamesale 板的買賣文
    • 27.30. How to define two-dimensional array in python
    • 27.31. Python技巧(漂亮又通順的程式碼)
    • 27.32. DB
      • 27.32.1. SQLite - Python 安裝
    • 27.33. Python 讀取csv的某行
    • 27.34. 用 Anaconda 完美解決 Python2 和 python3 共存問題
    • 27.35. Embed python / numpy in C++
    • 27.36. practice
    • 27.37. Selenium
    • 27.38. utctime to localtime
    • 27.39. 區塊鏈
      • 27.39.1. 50 行 Python 代碼構建一個區塊鏈
  • 28. Vim
    • 28.1. HOWTO - vi, vim
    • 28.2. 編譯vim8並添加對lua,python,ruby的支持
    • 28.3. NVIM
  • 29. TDD
    • 29.1. 程式設計師升級必練內功:TDD Kata
  • 30. Raspberry_Pi
    • 30.1. 燒錄新版系統
    • 30.2. Hello world on qemu Raspberry Pi
    • 30.3. 自己動手編譯 Raspberry Pi 的 Kernel
    • 30.4. Building and Deploying Raspberry PI Kernel
    • 30.5. Preparing Raspberry PI for JTAG Debugging
    • 30.6. Raspberry Pi 2 Bare Metal Multicore JTAG Debugging
    • 30.7. rpi, serial and kgdb
    • 30.8. [Raspberry Pi Project] How does Raspberry Pi boot?
    • 30.9. [Raspberry Pi Project] Compile and update Raspbian kernel
    • 30.10. [Raspberry Pi Project] kernel啟動參數
    • 30.11. Raspberry Pi 編譯 Linux 核心
    • 30.12. 用 Raspberry pi 寫驅動程式 -- 基本觀念
    • 30.13. 用 Raspberry pi 寫驅動程式 -- 範例1:LED
    • 30.14. 在Raspberry pi 上建立自己的system call
    • 30.15. Raspberry pi GPIO 控制
    • 30.16. Raspberry Pi的開始流程
    • 30.17. consile fullscreen
    • 30.18. Raspberry Pi:Raspbian增加deb套件的下載來源
    • 30.19. 使用 C++ 讀取 MPU-6050 加速度計與陀螺儀感測資料
    • 30.20. 使用 MPU-6050 的 DMP 來取得更精準的運動感測資料
    • 30.21. kgdb for RPI
    • 30.22. telnet for raspberry
    • 30.23. Debugging Raspberry Pi Linux kernel with JTAG and GDB
    • 30.24. raspberrypi2_kernel_debug
    • 30.25. fichugh
      • 30.25.1. buildRoot study - 建立自己的作業系統
      • 30.25.2. u-boot 組態研究- raspberry pi 2
      • 30.25.3. How to Build a GCC Cross-Compiler
    • 30.26. ARM assembler in Raspberry Pi
      • 30.26.1. Table of contents
      • 30.26.2. Introduction
      • 30.26.3. Registers and basic arithmetic
      • 30.26.4. Memory, addresses. Load and store.
      • 30.26.5. GDB
      • 30.26.6. Branching
      • 30.26.7. Control structures
      • 30.26.8. Indexing modes
      • 30.26.9. Arrays and structures
      • 30.26.10. Functions (I)
      • 30.26.11. Functions (II). The stack
      • 30.26.12. Predication
      • 30.26.13. Loops and the status register
      • 30.26.14. Floating point numbers
      • 30.26.15. Matrix multiply
      • 30.26.16. Integer division
      • 30.26.17. Switch control structure
      • 30.26.18. Passing data to functions
      • 30.26.19. Local data and the frame pointer
      • 30.26.20. The operating system
      • 30.26.21. Indirect calls
      • 30.26.22. Subword data
      • 30.26.23. The Thumb instruction set
      • 30.26.24. Nested functions
      • 30.26.25. Trampolines
      • 30.26.26. Integer SIMD
      • 30.26.27. A primer about linking
      • 30.26.28. Objects and libraries
    • 30.27. Exploring AArch64 assembler
      • 30.27.1. Chapter 1
      • 30.27.2. Chapter 2
      • 30.27.3. Chapter 3
      • 30.27.4. Chapter 4
      • 30.27.5. Chapter 5
      • 30.27.6. Chapter 6
      • 30.27.7. Chapter 7
      • 30.27.8. Chapter 8
    • 30.28. raspberry 3b 64bit 系統安裝,以及交叉編譯環境、調試環境的搭建
    • 30.29. 樹莓派autossh反向隧道
    • 30.30. Kernel Initialization
    • 30.31. Debugging Raspberry Pi 3 with JTAG
    • 30.32. pi3 設定
    • 30.33. 兩種方式教你編譯更新RaspberryPi3的內核
  • 31. OpenGL
    • 31.1. opengl(mesa) for ubuntu14.04
    • 31.2. ubuntu 14.04 安裝OpenGL(基於freeglut)
    • 31.3. Ubuntu下安裝OpenGL圖形庫
    • 31.4. OpenGL,glx,glaux,glut,freeglut,glew,glfw,mesa
  • 32. arduino
    • 32.1. Processing communication with Arduino via serial
    • 32.2. 使用gdb實時調式arduino
    • 32.3. Arduino UNO控制板簡介
    • 32.4. 時脈算換
      • 32.4.1. I2C protocol 原理及應用
    • 32.5. 邱小新8051
      • 32.5.1. I2C protocol 時間計算
      • 32.5.2. 8051 clock
      • 32.5.3. I2C protocol 原理及應用
    • 32.6. I2C
    • 32.7. 讓 arduino 不需要使用 sudo
  • 33. edb
    • 33.1. EDB (Evan's Debugger)
  • 34. Debug Tips
    • 34.1. 分析問題想法筆記
    • 34.2. gcc/g++ -instrument-functions 參數
    • 34.3. core dump 之前的 frame
    • 34.4. 使用valgrind檢查cache命中率,提高程序性能
    • 34.5. GDB調試技巧:gdb at pid無法調試的問題
    • 34.6. GDB調試技巧:調試複雜的宏定義
    • 34.7. 使用valgrind檢查內存問題
    • 34.8. GDB技巧:使用checkpoint解決難以復現的Bug
    • 34.9. 強制進程產生coredump,檢測死鎖以及進程快照
    • 34.10. 如何快速地在每個函數入口處加入相同的語句?
    • 34.11. C++源碼的調用圖生成
  • 35. thinker_note
    • 35.1. 如果有人要求你改善系統
    • 35.2. 閱讀程式碼的心理層面
    • 35.3. 學習程式設計的方法?!
    • 35.4. 讀 code 和讀文章應該差不多
    • 35.5. 程式碼要清的多乾淨?
    • 35.6. GDB 追蹤 memory corruption
    • 35.7. GDB 自動化 debug
    • 35.8. unittest 與 pdb 改善開發效率
    • 35.9. 程式註解如何寫
    • 35.10. 程式碼的可讀性比較
    • 35.11. 軟體元件的使用
  • 36. GCC_and_Clang
    • 36.1. GCC
      • 36.1.1. __thread關鍵字
      • 36.1.2. gcc中-pthread和-lpthread的區別
      • 36.1.3. memory layout C++ objects for g++
      • 36.1.4. gcc -E -P
      • 36.1.5. g++參數介紹
      • 36.1.6. gcc編譯,ld連接
      • 36.1.7. 編譯步驟 - 組譯 連結 測試
      • 36.1.8. Linux GCC 編譯4個過程
      • 36.1.9. dlopen() 與 GCC -rdynamic 選項
    • 36.2. Clang
      • 36.2.1. memory layout C++ objects for clang
  • 37. FreeRTOS
    • 37.1. FreeRTOS-GCC-ARM926ejs_QEMU
    • 37.2. [STM32] 4. 移植 FreeRTOS
  • 38. tinyclub
    • 38.1. 源碼分析
      • 38.1.1. 靜態分析 C 程序函數調用關係圖
      • 38.1.2. 動態分析 C 程序函數調用關係
      • 38.1.3. 函數調用關係繪製方法與逆向建模
      • 38.1.4. 動態分析 Linux 內核函數調用關係
    • 38.2. Linux 彙編語言快速上手:4大架構一塊學
  • 39. VR
    • 39.1. Linux Build Instructions
    • 39.2. kalman filter
    • 39.3. MPU6050
    • 39.4. 卡爾曼濾波 配合程式 講解
    • 39.5. MPU6050數據輕鬆分析
    • 39.6. Quat Euler 互轉
    • 39.7. 四元數 diff
  • 40. Treace code
    • 40.1. [轉]閱讀程式碼的心理層面
    • 40.2. 我的原始碼閱讀之道
    • 40.3. 磨練閱讀程式技巧,不受黑盒限制
    • 40.4. 閱讀他人的程式碼
      • 40.4.1. 讀懂程式碼,使心法皆為我所用
      • 40.4.2. 摸清架構,便可輕鬆掌握全貌
      • 40.4.3. 優質工具在手,讀懂程式非難事
      • 40.4.4. 望文生義,進而推敲組件的作用
      • 40.4.5. 找到程式入口,再由上而下抽絲剝繭
      • 40.4.6. 閱讀的樂趣:透過程式碼認識作者
  • 41. Log
    • 41.1. 打印log
    • 41.2. 如何在 Android 各 level ( 包含 user space 與 kernel space ) 使用dump call stack的方法
  • 42. embedded
    • 42.1. JTAG是把屠龍刀,說說其作用和原理
    • 42.2. TQ210
      • 42.2.1. TQ210 成功使用 JLink debug kernel
  • 43. Linux Network
    • 43.1. Linux Socket 入門
    • 43.2. Socket programming 筆記
    • 43.3. TCP Socket Programming 學習筆記
    • 43.4. ntohs, ntohl, htons,htonl的比較
    • 43.5. AF_INET和PF_INET的區別
  • 44. node.js
    • 44.1. 安裝 NodeJS、NPM
    • 44.2. JavaScript 快速入門[轉]
      • 44.2.1. JavaScript 快速入門(序)
      • 44.2.2. JavaScript 快速入門(1/10)- 訊息輸出
      • 44.2.3. JavaScript 快速入門(2/10)- 變數與資料型別
      • 44.2.4. JavaScript 快速入門(3/10)- 數字/ 字串/ 布林值
      • 44.2.5. JavaScript 快速入門(4/10)- 運算子
      • 44.2.6. JavaScript 快速入門(5/10)- 敘述句 if / switch
      • 44.2.7. JavaScript 快速入門(6/10)- 迴圈
      • 44.2.8. JavaScript 快速入門(7/10)- 函式
      • 44.2.9. JavaScript 快速入門(8/10)- 物件
      • 44.2.10. JavaScript 快速入門(9/10)- 陣列
      • 44.2.11. JavaScript 快速入門(10/10)- 使用內建物件
  • 45. 100 gdb tips
    • 45.1. 信息顯示
      • 45.1.1. 顯示gdb版本信息
      • 45.1.2. 顯示gdb版權相關信息
      • 45.1.3. 輸出信息多時不會暫停輸出
      • 45.1.4. 啟動時不顯示提示信息
      • 45.1.5. 退出時不顯示提示信息
    • 45.2. 函數
      • 45.2.1. 列出函數的名字
      • 45.2.2. 是否進入帶調試信息的函數
      • 45.2.3. 進入不帶調試信息的函數
      • 45.2.4. 退出正在調試的函數
      • 45.2.5. 直接執行函數
      • 45.2.6. 打印函數堆棧幀信息
      • 45.2.7. 打印尾調用堆棧幀信息
      • 45.2.8. 選擇函數堆棧幀
      • 45.2.9. 向上或向下切換函數堆棧幀
    • 45.3. 斷點
      • 45.3.1. 在匿名空間設置斷點
      • 45.3.2. 在程序地址上打斷點
      • 45.3.3. 在程序入口處打斷點
      • 45.3.4. 在文件行號上打斷點
      • 45.3.5. 保存已經設置的斷點
      • 45.3.6. 設置臨時斷點
      • 45.3.7. 設置條件斷點
      • 45.3.8. 忽略斷點
    • 45.4. 觀察點
      • 45.4.1. 設置觀察點
      • 45.4.2. 設置觀察點只針對特定線程生效
      • 45.4.3. 設置讀觀察點
      • 45.4.4. 設置讀寫觀察點
    • 45.5. Catchpoint
      • 45.5.1. 讓catchpoint只觸發一次
      • 45.5.2. 為fork調用設置catchpoint
      • 45.5.3. 為vfork調用設置catchpoint
      • 45.5.4. 為exec調用設置catchpoint
      • 45.5.5. 為系統調用設置catchpoint
      • 45.5.6. 通過為ptrace調用設置catchpoint破解anti-debugging的程序
    • 45.6. 打印
      • 45.6.1. 打印ASCII和寬字符字符串
      • 45.6.2. 打印STL容器中的內容
      • 45.6.3. 打印大數組中的內容
      • 45.6.4. 打印數組中任意連續元素值
      • 45.6.5. 打印數組的索引下標
      • 45.6.6. 打印函數局部變量的值
      • 45.6.7. 打印進程內存信息
      • 45.6.8. 打印靜態變量的值
      • 45.6.9. 打印變量的類型和所在文件
      • 45.6.10. 打印內存的值
      • 45.6.11. 打印源代碼行
      • 45.6.12. 每行打印一個結構體成員
      • 45.6.13. 按照派生類型打印對象
      • 45.6.14. 指定程序的輸入輸出設備
      • 45.6.15. 使用“$\\_”和“$\\__”變量
      • 45.6.16. 打印程序動態分配內存的信息
      • 45.6.17. 打印調用棧幀中變量的值
    • 45.7. 多進程/線程
      • 45.7.1. 調試已經運行的進程
      • 45.7.2. 調試子進程
      • 45.7.3. 同時調試父進程和子進程
      • 45.7.4. 查看線程信息
      • 45.7.5. 在Solaris上使用maintenance命令查看線程信息
      • 45.7.6. 不顯示線程啟動和退出信息
      • 45.7.7. 只允許一個線程運行
      • 45.7.8. 使用“$_thread”變量
      • 45.7.9. 一個gdb會話中同時調試多個程序
      • 45.7.10. 打印程序進程空間信息
      • 45.7.11. 使用“$_exitcode”變量
    • 45.8. core dump文件
      • 45.8.1. 為調試進程產生core dump文件
      • 45.8.2. 加載可執行程序和core dump文件
    • 45.9. 彙編
      • 45.9.1. 設置彙編指令格式
      • 45.9.2. 在函數的第一條彙編指令打斷點
      • 45.9.3. 自動反彙編後面要執行的代碼
      • 45.9.4. 將源程序和彙編指令映射起來
      • 45.9.5. 顯示將要執行的彙編指令
      • 45.9.6. 打印寄存器的值
      • 45.9.7. 顯示程序原始機器碼
    • 45.10. 改變程序的執行
      • 45.10.1. 改變字符串的值
      • 45.10.2. 設置變量的值
      • 45.10.3. 修改PC寄存器的值
      • 45.10.4. 跳轉到指定位置執行
      • 45.10.5. 使用斷點命令改變程序的執行
      • 45.10.6. 修改被調試程序的二進制文件
    • 45.11. 信號
      • 45.11.1. 查看信號處理信息
      • 45.11.2. 信號發生時是否暫停程序
      • 45.11.3. 信號發生時是否打印信號信息
      • 45.11.4. 信號發生時是否把信號丟給程序處理
      • 45.11.5. 給程序發送信號
      • 45.11.6. 使用“$_siginfo”變量
    • 45.12. 共享庫
      • 45.12.1. 顯示共享鏈接庫信息
    • 45.13. 腳本
      • 45.13.1. 配置gdb init文件
      • 45.13.2. 按何種方式解析腳本文件
      • 45.13.3. 保存歷史命令
    • 45.14. 源文件
      • 45.14.1. 設置源文件查找路徑
      • 45.14.2. 替換查找源文件的目錄
    • 45.15. 圖形化界面
      • 45.15.1. 進入和退出圖形化調試界面
      • 45.15.2. 顯示彙編代碼窗口
      • 45.15.3. 顯示寄存器窗口
      • 45.15.4. 調整窗口大小
    • 45.16. 其它
      • 45.16.1. 命令行選項的格式
      • 45.16.2. 支持預處理器宏信息
      • 45.16.3. 使用命令的縮寫形式
      • 45.16.4. 在gdb中執行shell命令和make
      • 45.16.5. 在gdb中執行cd和pwd命令
      • 45.16.6. 設置命令提示符
      • 45.16.7. 設置被調試程序的參數
      • 45.16.8. 設置被調試程序的環境變量
      • 45.16.9. 得到命令的幫助信息
      • 45.16.10. 記錄執行gdb的過程
  • 46. compiler
    • 46.1. 手把手教你構建 C 語言編譯器
      • 46.1.1. 前言
      • 46.1.2. 設計
      • 46.1.3. 虛擬機
      • 46.1.4. 詞法分析器
      • 46.1.5. 遞歸下降
      • 46.1.6. 變量定義
      • 46.1.7. 函數定義
      • 46.1.8. 語句
      • 46.1.9. 表達式
      • 46.1.10. 總結
    • 46.2. 自己動手寫編譯器、鏈接器
    • 46.3. 深入淺出教你寫編譯器
    • 46.4. C-compiler-optimizations
    • 46.5. tcc 原始碼分析技巧
  • 47. linked_and_loader
    • 47.1. 基礎範例
      • 47.1.1. LIBRARY_PATH和LD_LIBRARY_PATH環境變量的區別
      • 47.1.2. so file crash using addr2line
    • 47.2. 把共享庫(SO)加載到指定的內存地址
    • 47.3. Linux GOT與PLT
    • 47.4. GOT和PLT原理簡析
    • 47.5. Linux 動態連結資料庫
    • 47.6. 通過 GDB 調試理解 GOT/PLT
    • 47.7. ELF文件的加載
    • 47.8. 再議PLT與GOT
    • 47.9. Linux gcc鏈接動態庫出錯:LIBRARY_PATH和LD_LIBRARY_PATH的區別
    • 47.10. Linux 靜態庫與共享庫的使用
    • 47.11. linux 下動態鏈接實現原理
    • 47.12. Linux 共用程式庫的組織
    • 47.13. 動態載入函式庫 (Dynamically Lodaded Libraries)
    • 47.14. gcc編譯參數-fPIC的一些問題
    • 47.15. Linux下怎樣判斷一個binary是否可以debug
    • 47.16. 查看正在運行的動態鏈接的程序中,某個動態庫中函數的虛擬地址
    • 47.17. 使用另一個版本的glibc
    • 47.18. linux 動態裝載動態庫 ldd,ldconfig,ld.so.conf, ld.so.cache
    • 47.19. Linux 的動態連結與載入 (Dynamic Linking)
    • 47.20. ld-linux.so.X查找和加載共享動態庫的順序
    • 47.21. -L,-rpath-link,-rpath 動態庫的鏈接和鏈接選項
    • 47.22. gcc -rpath 動態庫路徑
    • 47.23. 動態庫及靜態庫的製作步驟講解
    • 47.24. 動態鏈接庫的搜索路徑
    • 47.25. Linux添加環境變量與GCC編譯器添加INCLUDE與LIB環境變量
    • 47.26. linux下運行時連結庫的路徑順序
    • 47.27. gcc/g++鏈接時.o文件以及庫的順序問題
    • 47.28. 程式設計師的自我修養
      • 47.28.1. 介紹
      • 47.28.2. 編譯和連結
      • 47.28.3. 目的檔
      • 47.28.4. 靜態連結
      • 47.28.5. 鏈接、裝載、與庫_讀書筆記
    • 47.29. gcc 編譯順序問題
    • 47.30. C 編譯鏈接
    • 47.31. C 加載過程
  • 48. Bochs
    • 48.1. OS dev的Bochs調試
  • 49. Nginx
    • 49.1. nginx 模塊 使用gdb調試nginx源碼
  • 50. Other
    • 50.1. 練寫作可以讓你成為「神級程式設計師」,但不是不二法門
    • 50.2. 編程的智慧
    • 50.3. 為什麼 thread (執行緒、線程)越少越好?
    • 50.4. 頂尖程序員不同於常人的5個區別
    • 50.5. 認知學習法 by xdite
    • 50.6. 認知學習法 - 自學篇 by xdite
    • 50.7. 笨方法學語言
    • 50.8. 我是如何學一門新技術的
    • 50.9. 測試的道理
    • 50.10. 快速掌握一個語言最常用的50%
  • 51. DS_ALGO
    • 51.1. 內核雙向鏈表的使用
    • 51.2. Linux kernel linked list impl. for user space
    • 51.3. Linux的container_of 與 offsetof巨集
    • 51.4. linux list.h for userspace
    • 51.5. Linux kernel doubly linked-list implementation
  • 52. C
    • 52.1. offsetof與container_of
    • 52.2. read csv in c
    • 52.3. Q Format Number in C
    • 52.4. IEEE764 using C
    • 52.5. struct pointer to array
    • 52.6. gyro raw data filter
    • 52.7. Template in C
    • 52.8. signed 跟 unsigned 高位元差別
    • 52.9. 21st Century C / 21世紀 C 語言 筆記
    • 52.10. 你所不知道的 C 語言
      • 52.10.1. 為何要深入學習C語言
      • 52.10.2. 指標篇
      • 52.10.3. 編譯器和最佳化原理篇
      • 52.10.4. 函式呼叫篇
      • 52.10.5. 物件導向程式設計篇
      • 52.10.6. 前置處理器應用篇
      • 52.10.7. 動態連結器篇
      • 52.10.8. 遞迴呼叫篇
      • 52.10.9. 數值系統篇
      • 52.10.10. 技巧篇
      • 52.10.11. server-framework
      • 52.10.12. 開發工具和規格標準
      • 52.10.13. goto 和流程控制篇
      • 52.10.14. linked list 和非連續記憶體操作
      • 52.10.15. Stream I/O 和 EOF
      • 52.10.16. 未定義行為篇
      • 52.10.17. 記憶體管理、對齊及硬體特性
    • 52.11. 幫 C 語言加上 Garbage Collector
    • 52.12. memcpy alignment
    • 52.13. 如何得知 malloc/free 的呼叫次數
    • 52.14. How to use LD_PRELOAD and dlsym hook
    • 52.15. C Style
    • 52.16. C 語言的奇技淫巧
  • 53. OpenSoruce
    • 53.1. 開源網絡庫的分析libevent muduo nginx
    • 53.2. libevent 專案分析
    • 53.3. 使用 gdb 研究 libevent
    • 53.4. 15款值得學習的小型開源項目,帶你快速步入開源世界
    • 53.5. 最值得閱讀學習的 10 個 C 語言開源項目代碼
  • 54. STM32
    • 54.1. STM32的FPU體驗
  • 55. hacker
    • 55.1. c9s
      • 55.1.1. 快速進入工作狀況的十個要點
      • 55.1.2. API 設計 — 建構之道: 類別建構子設計
      • 55.1.3. 架構之必要
      • 55.1.4. 談設計模式之迷思
      • 55.1.5. 想創業?再想想吧
      • 55.1.6. 健康的泡沫
      • 55.1.7. API 設計— 命名之術
  • 56. Saleae
    • 56.1. ARM CM4 Pratice (3): USART 初探
  • 57. Docker
    • 57.1. 構建docker開發環境
    • 57.2. 門外漢的 Docker 小試身手
    • 57.3. OpenKore in Docker Dockerfile
    • 57.4. 利用iptables給Docker綁定一個外網IP
    • 57.5. Docker 修改默認存儲位置
    • 57.6. Docker 安裝使用
    • 57.7. 快速刪除多個 docker 容器的方法
    • 57.8. ubuntu docker 開啟ssh
    • 57.9. QEMU + GDB + LK4 on Docker
  • 58. Javascript
    • 58.1. 14款基於javascript的數據可視化工具
  • 59. ncku 嵌入式課程 (Jserv)
    • 59.1. 2016
      • 59.1.1. 利用 gprof2dot 工具,將最耗時的函式與呼叫的路徑視覺化
      • 59.1.2. GDB command開發說明(use Python)
      • 59.1.3. GPIO
      • 59.1.4. 重新理解數值
      • 59.1.5. 類似 C++ template 來實做呢?C11 有 _Generic 關鍵字
      • 59.1.6. mergesort-concurrent
      • 59.1.7. A01: phonebook
      • 59.1.8. A02: raytracing
      • 59.1.9. A03: compute-pi
      • 59.1.10. A04: clz
      • 59.1.11. A05: introspect
      • 59.1.12. A06: phonebook-concurrent
      • 59.1.13. Matrix Multiplication using SIMD
  • 60. 逆向工程
    • 60.1. Linux 逆向工程的工具介紹
  • 61. Git
    • 61.1. Keeping a fork up to date
    • 61.2. Clone all repos from a GitHub organization
    • 61.3. Git倉庫遷移而不丟失log的方法
    • 61.4. 如何將GIT存儲庫從一個服務器遷移到新服務器
    • 61.5. git文件夾內容過大的解決方法
    • 61.6. git commit tree 保留最新20筆
  • 62. Interview
    • 62.1. DS_Algo
      • 62.1.1. Linked List的複習總結
      • 62.1.2. 面試精選:鏈表問題集錦
      • 62.1.3. 鏈表面試常見合集
      • 62.1.4. 編程判斷兩個鏈表是否相交
    • 62.2. 面試經驗談 - C 語言篇
    • 62.3. CHT
      • 62.3.1. 筆試
  • 63. Java
    • 63.1. 開檔讀檔 & 正則範例
    • 63.2. Thread和Runnable的區別
    • 63.3. 用javac命令行編譯多個java文件
    • 63.4. Java -jar 選項與 -cp/-classpath
    • 63.5. 打印函數 / call stack
    • 63.6. Ubuntu 16.04 安裝 Eclipse
    • 63.7. java命令行編譯運行多個java文件
    • 63.8. Java中變數有效的範圍(Variable Scope)
    • 63.9. Java Thread 之間 記憶體空間分析
    • 63.10. java中如何給Runnable線程傳遞參數?
    • 63.11. Java的兩種多線程實現方式
    • 63.12. gradle init --type java-application
    • 63.13. Unit test
    • 63.14. Java併發程式設計-Future系列之Future的介紹和基本用法
    • 63.15. Java_Gossip
      • 63.15.1. 例外處理
        • 63.15.1.1. 要抓還是要拋?
        • 63.15.1.2. 貼心還是造成麻煩?
  • 64. Linear Algebra
    • 64.1. 理解矩陣
    • 64.2. 旋轉矩陣與四元數
  • 65. Redis
  • 66. OpenCV
    • 66.1. 安裝 OpenCV
    • 66.2. ubuntu下多版本opencv切換
    • 66.3. IplImage 和 Mat 互轉
    • 66.4. 通過C++ wrapper 實現存取圖像像素
    • 66.5. 如何把OpenCV Python獲取的圖像傳遞到C層處理
    • 66.6. ubuntu 18.04 安裝 OpenCV3.4 contrib 編譯 C++
    • 66.7. Opencv 讀寫圖檔基本操作
    • 66.8. Opencv 3.4 + gdb
    • 66.9. gdb-imagewatch
    • 66.10. Opencv Makefile
  • 67. Qt
    • 67.1. ubuntu編譯安裝 qt 5.8
    • 67.2. 在QT官網下載最新的版本
    • 67.3. 環境安裝 & 第一個 Qt 程式
    • 67.4. 花了 6 年才找到的 bug?
  • 68. SlickEdit
  • 69. Kotlin
    • 69.1. Kotlin ?!! 這些符號到底什麼意思
    • 69.2. 簡介 Kotlin: run, let, with, also 和 apply
    • 69.3. 與Java的比較
  • 70. Rust
    • 70.1. Rust Note
    • 70.2. 給 C++ 使用者的 Rust 簡介
    • 70.3. Rust 概念
    • 70.4. Rust筆記
    • 70.5. Rust 與記憶體
    • 70.6. 給 C++ 使用者的 Rust 簡介:智慧指標
    • 70.7. 給 C++ 使用者的 Rust 簡介:字串與陣列
    • 70.8. 給 C++ 使用者的 Rust 簡介:參考型別與 Borrow Checker
    • 70.9. 給 C++ 使用者的 Rust 簡介
    • 70.10. 給 C++ 使用者的 Rust 簡介:物件導向篇
    • 70.11. 物件導向程式設計
    • 70.12. Linux核心採納Rust的狀況
    • 70.13. 30 天深入淺出 Rust
      • 70.13.1. Overview
      • 70.13.2. 安裝環境
      • 70.13.3. Rust 的套件管理工具 Cargo 與套件倉庫
      • 70.13.4. Rust 基礎
      • 70.13.5. 變數的所有權與借出變數
  • 71. Deep Learning
    • 71.1. 人工智慧、機器學習與深度學習間有什麼區別?
    • 71.2. 機器學習(Machine Learning) 介紹
    • 71.3. 深度學習開發環境配置:Ubuntu1 6.04+Nvidia GTX 1080+CUDA 8.0
    • 71.4. 在Linux Ubuntu 安裝 Tensorflow 與Keras
  • 72. Parallel Computing
    • 72.1. 並行計算工具的選擇
  • 73. Cuda
    • 73.1. CUDA ---- Hello World From GPU
  • 74. Math
    • 74.1. 三角函數
    • 74.2. Angle Between Two 3D Vectors
    • 74.3. FINDING OPTIMAL ROTATION AND TRANSLATION BETWEEN CORRESPONDING 3D POINTS
    • 74.4. 以矩陣來表示轉換
    • 74.5. NumPy 矩陣乘法
    • 74.6. 奇異值分解(SVD) --- 幾何意義
    • 74.7. NumPy中array和matrix用於矩陣乘法時的區別
    • 74.8. OpenGL Angles to Axes
  • 75. Third-party
    • 75.1. Eigen 使用
    • 75.2. C++矩陣處理庫--Eigen初步使用
    • 75.3. C++矩陣庫 Eigen 快速入門
    • 75.4. Vector3d Quaterniond Affine3d MatrixXd for Eigen
    • 75.5. Google Protocol Buffers
      • 75.5.1. Google Protocol Buffers 學習筆記
    • 75.6. openh264在ubuntu下的android版編譯
  • 76. Big Data
    • 76.1. Spark與Hadoop關係
    • 76.2. TensorFlow和Spark MLlib有什麼區別?
  • 77. IOT
    • 77.1. ESP8266 & NodeMCU 開發入門
    • 77.2. 在 NODEMCU 上執行 MICROPYTHON
  • 78. media player
    • 78.1. vlc-android 編譯 for ubuntu 18.04
    • 78.2. C++ 影像串流 Raspberry Pi camera RTSP 影像串流
    • 78.3. 流媒體與直播技術學習筆記
    • 78.4. Streaming 通訊協定 RTP RTCP RTSP RTMP HLS 介紹
  • 79. 投資
    • 79.1. ubuntu TA-lib的安裝
    • 79.2. talib BBands + twstock
    • 79.3. finviz 篩選
  • 80. Golang
  • Published with GitBook

Jason note

Linux Device Driver Programming

轉載於

http://silverfoxkkk.pixnet.net/blog/post/41151631-lddp%3A%E4%B8%80%E3%80%81linux-%E8%A3%9D%E7%BD%AE%E9%A9%85%E5%8B%95%E7%A8%8B%E5%BC%8F%E7%9A%84%E6%A6%82%E8%A6%81