- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
缓冲区溢出与注⼊分析
缓冲区溢出与注⼊分析
前⾔
进程的内存映像
常⽤寄存器初识
call ,ret 指令的作⽤分析
什么是系统调⽤ (以 Linux 2.6.2 1 版本 x86 平台为例)
什么是 ELF ⽂件
程序执⾏基本过程
Linux 下程序的内存映像
栈在内存中的组织
缓冲区溢出
实例分析:字符串复制
缓冲区溢出后果
缓冲区溢出应对策略
如何保护 ebp 不被修改
如何保护 eip 不被修改?
缓冲区溢出检测
缓冲区注⼊实例
准备:把 C 语⾔函数转换为字符串序列
注⼊:在 C 语⾔中执⾏字符串化的代码
注⼊原理分析
缓冲区注⼊与防范
后记
参考资料
前⾔
虽然程序加载以及动态符号链接都已经很理解了,但是这伙却被进程的内存映像
给”纠缠住。看着看着就⼀发不可收拾——很有趣。
下⾯⼀起来探究“缓冲区溢出 注⼊” 问题 (主要是关⼼程序的内存映像)。
进程的内存映像
永远的 Hello World,太熟悉了吧,
#include stdio.h
int main(void)
{
printf(Hello World\n);
return 0;
如果要⽤内联汇编 (inline assembly)来写呢?
1 /* shellcode.c */
2 void main()
3 {
4 __asm__ __volatile__(jmp forward;
5 backward:
6 popl %esi;
7 movl $4, %eax;
8 movl $2, %ebx;
9 movl %esi, %ecx;
10 movl $12, %edx;
11 int $0x80; /* system call 1 *
12 movl $1, %eax;
13 movl $0, %ebx;
14 int $0x80; /* system call 2 *
15 forward:
16 call backward;
17 .string \Hello World\\n\;);
18
看起来很复杂,实际上就做了⼀个事情,往终端上写了个 Hello World 。不过这个
⾮常有意思。先简单分析⼀下流程:
第 4 ⾏指令的作⽤是跳转到第 15 ⾏ (即 forward 标记处),接着执⾏第 16
⾏。
第 16 ⾏调⽤ backward,跳转到第 5 ⾏,接着执⾏ 6 到 14 ⾏。
第 6 ⾏到第 11 ⾏负责在终端打印出 Hello World 字符串 (等⼀下详细介
绍)。
第 12 ⾏到第 14 ⾏退出程序 (等⼀下详细介绍)。
为了更好的理解上⾯的代码 后续的分析,先来介绍⼏个⽐较重要的内容。
常⽤寄存器初识
X86 处理器平台有三个常⽤寄存器:程序指令指针、程序堆栈指针与程序基指针:
寄存器 名称 注释
EIP 程序指令指针通常指向下⼀条指令的位置
ESP
文档评论(0)