关闭

单元测试的遇到的问题以及收获

发表于:2013-11-20 11:04

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:duhaomin    来源:51Testing软件测试网采编

  001:导入表:
  在XP的user32.dll里边,加载的时候会加载3个导入表,顺序是GDI32.DLLKENNEL32.DLL,NTDLL.DLL,里边包含的函数数量为:118,119,73
  Win7 64位下包含的是4个导入表,顺序是NTDLL.DLL,GDI32.DLL,KERNEL32.DLL,ADVAPI32.DLL,里边包含的函数数量为:91,117,125,1
  Win7 32位下包含的是3个导入表,顺序是NTDLL.DLL,GDI32.DLL,KERNEL32.DLL,里边包含的函数数量为:88,117,125
  Win8下格局比较不解,跟之前的版本完全不一样了,有很多的api-ms-win,很奇怪
  002:
int nFlg = 0;
int n = *(int*)nFlg;
prinf("n = %d\n",n);
  看出来了吗?这个肯定会崩溃,继续写一个:
int nFlg = 0;
int n = *(int*)(nFlg+0xffff);
prinf("n = %d\n",n);
  这个依然崩溃,再写一个:
int nFlg = 0;
int n = *(int*)(nFlg+0x10000);
prinf("n = %d\n",n);
  这个就可以通过,还是那个知识点,0x0000 0000~0x0000 ffff属于内存保护非法访问区,也有人说是空指针赋值分区,这个区域的数值是不允许获取,一点资料:
  1)空指针赋值分区
  范围:0x0000 0000~0x0000 FFFF
  为了帮助程序员捕获对空指针的赋值。
  分配内存时,如果由于某种原因分配不成功,则返回空指针0x0000 0000。当用户继续使用比如改写数据时,系统将因为发生访问违规而退出。
  2)用户模式分区
  范围:0x0001 0000~0x7FFE FFFF
  进程只能读取或访问这个范围的虚拟地址,超越这个范围的行为都会产生违规退出。
  所有.exe和动态链接库(DLL文件)都载入到这一区域,进程的大部分数据也都保存在这一分区。每个进程该分区空间是独享的。
  3)64KB禁入分区
  范围:0x7FFF 0000~0x7FFF FFFF
  没有了解
  4)共享内核分区
  范围:0x8000 0000~0xFFFF FFFF
  这个空间是供操作系统内核代码、设备驱动程序代码、设备I/O高速缓存、非分页缓冲池分配表、进程页面表等。这段地址各进程是共享的,但进程不能读取或者访问这一分区。
  转自:http://blog.csdn.net/anye3000/article/details/6674176
  003:一点经验总结:当遇到使用 try {}结构都不能try住的话,有可能是想访问0x 0000 ffff以及一下地址的内容,出现这种情况有可能是类析构重复导致地址已经为空,有可能是将0xffff一下数值作为地址使用,总之是这类,仔细看一下。
  004:扯了那么多,还没说关于单元测试本身的东西呢,具体的:
  玩转Google开源C++单元测试框架Google Test系列(gtest)(总)
<pre name="code" class="cpp"><pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
</pre>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号