当前位置: 首页 > wzjs >正文

武汉专业网站推广高手优化网站

武汉专业网站推广,高手优化网站,设计网页的工作叫什么,新版wordpress如何添加标签一、栈操作:入栈push,出栈pop 栈操作:FILO(先进后出机制) 栈顶的指针:ss:sp决定,任意时刻栈顶指针指向SS:SP的位置 对于8086CPU 入栈时:sp-2 出栈时:sp2 assume cs…

一、栈操作:入栈push,出栈pop

栈操作:FILO(先进后出机制)

栈顶的指针:ss:sp决定,任意时刻栈顶指针指向SS:SP的位置

对于8086CPU

入栈时:sp-2

出栈时:sp+2

assume cs:code,ds:data,ss:stack
;定义数据段
data segmentdw 0123H,0456H,0789H,0ABCH,0DEFH,0FEDH,0CBAH,0987H      ;定义8个字单元的存储数据
data ends;定义栈段
stack segmentdw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
stack ends;定义代码段
code segment
start:mov ax,stackmov ss,axmov sp,0020H    ;将栈顶指向stack:0020Hmov ax,datamov ds,ax       ;数据段ds指向datamov bx,0000Hmov cx,0008Hs:   push [bx]       ;将data段中0——15个内存单元中的8个字型数据入栈add bx,2loop smov bx,0mov cx,0008Hs0:   pop [bx]add bx,2loop s0         ;将以上出栈的9个字型数据出栈到data段的0——15个内存单元中mov ax,4c00H    ;调用4c00H功能中断int 21Hcode ends               ;结束code段
end start               ;结束程序

栈的空间大小:对于8086CPU,SS:SP只是确定栈顶的位置,不知道栈空间的大小,只能在写程序时安排栈空间的大小,既要防止入栈时数据太多栈顶超界,又要防止出栈时取出数据过多栈底超界。

对于以下代码寄存器的值变化

在dosbox通过debug -a 0200:0000处进行汇编操作
mov ax,1000      ;(ax)=1000
mov ss,ax        ;(ss)=1000
mov sp,0010      ;(sp)=0010,栈顶位置=((ss*16)+sp)=10010H
mov ax,1234      ;(ax)=1234
mov bx,5678      ;(bx)=5678
push ax          ;将ax入栈,栈顶位置-2=10010-2=1000EH
push bx          ;将bx入栈,栈顶位置-2=10010-2=1000CH
pop ax           ;出栈,(ax)=5678H,栈顶加2=1000CH+2=1000EH
pop bx           ;出栈,(bx)=1234H,栈顶加2=1000EH+2=10010H通过-r命令修改cs:ip寄存器的值,将指令指针指向0200:0000处开始执行汇编语句
-rcs 0200
-rip 0000-t   ;单步指行,观察寄存器ax,bx,ss,sp的值变换

二、栈操作存在的问题

栈顶越界(向上溢出)​

当栈已满时执行push操作,栈顶指针(如SP)会超出栈的合法范围,向栈外内存写入数据。例如:

在x86架构中,若栈空间为10000H~1000FH(16字节),连续执行8次push后栈满,此时SP=0(栈顶指向10010H)。若再次执行pushSP会减2至FFFEH,导致数据写入栈外地址1000EH,覆盖相邻内存区域

栈底越界(向下溢出)​

当栈为空时执行pop操作,栈顶指针会越过栈底边界,读取无效数据。例如:

空栈时SP=0020H(指向栈底下一单元),执行pop会使SP加2至0022H,后续push操作可能覆盖10020H处的数据

三、越界的底层机制与后果

​1,CPU的局限性

CPU仅跟踪栈顶指针(如x86的SS:SP),​不检测栈边界。无论越界与否,均按指令执行,导致以下风险:

数据覆盖​:越界写入可能破坏其他程序或系统数据,引发崩溃(如操作系统关键数据被篡改)。

数据泄露​:越界读取可能获取敏感信息(如密码、密钥)

​2,栈扩展方向的影响

x86栈向低地址扩展pushSP递减,pop时递增。若栈容量不足,越界操作可能覆盖代码段或堆段数据

3,​寄存器的限制

16位系统(如8086)中,SP寄存器最大值为FFFFH(64KB),若栈定义为64KB且空时执行popSP可能从0000H回绕至FFFEH,导致数据覆盖

四、解决方案与防护机制

1,程序员责任

手动管理栈容量​:预估最大栈深度(如递归深度、局部变量大小),分配足够空间

边界检查​:在关键操作前插入检查代码。例如:

; 检查栈是否已满(顺序栈示例)
cmp sp, STACK_BOTTOM
jae stack_overflow_error

​2、硬件与系统级保护

栈边界标记​:预留特定值(如0xDEADBEEF)标记栈边界,运行时检测是否被篡改

不可执行栈(NX位)​​:标记栈内存为不可执行,防止注入代码运行(常见于现代操作系统)

3、​嵌入式系统的特殊处理

在线检测机制​:在DSP等嵌入式系统中,通过中断服务程序实时监控SP位置,触发异常处理(如重启或日志记录)

多级栈保护​:结合虚拟栈帧和硬件保护环,限制栈操作范围

http://www.dtcms.com/wzjs/393849.html

相关文章:

  • 香港公司做网站国外销售同城发广告的平台有哪些
  • 济宁网站建设吊装seo个人优化方案案例
  • 惠民网站建设可以发布软文的平台
  • wordpress判断首页优化网站的方法
  • 昆明做网站建设多少钱安卓系统优化软件
  • 深圳罗湖企业网站优化代运营公司排行榜
  • 做响应式网站的常用尺寸500个游戏推广群
  • wordpress里再建一个网站学生个人网页制作教程
  • 网站建设培训公司搜索推广出价多少合适
  • 网站图片上传不了是什么原因新冠不易感染三种人
  • 用户体验设计的重要性成都seo技术
  • 自己做签名网站今天国内最新消息
  • 有了网站开发app是不是更容易流程优化的七个步骤
  • 商家自己做的商品信息查询网站网络营销课程作业
  • 网站建设 调研报告网站关键词怎么添加
  • 营销型网站建设大概多少钱百度搜索一下就知道
  • 国内做卷学习网站汕头seo按天付费
  • 建设一个电影网站需要多少钱游戏推广文案
  • mac os 做网站合肥网站推广公司
  • 个人做网站需要什么资料免费网站服务器
  • 普通银行卡可以做国外网站购物信用卡使用吗seo研究中心倒闭
  • 淘宝联盟链接的网站怎么做的厦门seo排名优化
  • 网络公司怎么做网站百度账号怎么注册
  • 荆州网站建设价格深圳信息公司做关键词
  • 网站建设与维护选择题长沙关键词自然排名
  • er图关于网站建设新闻发布的网站
  • 做视频课程网站郑州seo公司排名
  • 宁德市城乡建设局网站登封seo公司
  • 苹果手机免费做ppt模板下载网站有哪些比较有名的个人网站
  • 做视频网站 视频放在哪里百度免费资源网站