Advanced Debugging
About AdvDbg Consult Train Services Products Tools Community Contact  
欢迎光临 高端调试 登录 | 注册 | FAQ
 
  ACPI调试
Linux内核调试
Windows内核调试
 
  调试战役
调试原理
新工具观察
 
  Linux
Windows Vista
Windows
 
  Linux驱动
WDF
WDM
 
  PCI Express
PCI/PCI-X
USB
无线通信协议
 
  64位CPU
ARM
IA-32
  CPU Info Center
 
  ACPI标准
系统认证
Desktop
服务器
 
  Embedded Linux
嵌入式开发工具
VxWorks
WinCE
嵌入式Windows
 
  格蠹调试套件(GDK)
  格蠹学院
  小朱书店
  老雷的微博
  《软件调试》
  《格蠹汇编》
  《软件调试(第二版)》
沪ICP备11027180号-1

C/C++本地代码调试

帖子发起人: chena_cpp   发起时间: 2013-10-10 21:30 下午   回复: 3

Print Search
帖子排序:    
   2013-10-10, 21:30 下午
chena_cpp 离线,最后访问时间: 2012/12/21 8:18:23 chena_cpp

发帖数前100位
注册: 2012-12-21
发 贴: 11
内存块的gap被改写,求思路。
Reply Quote
struct A
{
    ......
    wstring a;
    wstring b;
    ......
};

vector<A *> a;

程序启动的时候,初始化a,vector的size是240。
经过一定步骤之后,退出程序,删除a,在delete其中一个A *(v0)的时候,crt报错。
我查看内存,发现v0->b的内存块后面是FD FD FD 00,我分析是有野指针写入最后一个字节。

如果v0是固定的索引,比如每次都是第40个,那么可以在初始化的时候给v0->b内存块的gap最后一个字节设一个内存断点。
但每次这个索引都是随机的,不过每次都是这个vector里的string出错。

有办法找到什么时候写入的吗?

IP 地址: 已记录   报告
   2013-10-13, 08:38 上午
tongzhipeng 离线,最后访问时间: 2013/10/4 8:44:36 Blade

发帖数前50位
注册: 2013-07-04
发 贴: 28
Re: 内存块的gap被改写,求思路。
Reply Quote
你是不是有跨模块释放内存, 也就是在A模块中申请的内存到B模块中释放, 这样会出问题的, 因为不同模块的Heap是相互独立的 (/M 方式编译), 跨模块释放是不允许的。 因为我碰到过几次string 出问题, 都是因为这个原因引起的, 所以想你会不会也是因为这个原因。
如果要打硬件断点的话需要指定地址吧? 要不你把vector的 size设置小一点, 然后在每个索引下的 gap位置都打上断点?

IP 地址: 已记录   报告
   2013-10-15, 06:59 上午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: 内存块的gap被改写,求思路。
Reply Quote
也可以尝试页堆
IP 地址: 已记录   报告
   2013-10-27, 13:42 下午
Hamlet 离线,最后访问时间: 2013/8/26 13:53:12 哈姆雷特

无等级
注册: 2013-08-26
发 贴: 1
Re: 内存块的gap被改写,求思路。

附件: pageheap.JPG
Reply Quote
有两条思路:
1. 张老师说的应该是应用程序验证器(Windows Application Verifier),启用full page heap。这个工具可以在内存写越界时中断到调试器。http://www.microsoft.com/downloads/details.aspx?FamilyID=c4a25ab9-649d-4a1b-b4a7-c9d8b095df18&DisplayLang=en&displaylang=en 

2. 按照楼上说的,可能有跨模块的分配释放。为了确认的话,可以跟踪对象的分配和释放的时候是否用了同一个heap handle.



IP 地址: 已记录   报告
高端调试 » 软件调试 » C/C++本地代码调试 » Re: 内存块的gap被改写,求思路。

 
Legal Notice Privacy Statement Corporate Governance Corporate Governance
(C)2004-2020 ADVDBG.ORG All Rights Reserved.