免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2014 | 回复: 2
打印 上一主题 下一主题

函数帧结构问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-11-25 10:39 |只看该作者 |倒序浏览
  1. int SendHttpReq(char *pMsgBody, unsigned int ulMsgLen, char* pszMailid, NTT_S_SERVER_RSP_MSG *pRspMsg)
  2. {
  3.     unsigned int ulRet = 0;
  4.     HTTP_HANDLE ulHandle;
  5.     char szBodyLen[16] = {0};
  6.     char szUrl[128] = {0};
  7.     char* pszMethod = VOS_NULL_PTR;
  8.     NTT_S_HTTP_ARG stArg;
  9.     ...
  10. }
复制代码
调试发现,上面这段代码经-Os优化编译后在arm板上参数的分布是
pRspMsg        0xBE867790      4                                               
pszMailid       0xBE867794      4                                               
ulMsgLen       0xBE867798      4                                               
pMsgBody      0xBE86779C      4                                               
pszMethod     0xBE8677A0      4                                               
ulHandle       0xBE8677A4      4                                               
ulRet            0xBE8677A8      4                                               
stArg            0xBE8677AC      12                                             
szUrl            0xBE8677B8      128                                             
szBodyLen     0xBE867838      16

在执行过程中url越界了20多个字节,覆盖了szBodyLen的空间不说,还继续往后写了几个字节。写szBodyLen是安全的,因为它在用完了url之后才被使用到。可是多写越界的几个字节不知道写到什么地方去了,虽然目前跑起来没出什么问题,但是我担心会有隐患。
请教各位大牛,多越界的几个字节到底写到哪里去了?

论坛徽章:
0
2 [报告]
发表于 2010-11-25 11:01 |只看该作者
x86来说,有可能覆盖函数返回地址了,不过ARM是通过寄存器保存返回地址的.ARM的栈管理不是太熟悉,如果和X86一样有对齐要求的话,可能szBodyLen上面还有些用来对齐的空闲空间,所以覆盖了那块也没事.当然也有可能覆盖了参数的地址,如果在覆盖之前参数已经用过了的话,那到也没问题.不过越界还是一定要避免的.

论坛徽章:
0
3 [报告]
发表于 2010-11-25 11:17 |只看该作者
本帖最后由 狗气球 于 2010-11-25 11:18 编辑

ARM的汇编不熟,建议看一下汇编,这个函数扩栈的时候是怎么扩的,

找了张图看,ARM的入参是放在局部变量后边的,可能会覆盖到。
据你说越界没那么多,所以可能只是覆盖到入参。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP