- 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.
推薦閱讀
- Cocos2D-X權威指南(第2版)
- Dynamics 365 Application Development
- Game Programming Using Qt Beginner's Guide
- HoloLens Beginner's Guide
- BeagleBone Media Center
- C語言程序設計實訓教程
- Practical Game Design
- 云計算通俗講義(第3版)
- Mastering JavaScript High Performance
- Android開發:從0到1 (清華開發者書庫)
- Android系統級深入開發
- 微服務從小白到專家:Spring Cloud和Kubernetes實戰
- Apache Camel Developer's Cookbook
- 零基礎學HTML+CSS第2版
- Hands-On Robotics Programming with C++