- Learning Linux Binary Analysis
- Ryan “elfmaster” O'Neill
- 280字
- 2021-07-16 12:56:55
The process register state and flags
The user_regs_struct
structure for x86_64
contains the general-purpose registers, segmentation registers, stack pointer, instruction pointer, CPU flags, and TLS registers:
<sys/user.h> struct user_regs_struct { __extension__ unsigned long long int r15; __extension__ unsigned long long int r14; __extension__ unsigned long long int r13; __extension__ unsigned long long int r12; __extension__ unsigned long long int rbp; __extension__ unsigned long long int rbx; __extension__ unsigned long long int r11; __extension__ unsigned long long int r10; __extension__ unsigned long long int r9; __extension__ unsigned long long int r8; __extension__ unsigned long long int rax; __extension__ unsigned long long int rcx; __extension__ unsigned long long int rdx; __extension__ unsigned long long int rsi; __extension__ unsigned long long int rdi; __extension__ unsigned long long int orig_rax; __extension__ unsigned long long int rip; __extension__ unsigned long long int cs; __extension__ unsigned long long int eflags; __extension__ unsigned long long int rsp; __extension__ unsigned long long int ss; __extension__ unsigned long long int fs_base; __extension__ unsigned long long int gs_base; __extension__ unsigned long long int ds; __extension__ unsigned long long int es; __extension__ unsigned long long int fs; __extension__ unsigned long long int gs; };
In the 32-bit Linux kernel, %gs
was used as the thread-local-storage (TLS) pointer, although since x86_64
, the %fs
register has been used for this purpose. Using the registers from user_regs_struct
and with read/write access to a process's memory using ptrace
, we can have complete control over it. As an exercise, let's write a simple debugger that allows us to set a breakpoint at a certain function in a program. When the program runs, it will stop at the breakpoint and print the register values and the function arguments.
推薦閱讀
- JavaScript從入門到精通(微視頻精編版)
- C# 2012程序設計實踐教程 (清華電腦學堂)
- 信息可視化的藝術:信息可視化在英國
- Flink SQL與DataStream入門、進階與實戰
- ASP.NET Core 2 and Vue.js
- Julia機器學習核心編程:人人可用的高性能科學計算
- C語言最佳實踐
- Cassandra Data Modeling and Analysis
- Instant RubyMotion App Development
- 從0到1:Python數據分析
- Spring Boot Cookbook
- C語言程序設計上機指導與習題解答(第2版)
- Python High Performance Programming
- Learning Unreal Engine Android Game Development
- Statistical Application Development with R and Python(Second Edition)