C/C++拾遗录--POPAD不会影响ESP
来源:互联网 发布:centos 6.8 破解密码 编辑:程序博客网 时间:2024/06/01 09:19
PUSHA/PUSHAD,POPA/POPAD它们配合使用,用于8个16位/32位通用寄存器与堆栈之间的数据传送。
PUSHAD指令压入32位寄存器,使他们按照EDI,ESI,EBP,ESP,EBX,EDX,ECX,最后是EAX的顺序出现在堆栈中,POPAD使弹出的顺序正好相反。
PUSHA/PUSHAD,POPA/POPAD从80286处理器开始使用.执行PUSHA/PUSHAD,POPA/POPAD时,其堆栈指针SP将分别需要减16/32和加16/32.
POPAD不会影响ESP ,但是会影响EBP。
#include <iostream>using namespace std;typedef unsigned long ULONG;//该程序只为调使用,无法正确返回。typedef struct __REGISTERS_{ULONGEDI; //0ULONGESI; //4 ULONGEBP; //8ULONGESP; //12ULONGEBX; //16 ULONGEDX; //20ULONGECX; //24ULONGEAX; //28ULONG EFlags; //32}REGISTERS,*pREGISTERS;int main(){REGISTERS Regs={0};Regs.ESP=0x12345678;//__asm mov esp,Regs.ESP //修改ESP可以利用直接赋值的方式解决。__asm{PUSHDWORD PTR Regs.EAX PUSHDWORD PTR Regs.ECX PUSHDWORD PTR Regs.EDX PUSHDWORD PTR Regs.EBX PUSHDWORD PTR Regs.ESP PUSHDWORD PTR Regs.EBP PUSHDWORD PTR Regs.ESI PUSHDWORD PTR Regs.EDI POPAD //调试在此处设置断点,所有的通用寄存器均被设置为0,除了ESP。注意,EBP也被赋值。}return 0;}
- C/C++拾遗录--POPAD不会影响ESP
- c语言拾遗录之数组
- C/C++拾遗录--关于位域的一些总结
- C/C++拾遗录--编程中的编译错误
- C/C++拾遗录--地址方法访问struct结构
- C/C++拾遗录--关于goto和jmp语句浅析
- C/C++拾遗录--通过i++和++i赋值不同
- C/C++拾遗录--每种内置类型的长度
- C 拾遗
- c拾遗
- C/C++拾遗录--关于一个C语言小程序的分析
- C/C++拾遗录--关于一个C语言小程序的分析
- C/C++拾遗录--关于宏定义汇编函数的的做法
- C/C++拾遗录--for循环中的三语句执行顺序
- C/C++拾遗
- C语言拾遗
- c语言拾遗3
- c语言拾遗4
- 关于java的远程操作
- 日期运算加减年月日
- Linux 安装SVN
- 基于嵌入式Linux的视频图像采集与传输
- 使用ClickOne发布Windows应用程序
- C/C++拾遗录--POPAD不会影响ESP
- Android OpenGL ES 开发教程(14):三维坐标系及坐标变换初步
- 基于嵌入式linux和s3c2410平台的视频采集
- 嵌入式视频采集实践学习【linux】
- DotNetNuke6.02安装
- 修改informix数据库服务监听端口
- Linux V4L2 摄像头视频采集
- winform程序调用webservice时的Session问题
- 设置QPushButton的平面与突出(遍历控件)