mirror of
https://github.com/nganhkhoa/CTF-All-In-One.git
synced 2024-12-24 19:21:15 +07:00
update 1.5.2
This commit is contained in:
parent
d432943c22
commit
9aff61c270
@ -18,7 +18,7 @@ GitHub 地址:https://github.com/firmianay/CTF-All-In-One
|
||||
* [1.4.6 PHP 源码审计基础](doc/1.4.6_php_basic.md)
|
||||
* [1.5 逆向工程基础](doc/1.5_reverse_basic.md)
|
||||
* [1.5.1 C 语言基础](doc/1.5.1_c_basic.md)
|
||||
* [1.5.2 x86/x86-64 汇编基础](doc/1.5.2_x86&x64.md)
|
||||
* [1.5.2 x86/x86-64 汇编基础](doc/1.5.2_x86_x64.md)
|
||||
* [1.5.3 Linux ELF](doc/1.5.3_elf.md)
|
||||
* [1.5.4 Windows PE](doc/1.5.4_pe.md)
|
||||
* [1.5.5 静态链接](doc/1.5.5_static_link.md)
|
||||
|
@ -1,9 +0,0 @@
|
||||
# 1.5.2 x86/x86-64 汇编基础
|
||||
|
||||
- [x86](#x86)
|
||||
- [x64](#x64)
|
||||
|
||||
|
||||
## x86
|
||||
|
||||
## x64
|
74
doc/1.5.2_x86_x64.md
Normal file
74
doc/1.5.2_x86_x64.md
Normal file
@ -0,0 +1,74 @@
|
||||
# 1.5.2 x86/x86-64 汇编基础
|
||||
|
||||
- [x86](#x86)
|
||||
- [x64](#x64)
|
||||
- [参考资料](#参考资料)
|
||||
|
||||
|
||||
## x86
|
||||
|
||||
IA-32 体系结构提供了 16 个基础寄存器,可分为下面几组:
|
||||
- 通用寄存器:8 个通用寄存器用于存储操作数、运算结果和指针。
|
||||
- 段寄存器:包括 6 个段选择器。
|
||||
- EFLAGS 寄存器:用于显示程序执行的状态和允许对处理器进行有限的(应用层)控制。
|
||||
- EIP 寄存器:包含一个 32 位的指针,指向下一条被执行的指令
|
||||
|
||||
#### 通用寄存器
|
||||
|
||||
![](../pic/1.5.2_general.png)
|
||||
|
||||
- EAX:操作数和结果数据的累加器。
|
||||
- EBX:指向 DS 段中数据的指针。
|
||||
- ECX:用于字符串和循环操作的计数器。
|
||||
- EDX:I/O 指针。
|
||||
- ESI:指向由 DS 寄存器指向的段中的数据的指针;字符串操作的源指针。
|
||||
- EDI:指向由 ES 寄存器指向的段中的数据(或目标地址)的指针;字符串操作的目标指针。
|
||||
- ESP:栈指针(位于 SS 段)。
|
||||
- EBP:指向栈上数据的指针(位于 SS 段)。
|
||||
|
||||
#### 段寄存器
|
||||
段寄存器用于保存 16 位的段选择器。段选择器是一种特殊的指针,用于确定内存中某个段的位置。
|
||||
|
||||
段寄存器的使用取决于操作系统的内存管理模型。
|
||||
|
||||
平坦内存模型:
|
||||
|
||||
![](../pic/1.5.2_flat.png)
|
||||
|
||||
分段内存模型:
|
||||
|
||||
![](../pic/1.5.2_segmented.png)
|
||||
|
||||
#### EFLAGS
|
||||
|
||||
![](../pic/1.5.2_eflags.png)
|
||||
|
||||
标志位寄存器统称为 EFLAGS:
|
||||
- 状态标志
|
||||
- CF(bit 0):进位标志,用于表示无符号数运算是否产生进位或者借位,如果产生了进位或借位则值为 1,否则值为 0。
|
||||
- PF(bit 2):奇偶标志,用于表示运算结果中 1 的个数的奇偶性,偶数个 1 时值为 1,奇数个 1 时值为 0。
|
||||
- AF(bit 4):辅助进位标志,在字操作时标记低位字节(低 4 位)是否向高位字节(高 4 位)进位或借位。
|
||||
- ZF(bit 6):零标志,用于表示运算结果是否为 0,结果为 0 时其值置 1,否则置 0。
|
||||
- SF(bit 7):符号标志,用来标记有符号数运算结果是否小于 0,小于 0 时置 1,否则置 0。
|
||||
- OF(bit 11):溢出标志,用于表示有符号运算结果是否溢出,发生溢出时置 1,否则置 0。
|
||||
- DF(bit 10):方向标志,决定串操作指令执行时指针寄存器的调整方向。
|
||||
- 系统标志和 IOPL 域
|
||||
- TF(bit 8):跟踪标志,用于程序调试,置 1 时 CPU 处于单步执行状态,置 0 时处于连续工作状态。
|
||||
- IF(bit 9):中断允许标志,决定 CPU 是否响应 CPU 外部的可屏蔽中断发出的中断请求,置 1 时可以响应中断,置 0 时不响应中断。
|
||||
- IOPL(bits 12,13):I/O 特权标志,用于表示当前进程的 I/O 特权级别,只有当前进程的 CPL 小于或等于 IOPL 时才能访问 I/O 地址空间,只有 CPL 为 0 时才能修改 IOPL 域。
|
||||
- NT(bit 14):嵌套任务标志,置 1 时表示当前任务是在另一个任务中嵌套执行,置 0 时表示非嵌套。
|
||||
- RT(bit 16):恢复标志,用于表示是否响应指令断点,置 1 禁用指令断点,置 0 允许指令断点。
|
||||
- VM(bit 17):虚拟 8086 模式标志,用于表示进程是运行在虚拟 8086 模式还是保护模式,置 1 运行在虚拟 8086 模式,置 0 运行在保护模式。
|
||||
- AC(bit 18):对齐检测标志,与 CR0 寄存器的 AM 标志联合使用,这两个标志位同时置 1 启用对内存引用的对齐检查,同时置 0 表示禁用对齐检查。对齐检查仅在用户态下进行,0 特权级下不做检查。
|
||||
- VIF(bit 19):虚拟中断标志,是 IF 标志的一个虚拟映像,与 VIP 标志一起使用,当控制寄存器 CR4 中的 VME 或者 PVI 标志位置 1 且 IOPL 小于 3 时,处理器只识别 VIF 标志。
|
||||
- VIP(bit 20):虚拟中断等待标志,置 1 表示有一个等待处理的中断,置 0 表示没有等待处理的中断。
|
||||
- ID(bit 21):识别标志,置 1 表示支持 CPUID 指令,置 0 表示不支持。
|
||||
|
||||
#### EIP 寄存器
|
||||
指令指针寄存器存储了当前代码段的偏移,指向了下一条要执行的指令,系统根据该寄存器从内存中取出指令,然后再译码执行。
|
||||
|
||||
|
||||
## x64
|
||||
|
||||
## 参考资料
|
||||
- [Intel® 64 and IA-32 Architectures Software Developer Manuals](https://software.intel.com/en-us/articles/intel-sdm)
|
@ -1,7 +1,7 @@
|
||||
# 1.5 逆向工程基础
|
||||
|
||||
- [1.5.1 C 语言基础](1.5.1_c_basic.md)
|
||||
- [1.5.2 x86/x86-64 汇编基础](1.5.2_x86&x64.md)
|
||||
- [1.5.2 x86/x86-64 汇编基础](1.5.2_x86_x64.md)
|
||||
- [1.5.3 Linux ELF](1.5.3_elf.md)
|
||||
- [1.5.4 Windows PE](1.5.4_pe.md)
|
||||
- [1.5.5 静态链接](1.5.5_static_link.md)
|
||||
|
BIN
pic/1.5.2_eflags.png
Normal file
BIN
pic/1.5.2_eflags.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 43 KiB |
BIN
pic/1.5.2_flat.png
Normal file
BIN
pic/1.5.2_flat.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 27 KiB |
BIN
pic/1.5.2_general.png
Normal file
BIN
pic/1.5.2_general.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 17 KiB |
BIN
pic/1.5.2_segmented.png
Normal file
BIN
pic/1.5.2_segmented.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 27 KiB |
Loading…
Reference in New Issue
Block a user