栈帧

栈帧概念:

栈 我们通常指保存局部变量,具有先进后出 (FILO) 特性的一段高内存地址空间,维护这个 栈 结构而使用两个寄存器:栈指针 rsp 、帧指针 rbp.。在同一时刻,堆栈中会有多个函数的信息,每个未完成运行的函数占用一个独立连续区域(包含这个函数涉及的参数,局部变量,返回地址等相关信息),称为栈帧。当调用函数时,就要压入一个新的栈帧,发起调用函数的栈帧成为调用者栈帧,被调用函数的栈帧则称为当前栈帧。rsp 和 rbp 之间的内存空间就是当前栈帧。

rsp:永远指向栈顶
rbp:主要用于访问变量

栈分配的方向是从高地址向低地址分配,但在变量内部地址是从低地址向高地址增长,这给内存溢出攻击创造了条件

002B17F0  push        ebp  
002B17F1  mov         ebp,esp  
002B17F3  sub         esp,0E4h  
002B17F9  push        ebx  
002B17FA  push        esi  
002B17FB  push        edi  

第一步:将ebp压栈
第二步:将esp赋给ebp
第三步:是给esp减去0E4h的大小
接下来几步:分别将ebx,esi,edi压栈

函数调用分为以下几步:

参数入栈: 将参数按照调用约定(C 是从右向左)依次压入系统栈中;
返回地址入栈: 将当前代码区调用指令的下一条指令地址压入栈中,供函数返回时继续执行;
代码跳转: 处理器将代码区跳转到被调用函数的入口处;
栈帧调整:
1.将调用者的ebp压栈处理,保存指向栈底的ebp的地址(方便函数返回之后的现场恢复),此时esp指向新的栈顶位置; push ebp
2.将当前栈帧切换到新栈帧(将esp值装入ebp,更新栈帧底部), 这时ebp指向栈顶,而此时栈顶就是old ebp mov ebp, esp
3.给新栈帧分配空间 sub esp, XXX

函数返回分为以下几步:

保存被调用函数的返回值到 eax 寄存器中 mov eax, xxx
恢复 esp 同时回收局部变量空间 mov esp, ebp
将上一个栈帧底部位置恢复到 ebp pop ebp
弹出当前栈顶元素,从栈中取到返回地址,并跳转到该位置 ret

寄存器

寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据bai和地址。
寄存器是CPU的组成部分,因为在CPU内,所以CPU对其读写速度是最快的,不需要IO传输。但同时也决定了此类寄存器数量非常有限,有限到几乎每个存储都有自己的名字du,而且有些还有多个名字。

寄存器的作用主要是:

可将寄存器内的数据执行算术及逻zhi辑运算
存于寄存器内的地址可用来指向内存的某个位置,即寻址
可以用来读写数据到电脑dao的周边设备

32位寄存器是以e开头的,主要包含下面一些寄存器:

a) 通用寄存器:EAX,EBX,ECX,EDX
b) 源变址目标变址寄存器:ESI,EDI
c) 栈相关积存器:SS,ESP(栈顶指针寄存器),EBP(栈基址寄存器)
d) 代码段寄存器,程序指令寄存器:CS,EIP(指令寄存器)
e) 数据段寄存器:DS(常与ESI寄存器结合使用)
f) 附加段寄存器:ES(常与EDI寄存器集合使用)
g) 控制寄存器:CR0-CR3。
CR0包括指示处理器工作方式的控制位,包含启用和禁止分页管理机制的控制位,包含控制浮点协处理器操作的控制位。CR1被保留,供今后开发的处理器使用。CR2及CR3由分页管理机制使用。CR2用于发生页异常时报告出错信息。当发生页异常时,处理器把引起页异常的线性地址保存在CR2中。操作系统中的页异常处理程序可以检查CR2的内容,从而查出线性地址空间中的哪一页引起本次异常。CR3 用于保存页目录表页面的物理地址,因此被称为PDBR。

h) 系统地址寄存器:GDTR(全局描述符表寄存器),LDTR(局部描述符表寄存器),IDTR(中断描述符表寄存器),TR(任务状态段寄存器)
i) Flag标志寄存器:
ZF 零标志,零标志ZF用来反映运算结果是否为0。如果运算结果为0,则其值为1,否则其值为0;AF 辅助进位标志,运算过程中第三位有进位值,置AF=1,否则,AF=0;
加法时,第3位向第4位(从第0位开始计)有进位;
减法时,第3位向第4位(从第0位开始计)有借位。有则该标志位就置1。通常用于对BCD算术运算结果的调整。
例:1101 1000+1010 1110=1 1000 0110其中AF=1,CF=1。
BCD码(Binary-Coded Decimal‎)亦称二进码十进数或二-十进制代码。用4位二进制数来表示1位十进制数中的0~9这10个
数码。是一种二进制的数字编码形式,用二进制编码的十进制代码。BCD码这种编码形式利用了四个位元来储存一个
十进制的数码,使二进制和十进制之间的转换得以快捷的进行。
PF 奇偶标志,当结果操作数中偶数个"1",置PF=1,否则,PF=0;
SF 符号标志,当结果为负时,SF=1;否则,SF=0。溢出时情形例外;
CF 进位标志,最高有效位产生进位值,例如,执行加法指令时,MSB(最高位)有进位,置CF=1;否则,CF=0;
OF 溢出标志,若操作数结果超出了机器能表示的范围,则产生溢出,置OF=1,否则,OF=0。
标志寄存器的一些值是一些其它相关汇编指令在执行过程中需要参考的值。比如条件跳转指令就需要参考ZF等标志位。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,366评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,521评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,689评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,925评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,942评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,727评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,447评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,349评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,820评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,990评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,127评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,812评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,471评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,017评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,142评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,388评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,066评论 2 355