其他分享
首页 > 其他分享> > 【学习笔记Ⅰ】Chapter2 栈溢出原理与实践(基础知识)

【学习笔记Ⅰ】Chapter2 栈溢出原理与实践(基础知识)

作者:互联网

学习笔记Ⅰ系列是对《0day安全:软件漏洞分析技术》的学习记录和总结,希望可以由此入门PWN方向。

0x00 基础知识

0x01 内存

进程使用的内存都可以按照功能大致分成以下 4 个部分:

具体来说:

 0x02 栈

一种数据结构,先进后出的数据表

栈的常见操作:

标识栈的属性:

0x03 系统栈

同一文件不同函数的代码在内存代码区中的分布可能相邻,也可能相离甚远,可能先后有序,也可能无序;但它们都在同一个 PE 文件的代码所映射的一个“节”里。我们可以简单地把它们在内存代码区中的分布位置理解成是散乱无关的。

函数调用的代码示例:

int func_B(int arg_B1, int arg_B2) {     int var_B1, var_B2;     var_B1=arg_B1+arg_B2;     var_B2=arg_B1-arg_B2;     return var_B1*var_B2; }
int func_A(int arg_A1, int arg_A2) {     int var_A;     var_A = func_B(arg_A1,arg_A2) + arg_A1 ;     return var_A; }
int main(int argc, char **argv, char **envp) {     int var_main;     var_main=func_A(4,3);     return var_main; }   上述代码流程:

在上述函数调转中系统栈的变化如下:

 0x04 寄存器

0x05 函数调用

 

 

 

 

函数调用需要用到的指令序列:

 

标签:main,int,代码,基础知识,func,arg,var,Chapter2,溢出
来源: https://www.cnblogs.com/ninahu/p/12526997.html