软件开发环境CH22.ppt
《软件开发环境CH22.ppt》由会员分享,可在线阅读,更多相关《软件开发环境CH22.ppt(18页珍藏版)》请在三一办公上搜索。
1、软件开发环境,理解指针和强制转换,我们最迷惑和没有信心的是c语言的指针和强制转换,何时能转换,怎样的转换是安全的?运用我们之前的学习成果吧。用反汇编分析。,请判断这段代码的执行结果,short i;short j;int*pi;void main(int argc,char*argv)cout j endl;pi=(int*),void main(int argc,char*argv)int i;int*pi;short*ps;char*pc;pi=*pc=0 x12,我们想分析如上代码的反汇编,这时,跑了个ebp-14h出来,不理解!这时在猜测、实证的道路上就要考验我们回避问题,迂回解决的处
2、理能力了。如何修改一下,让我们容易理解呢,pi=0041139A lea eax,ebp-8 0041139D mov dword ptr ebp-2Ch,eax,int i;int*pi;short*ps;char*pc;void main(int argc,char*argv)pi=*pc=0 x12,用全局变量,就可以看到我们之前熟悉的形式,pi=004113B7 mov eax,1234h 004113BC mov ecx,dword ptr ps(417144h)004113C2 mov word ptr ecx,ax,现在大家对mov dword ptr pi(417148h),o
3、ffset i(41714Ch)中的offset不理解,那么我们去掉符号显示得到如下结果,pi=004113B7 mov eax,1234h 004113BC mov ecx,dword ptr ds:00417144h 004113C2 mov word ptr ecx,ax,pi=004113A2 mov dword ptr ds:00417140h,41714Ch 注意以上三句话,显示了2中强制转换指针的情况,第一种没有强制转换。但三句话中除了被赋值的地址不同,其余一摸样。并没和类型转换相关的指令,就是将41714c这个地址值赋值给了三个不同的地址。我们惊讶地发现,其实没有所谓的“类型强
4、制指令或相关信息”,那强制转换怎么就复杂而不安全了?我们需要实证如下信息,请用调试器证明1.41714ch是i的地址;2.Mov指令中方括号中那三个地址分别是pi,ps,pc的地址,其实也好理解,对指针的强制转换,不过是将地址这个整数赋值给一个指针变量,地址是32位整数,指针变量时32位整数,怎么也不会有任何问题的。指针是拿来读取该地址或写该地址的,那么危险是否发生在这个地方?还有,既然是类型强制转换,这个类型信息又在哪里呢?请看那三个赋值语句的反汇编,*pi=0 x1234;004113AC mov eax,dword ptr ds:00417148h 004113B1 mov dword
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 开发 环境 CH22
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-6105743.html