mirror of
https://github.com/nganhkhoa/CTF-All-In-One.git
synced 2024-12-24 03:01:15 +07:00
fix
This commit is contained in:
parent
4eb4f78b26
commit
bb403d3303
@ -1,6 +1,7 @@
|
||||
# C 语言基础
|
||||
|
||||
- [从源代码到可执行文件](#从源代码到可执行文件)
|
||||
- [C 语言标准库](#c-语言标准库)
|
||||
- [整数表示](#整数表示)
|
||||
|
||||
|
||||
@ -56,6 +57,24 @@ $gcc -c hello.c -o hello.o
|
||||
目标文件需要链接一大堆文件才能得到最终的可执行文件。链接过程主要包括地址和空间分配(Address and Storage Allocation)、符号决议(Symbol Resolution)和重定向(Relocation)等。
|
||||
|
||||
|
||||
## C 语言标准库
|
||||
C 运行库(CRT)是一套庞大的代码库,以支撑程序能够正常地运行。其中 C 语言标准库占据了最主要地位。
|
||||
|
||||
常用的标准库文件头:
|
||||
- 标准输入输出(stdio.h)
|
||||
- 字符操作(ctype.h)
|
||||
- 字符串操作(string.h)
|
||||
- 数学函数(math.h)
|
||||
- 实用程序库(stdlib.h)
|
||||
- 时间/日期(time.h)
|
||||
- 断言(assert.h)
|
||||
- 各种类型上的常数(limits.h & float.h)
|
||||
- 变长参数(stdarg.h)
|
||||
- 非局部跳转(setjmp.h)
|
||||
|
||||
glibc 即 GNU C Library,是为 GNU 操作系统开发的一个 C 标准库。glibc 主要由两部分组成,一部分是头文件,位于 `/usr/include`;另一部分是库的二进制文件。二进制文件部分主要是 C 语言标准库,有动态和静态两个版本,动态版本位于 `/lib/libc.so.6`,静态版本位于 `/usr/lib/libc.a`。
|
||||
|
||||
|
||||
## 整数表示
|
||||
默认情况下,C 语言中的数字是有符号数,下面我们声明一个有符号整数和无符号整数:
|
||||
```c
|
||||
|
@ -137,8 +137,8 @@ End of assembler dump.
|
||||
gdb-peda$ disassemble _start
|
||||
Dump of assembler code for function _start:
|
||||
0x00000400 <+0>: xor ebp,ebp ;清零 ebp,表示下面的 main() 函数栈帧中 ebp 保存的上一级 ebp 为 0x00000000
|
||||
0x00000402 <+2>: pop esi ;弹栈设置 esi
|
||||
0x00000403 <+3>: mov ecx,esp ;暂时保存当前的 esp
|
||||
0x00000402 <+2>: pop esi ;将 argc 存入 esi
|
||||
0x00000403 <+3>: mov ecx,esp ;将栈顶地址(argv 和 env 数组的其实地址)传给 ecx
|
||||
0x00000405 <+5>: and esp,0xfffffff0 ;栈 16 字节对齐
|
||||
0x00000408 <+8>: push eax ;eax、esp、edx 入栈
|
||||
0x00000409 <+9>: push esp
|
||||
@ -152,7 +152,7 @@ Dump of assembler code for function _start:
|
||||
0x00000424 <+36>: push ecx ;ecx、esi 入栈保存
|
||||
0x00000425 <+37>: push esi
|
||||
0x00000426 <+38>: push DWORD PTR [ebx-0x8] ;调用 main() 函数之前保存返回地址,其实就是保存 main() 函数的入口地址
|
||||
0x0000042c <+44>: call 0x3e0 <__libc_start_main@plt> ;call 指令调用 main() 函数
|
||||
0x0000042c <+44>: call 0x3e0 <__libc_start_main@plt> ;call 指令调用 __libc_start_main 函数
|
||||
0x00000431 <+49>: hlt ;hlt 指令使程序停止运行,处理器进入暂停状态,不执行任何操作,不影响标志。当 RESET 线上有复位信号、CPU 响应非屏蔽终端、CPU 响应可屏蔽终端 3 种情况之一时,CPU 脱离暂停状态,执行下一条指令
|
||||
0x00000432 <+50>: mov ebx,DWORD PTR [esp] ;esp 强制转换为双字数据后保存到 ebx
|
||||
0x00000435 <+53>: ret ;返回,相当于 pop eip;
|
||||
|
@ -39,7 +39,7 @@
|
||||
- [4.3 GCC 堆栈保护技术]()
|
||||
- [五、高级篇]()
|
||||
- [5.1 Fuzz 测试]()
|
||||
- [5.2 Pin 动态二进制插桩](#53-angr-二进制自动化分析)
|
||||
- [5.2 Pin 动态二进制插桩](#52-Pin-动态二进制插桩)
|
||||
- [5.3 angr 二进制自动化分析]()
|
||||
- [5.4 反调试技术]()
|
||||
- [六、附录]()
|
||||
@ -47,7 +47,7 @@
|
||||
- [6.2 更多 Windows 工具]()
|
||||
|
||||
|
||||
## 5.3 angr 二进制自动化分析
|
||||
## 5.2 Pin 动态二进制插桩
|
||||
#### Baleful - picoCTF 2014
|
||||
|
||||
#### Reverse 400 - Hack You 2014
|
||||
|
Loading…
Reference in New Issue
Block a user