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

Windows驱动开发

帖子发起人: willingbug   发起时间: 2010-05-06 16:10 下午   回复: 5

Print Search
帖子排序:    
   2010-05-06, 16:10 下午
willingbug 离线,最后访问时间: 2011/4/28 8:34:30 willingbug

发帖数前150位
注册: 2010-03-21
发 贴: 7
有一个关于NdisFreeMemory的问题
Reply Quote
最近搞一个东西,发现有一个问题,搞不明白。如果我调用NdisAllocateMemory分配一个长度为1024的内存,再调用NdisFreeMemory时长度参数(IN UINT Length,)填上512,这种情况下内存会正常释放吗?请大家多帮帮忙啊!
IP 地址: 已记录   报告
   2010-05-06, 17:44 下午
compiler 离线,最后访问时间: 2011/8/11 15:19:46 compiler

发帖数前50位
注册: 2008-04-22
发 贴: 21
Re: 有一个关于NdisFreeMemory的问题
Reply Quote
NDIS_MEMORY_NONCACHED 必须指定大小 其它的无所谓~~~
IP 地址: 已记录   报告
   2010-05-06, 18:30 下午
WANGyu 离线,最后访问时间: 2012/9/10 3:34:00 王宇

发帖数前10位
男
注册: 2007-05-08
发 贴: 306
Re: 有一个关于NdisFreeMemory的问题
Reply Quote
NDIS!NdisFreeMemory:
b9e095ce 8bff mov edi,edi
b9e095d0 55 push ebp
b9e095d1 8bec mov ebp,esp
b9e095d3 837d1000 cmp dword ptr [ebp+10h],0
b9e095d7 0f8563150000 jne NDIS!NdisFreeMemory+0x18 (b9e0ab40)
b9e095dd 6a00 push 0
b9e095df ff7508 push dword ptr [ebp+8]
b9e095e2 ff1558dee0b9 call dword ptr [NDIS!_imp__ExFreePoolWithTag (b9e0de58)]

在32位下释放时不关注 ebp+c -- Length
IP 地址: 已记录   报告
   2010-05-06, 19:19 下午
compiler 离线,最后访问时间: 2011/8/11 15:19:46 compiler

发帖数前50位
注册: 2008-04-22
发 贴: 21
Re: 有一个关于NdisFreeMemory的问题
Reply Quote
b9e095d7 0f8563150000 jne NDIS!NdisFreeMemory+0x18 (b9e0ab40)
后面还有
loc_12B40: ; CODE XREF: NdisFreeMemory(x,x,x)+9j
.text:00012B40 test byte ptr [ebp+arg_8], 2
.text:00012B44 jz short loc_12B57
.text:00012B46 push [ebp+NumberOfBytes] ; NumberOfBytes
.text:00012B49 push [ebp+BaseAddress] ; BaseAddress
.text:00012B4C call ds:__imp__MmFreeNonCachedMemory@8 ; __declspec(dllimport) MmFreeNonCachedMemory(x,x)
.text:00012B52 jmp loc_115E8
.text:00012B57 ; 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?
.text:00012B57
.text:00012B57 loc_12B57: ; CODE XREF: NdisFreeMemory(x,x,x)+1576j
.text:00012B57 test byte ptr [ebp+arg_8], 1
.text:00012B5B jz loc_115E8
.text:00012B61 push [ebp+BaseAddress] ; BaseAddress
.text:00012B64 call ds:__imp__MmFreeContiguousMemory@4 ; __declspec(dllimport) MmFreeContiguousMemory(x)
.text:00012B6A jmp loc_115E8

IP 地址: 已记录   报告
   2010-05-07, 15:32 下午
willingbug 离线,最后访问时间: 2011/4/28 8:34:30 willingbug

发帖数前150位
注册: 2010-03-21
发 贴: 7
Re: 有一个关于NdisFreeMemory的问题
Reply Quote
是不是说如果指定了NDIS_MEMORY_NONCACHED标记在释放时就必须指定分配时的长度,如果不指定就会出现内存泄漏对吗?
IP 地址: 已记录   报告
   2010-06-02, 20:21 下午
willingbug 离线,最后访问时间: 2011/4/28 8:34:30 willingbug

发帖数前150位
注册: 2010-03-21
发 贴: 7
Re: 有一个关于NdisFreeMemory的问题
Reply Quote
终于明白了,结贴呵呵
IP 地址: 已记录   报告
高端调试 » 驱动程序开发 » Windows驱动开发 » Re: 有一个关于NdisFreeMemory的问题

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