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

衡水公司建网站费用win2003服务器网站管理工具

衡水公司建网站费用,win2003服务器网站管理工具,贾汪区建设局网站,织梦网站备份几种方法什么是指针寄存器? 操作栈的寄存器 栈: 保存函数里面传递的参数,局部变量等。 EBP: 指向栈底的指针 ESP: 指向栈顶的指针。 计算入栈地址变化规则 通过OllDbg查看 有可能点击安装的时候栈区域第一次查看会没有显…

什么是指针寄存器?

操作栈的寄存器

栈: 保存函数里面传递的参数,局部变量等。

EBP: 指向栈底的指针

ESP: 指向栈顶的指针。

计算入栈地址变化规则

通过OllDbg查看

有可能点击安装的时候栈区域第一次查看会没有显示上面的标题区域,可以通过右键点击栈区域

选择Appearanzhix选择show bar 就有了,其他几个区域一样的。

现在我们尝试通过F8执行一次push 命令来看栈顶指针寄存器的地址和数据变化。

首先我们需要通过F8执行让CPU执行到push 命令处停下来,并记录相关信息。 比如我这里。

(如果要和我一样,先修改EAX 累加寄存器的值为 00000022,修改指令为push EAX,栈顶寄存器值可能不一样。其实也没必要,大家可以看自己的数据,按照下面的规则算就可以了)

执行推送前信息:

当前CUP位置是待执行的push 指令 :  push EAX;  推送累加寄存器的值到栈顶。

当前 EAX 的值是: 00000022

当前ESP栈顶的地址是:  0199F7D4

当前ESP栈顶地址的对应的值是: 15F58E65

执行推送后,我们期望的信息:

当前 EAX 的值是: 00000022  不变

当前ESP栈顶的地址是:  0199F7D0

当前ESP栈顶地址的对应的值是: 00000022

备注: 这里要说明下,为啥栈顶地址从0199F7D4变成了0199F7D0,这个是因为栈顶插入了4个字节,所以内存地址向高位偏移了4个字节。

我们尝试执行下,看看数据是否是我们预期的。

最终确认,以上数据符合预期

练习题

我们上章节学习了 16位寄存器, 高八位寄存器,低八位寄存器。假如我们的指令是

push ax指令,那么数据又会怎么变化呢?  这里我们尝试一次。

先修改下数据,EAX 寄存器的值修改位 00001100

按F8执行语句,查看EAX的值,可以看到已经改变。

修改当前CPU执行位置的命令是: push ax

现在我们开始记录执行后续命令前的数据:

当前CUP位置是待执行的push 指令 :  push ax;  推送累加寄存器的值到栈顶。

当前 EAX 的值是:00001100

当前ESP栈顶的地址是:  0199FA78

当前ESP栈顶地址的对应的值是: 76987BA9

执行推送后,我们期望的信息:

当前 EAX 的值是: 00001100 不变

当前ESP栈顶的地址是: 0199FA76

当前ESP栈顶地址的对应的值是:7BA91100

F8执行语句后查看数据

执行后的结果:

当前 EAX 的值是: 00001100 不变

当前ESP栈顶的地址是: 0199FA76

当前ESP栈顶地址的对应的值是:7BA91100

以上为啥结果我会标记为红色?

其实在这结果运行之前,我的预期运行结果是

当前 EAX 的值是: 00001100 不变

当前ESP栈顶的地址是: 0199FA76

当前ESP栈顶地址的对应的值是:76981100

为啥会犯这样的错误?

先说结果我忽略了数据是小端数据存储的。x86 架构采用小端字节序所以,其实我们通过OllDbg看到的数据并不是真实的内存展示的数据,也不是想当然的直接替换后面两个字节的数据。

当然如果你对这以上没有疑问,完全可以跳过后面的章节。接下来我会详细描述下大小端的概念,以及为啥运行 push ax 后ESP栈顶的值是7BA91100,而不是76981100。

大端和小端?

比如有一个数据: 0x76 98 7B A9

在解释大端和小端之前,我先说几个概念。

低位字节,高位字节概念:

比如数据  0x76 98 7B A9

0x76 就是最高位字节,  0xA9就是最低位字节。

高位字节 ---------------------------低位字节

0x76         0x98           0x7B          0xA9

为了帮忙你记住,你就按照家里你的兄弟排位来,第一个生的就是老大,排位最高,后面依次老二,老三。

低地址,高地址概念:

就是内存地址序,比如运行指令之前ESP栈顶0x0199FA78

连续四个字节那么它们的地址就依次是

低地址---------------------------------------------------------高地址

0x0199FA78,0x0199FA79,0x0199FA7A,0x0199FA7B

以上概念清楚后,我们就来说说大端和小端的内存数据是如何存储的。

大端:高位字节数据存入低地址,低位字节数据存入高地址。

小端:低位字节数据存入低地址,高位字节数据存入高地址。

基于X86架构平台都是小端,无论是win,linux 还是其他系统。 有的设备平台可能是大端。另外就是网络通信中,基于TCP/IP标准,网络字节序就是大端的。

有了上面概念后,就可以接受为什么我们执行push ax后结果为啥是7BA91100。

执行命令前,我们看看当时数据在内存中是怎么样的。

执行命令 push ax; 将数据1100写入ESP栈顶, ax 是十六进制,所以需要在0x0199FA78进制向左移动两个字节。变成从0x0199FA76开始

以上就是内存存储情况,将上面内存中的数据 OllDbg展示的数据就是 0x7BA91100。

如果有问题欢迎大家指出来,有疑问也可以一起讨论。

上一篇:汇编学习之《数据寄存器》

下一篇:汇编学习之《变址寄存器》

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

相关文章:

  • 最简单的网站模板下载wordpress友链页面
  • 微网站需wordpress教程视频 下载
  • 网站宽度1200px凡客网上商城
  • 养老院网站开发背景东莞网站建设求职简历
  • 南通市区有哪几家做网站的个人执业资格注册查询
  • 园区做网站的好处百度app下载官方免费最新版
  • 网站收录做关键词排名django网站开发源码
  • 特色食品网站建设策划书c# 手机版网站开发
  • 如何用nat123做网站苏州现在能去吗
  • 吉林3厅官齐聚任免大会宁波网站建设网页设计与制作教程西北工业大学出版社
  • 郑州微信小程序开发公司排名厦门seo优化推广
  • qq邮箱怎么做网站一级做网站视频教学
  • 怎么查询网站所有关键词如何建一个免费的网站
  • 无锡谁做网站好网站使用条款模板
  • 网站开发相关会议如何修改单页网站
  • 建站网站加盟wordpress网页怎么上传
  • 做淘宝导购网站安卓app制作软件
  • 建筑公司企业使命和愿景大全河南网站优化
  • 邵阳网站开发文化传播有限公司网站建设
  • 购物网站建设与实现新手网站建设模板下载
  • 个人网站模板儿童做网站用js的好处
  • 网站开发工作简述网站内容如何优化
  • 西安专业做网站的公司做视频网站带宽不够怎么办
  • 网页设计的目的与要求seo国外推广软件
  • 网站后台如何做文件下载连接wordpress主题zip
  • 网站开发的软硬件环境东营住房和城乡建设部网站
  • 网站报错500惠州手机网站建设
  • 网站登录界面 psd惠州网站设计
  • 做网站赚钱 优帮云二维码怎么做网站
  • wordpress 网站打不开南通市住房和城乡建设局网站