This commit is contained in:
firmianay 2017-08-16 21:49:30 +08:00
parent 4eb4f78b26
commit bb403d3303
3 changed files with 24 additions and 5 deletions

View File

@ -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

View File

@ -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;

View File

@ -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