Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 软件时空 > 软件相关 > 发现一个EVC编译器对自增算符处理时的隐患
【标  题】:发现一个EVC编译器对自增算符处理时的隐患
【关键字】:EVC
【来  源】:http://blog.csdn.net/NetSniffer/archive/2007/04/03/1550873.aspx

发现一个EVC编译器对自增算符处理时的隐患

Your Ad Here

发现点问题,EVC编译器造成的:

EVC4 SP4下,X86的编译器对于那个int*指针表达式从右到左计算,char型的表达式从左到右,晕

ARM下都是一个样,从右向左!

具体参看汇编码:

int* 型表达式,ARM汇编

233:      int a[] = {1, 2, 3, 4};
26013FB0   mov       r0, #1
26013FB4   str       r0, [sp, #8]
26013FB8   mov       r1, #2
26013FBC   str       r1, [sp, #0xC]
26013FC0   mov       r0, #3
26013FC4   str       r0, [sp, #0x10]
26013FC8   mov       r1, #4
26013FCC   str       r1, [sp, #0x14]
234:      int* p = a;
26013FD0   add       r0, sp, #8
26013FD4   str       r0, [sp]
235:      int b = *p + *++p;
26013FD8   ldr       r1, [sp]
26013FDC   add       r0, r1, #4   ; 先给指针加4
26013FE0   str       r0, [sp]
26013FE4   ldr       r1, [sp]
26013FE8   ldr       r0, [r1]        ;把加之后的值放入r0
26013FEC   ldr       r2, [sp]
26013FF0   ldr       r1, [r2]       ;取加之后的p值
26013FF4   add       r3, r0, r1      ;求和
26013FF8   str       r3, [sp, #0x18]

int* 型表达式,X86汇编
233:      int a[] = {1, 2, 3, 4};
240137D6   mov         dword ptr [a],1
240137DD   mov         dword ptr [ebp-10h],2
240137E4   mov         dword ptr [ebp-0Ch],3
240137EB   mov         dword ptr [ebp-8],4
234:      int* p = a;
240137F2   lea         eax,[a]
240137F5   mov         dword ptr [p],eax
235:      int b = *p + *++p;
240137F8   mov         ecx,dword ptr [p]
240137FB   add         ecx,4                             ; 先给P增加4
240137FE   mov         dword ptr [p],ecx   
24013801   mov         edx,dword ptr [p]
24013804   mov         eax,dword ptr [edx]     ;把加之后的值放入eax
24013806   mov         ecx,dword ptr [p]         ;同样是加之后的P值放入ecx
24013809   add         eax,dword ptr [ecx]      ;求和
2401380B   mov         dword ptr [b],eax
236:

char* 型表达式,X86汇编
233:      char a[] = {1, 2, 3, 4};
240137D6   mov         byte ptr [a],1
240137DA   mov         byte ptr [ebp-7],2
240137DE   mov         byte ptr [ebp-6],3
240137E2   mov         byte ptr [ebp-5],4
234:      char* p = a;
240137E6   lea         eax,[a]
240137E9   mov         dword ptr [p],eax
235:      char b = *p + *++p;
240137EC   mov         ecx,dword ptr [p]
240137EF   movsx       edx,byte ptr [ecx]  ; 先把P值取出
240137F2   mov         eax,dword ptr [p]
240137F5   add         eax,1                       ;再增加1
240137F8   mov         dword ptr [p],eax
240137FB   mov         ecx,dword ptr [p]
240137FE   movsx       eax,byte ptr [ecx]
24013801   add         edx,eax                   ;把最早保存的值和加1后的加起来
24013803   mov         byte ptr [b],dl
236:

char* 型表达式,ARM汇编
233:      char a[] = {1, 2, 3, 4};
26013FB0   mov       r0, #1
26013FB4   strb      r0, [sp, #4]
26013FB8   mov       r1, #2
26013FBC   strb      r1, [sp, #5]
26013FC0   mov       r0, #3
26013FC4   strb      r0, [sp, #6]
26013FC8   mov       r1, #4
26013FCC   strb      r1, [sp, #7]
234:      char* p = a;
26013FD0   add       r0, sp, #4
26013FD4   str       r0, [sp]
235:      char b = *p + *++p;
26013FD8   ldr       r1, [sp]
26013FDC   add       r0, r1, #1   ; 先P地址加1
26013FE0   str       r0, [sp]
26013FE4   ldr       r1, [sp]
26013FE8   ldrsb     r0, [r1]
26013FEC   ldr       r1, [sp]
26013FF0   ldrsb     r2, [r1]
26013FF4   add       r1, r2, r0
26013FF8   mov       r3, r1, lsl #24
26013FFC   mov       r0, r3, asr #24
26014000   strb      r0, [sp, #8]


不知道是不是微软EVC编译器的问题,从开始编程至今我一直倾向于从右向左 :)

好久没有写BLOG了,一直忙于项目,今天来冒个泡泡
 

symbians60 编译时确定sdk版本:【上一篇】
各品牌在北京的长年打折店汇总!:【下一篇】
【相关文章】
  • 迷宫问题(编译环境 DevC++)
  • 基于EVC++ VS.net2005判断指定日期的星期又一法
  • 基于EVC++ vs.net 2005实现判断指定日期的星期
  • DevC++如何看运行结果
  • 安装EVC4.0 SP4模拟器不成功,解决方法
  • EVC下实现WinCE软件换肤之函数TransparentBitBlt
  • EVC下实现WinCE软件换肤之换肤基础类CBitmapSK
  • EVC下实现WinCE软件换肤之CDialogSk
  • eVC编译时,出现corelibc.lib(pegwmain.obj) : error LNK2019解决办法
  • EVC编程经验点滴(二)
  • 【随机文章】
  • 光纤,未来布线的首选?
  • 如何使用Lua扩展C/C++应用系列1-转自bbs.luachina.net
  • 《轮回》详细剧情攻略(3)
  • 关于文章里没有图片的问题的一点说明
  • RA8822液晶模块的AVR程序
  • 异位性皮炎的症状异位性皮炎的治疗异位性皮肤炎我执着的选美国康本
  • 关于SQL 参数的一次测试(重新又测了一次)
  • 解决System.ini文件的问题
  • LsBS - Chapter 6. Command-Line Options and Typed..
  • 请教各位在flash里如果导出gif格式的动画不失真呢?
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.