当前位置: 首页 > news >正文

公司网站建设免费wordpress主题手机版

公司网站建设免费,wordpress主题手机版,附近装修公司,爱战网关键词工具一#xff1a;背景 1.讲故事最近遇到一位朋友的程序崩溃#xff0c;发现崩溃点在富编辑器 msftedit 上#xff0c;这个不是重点#xff0c;重点在于发现他已经开启了 页堆 #xff0c;看样子是做了最后的挣扎。0:000 !analyze -v EXCEPTION_RECORD: (.exr -1) Except…一背景 1.讲故事最近遇到一位朋友的程序崩溃发现崩溃点在富编辑器 msftedit 上这个不是重点重点在于发现他已经开启了 页堆 看样子是做了最后的挣扎。0:000 !analyze -v EXCEPTION_RECORD:  (.exr -1) ExceptionAddress: 82779a9e (msftedit!CCallMgrCenter::SendAllNotifications0x00000123)ExceptionCode: c0000005 (Access violation)ExceptionFlags: 00000000 NumberParameters: 2Parameter[0]: 00000001Parameter[1]: 8351af28 Attempt to write to address 8351af28 ... STACK_TEXT:   00ffe0dc 827bda2a 8351ae88 00000000 00ffe174 msftedit!CCallMgrCenter::SendAllNotifications0x123 00ffe110 827bd731 00ffe324 00ffe174 00ffe300 msftedit!CCallMgrCenter::ExitContext0xda 00ffe120 827bde71 8351ae88 827232dc 28112f80 msftedit!CCallMgr::~CCallMgr0x17 00ffe300 8290281f 00000102 00000067 00220001 msftedit!CTxtEdit::TxSendMessage0x201 00ffe374 7576110b 00f20268 00000102 00000067 msftedit!RichEditWndProc0x9cf 00ffe3a0 757580ca 82901e50 00f20268 00000102 user32!_InternalCallWinProc0x2b ... SYMBOL_NAME:  system_windows_forms1c45e7MODULE_NAME: System_Windows_FormsIMAGE_NAME:  System.Windows.Forms.dll0:000 !heap -pActive GlobalFlag bits:vrf - Enable application verifierhpa - Place heap allocations at ends of pagesStackTraceDataBase  04c20000 of size 01000000 with 00001b18 tracesPageHeap enabled with options:ENABLE_PAGE_HEAPCOLLECT_STACK_TRACESactive heaps: 5c20000ENABLE_PAGE_HEAP COLLECT_STACK_TRACES NormalHeap - 5d90000HEAP_GROWABLE  5e90000ENABLE_PAGE_HEAP COLLECT_STACK_TRACES NormalHeap - 4960000HEAP_GROWABLE HEAP_CLASS_1 ...由于 页堆 和 NT堆 的内存布局完全不一样这一篇结合我的了解以及 windbg 验证来系统的介绍下 页堆。二对 页堆 的研究 1. 案例演示为了方便讲述先上一段测试代码。int main() {HANDLE h  HeapCreate(NULL, 0, 100);int* ptr  (int*)HeapAlloc(h, 0, 9);printf(ptr %x, ptr);DebugBreak(); }接下来用 gflags 开启下页堆。PS C:\Users\Administrator\Desktop gflags -i ConsoleApplication1.exe hpa Current Registry Settings for ConsoleApplication1.exe executable are: 02000000hpa - Enable page heap然后将程序跑起来可以看到返回的 handle 句柄。2. 页堆布局研究接下来用 windbg 的 !heap -p 命令观察页堆。0:000 !heap -pActive GlobalFlag bits:hpa - Place heap allocations at ends of pagesStackTraceDataBase  042e0000 of size 01000000 with 0000000e tracesPageHeap enabled with options:ENABLE_PAGE_HEAPCOLLECT_STACK_TRACESactive heaps: 5b0000ENABLE_PAGE_HEAP COLLECT_STACK_TRACES NormalHeap - 710000HEAP_GROWABLE  810000ENABLE_PAGE_HEAP COLLECT_STACK_TRACES NormalHeap - 510000HEAP_GROWABLE HEAP_CLASS_1  56e0000ENABLE_PAGE_HEAP COLLECT_STACK_TRACES NormalHeap - 5aa0000HEAP_CLASS_1稍微解读下上面的输出。 56e0000**表示 页堆 的堆句柄。NormalHeap - 5aa0000表示 页堆 关联的 NT堆可能有朋友要问了既然都开启页堆了, 还要弄一个 ntheap 干嘛大家不要忘了windows 的一些系统api会用到这个堆。接下来有一个问题如何观察这两个 heap 之间的关联关系呢要回答这个问题需要了解 页堆 的布局结构画个简图如下从图中可以看到离句柄偏移 4k 的位置有一个 DPH_HEAP_ROOT 结构它相当于 NTHEAP 的_HEAP我们拿 56e0000 举个例子。0:000 dt nt!_DPH_HEAP_ROOT 56e00000x1000 ntdll!_DPH_HEAP_ROOT...0x0b4 NormalHeap       : 0x05aa0000 Void0x0b8 CreateStackTrace : 0x042f4d94 _RTL_TRACE_BLOCK0x0bc FirstThread      : (null)上面输出的 NormalHeap: 0x05aa0000 就是它关联的 ntheap 句柄。3. 堆块布局研究对页堆 有了一个整体认识接下来继续研究堆块句柄我们发现 ptr0x56e5ff0 是落在 56e0000 这个页堆上接下来我们导出这个页堆的详细信息。0:000 !heap -p -h 56e0000_DPH_HEAP_ROOT  56e1000Freed and decommitted blocksDPH_HEAP_BLOCK : VirtAddr VirtSizeBusy allocationsDPH_HEAP_BLOCK : UserAddr  UserSize - VirtAddr VirtSize056e1f70 : 056e5ff0 00000009 - 056e5000 00002000unknown!fillpattern_HEAP  5aa0000No FrontEnd_HEAP_SEGMENT  5aa0000CommittedRange  5aa04a8HEAP_ENTRY Size Prev Flags    UserPtr UserSize - state05aa04a8 0167 0000  [00]   05aa04b0    00b30 - (free)* 05aa0fe0 0004 0167  [00]   05aa0fe8    00018 - (busy)VirtualAllocdBlocks  5aa009c上面的信息如何解读呢我们逐一来聊一下吧。_DPH_HEAP_ROOT 56e1000这个已经和大家聊过了它和 _HEAP 结构是一致的。DPH_HEAP_BLOCK :从字面意思就能看出来和 ntheap 的 heap_entry 是一致的都是用来描述堆块信息 不过有一点要注意这个堆块是落在上图中的 DPH_HEAP_BLOCK Pool 池链表结构中的言外之意就是它不会作为 heap_entry 的头部附加信息接下来我们 dt 导出来看看。0:000 dt ntdll!_DPH_HEAP_BLOCK 056e1f70 0x000 pNextAlloc       : 0x056e1020 _DPH_HEAP_BLOCK0x000 AvailableEntry   : _LIST_ENTRY [ 0x56e1020 - 0x0 ]0x000 TableLinks       : _RTL_BALANCED_LINKS0x010 pUserAllocation  : 0x056e5ff0  ???0x014 pVirtualBlock    : 0x056e5000  ???0x018 nVirtualBlockSize : 0x20000x01c nVirtualAccessSize : 0x200x020 nUserRequestedSize : 90x024 nUserActualSize  : 0x56e1f600x028 UserValue        : 0x056e1fc8 Void0x02c UserFlags        : 0x3f180x030 StackTrace       : 0x042f4dcc _RTL_TRACE_BLOCK0x034 AdjacencyEntry   : _LIST_ENTRY [ 0x56e1010 - 0x56e1010 ]0x03c pVirtualRegion   : (null)从字段信息看它记录了堆块的分配首地址栈信息等等比如用 dds 观察一下 StackTrace。0:000 dds 0x042f4dcc  042f4dcc  00000000 042f4dd0  00006001 042f4dd4  000d0000 042f4dd8  78aba8b0 verifier!AVrfDebugPageHeapAllocate0x240 042f4ddc  77e0ef8e ntdll!RtlDebugAllocateHeap0x39 042f4de0  77d76150 ntdll!RtlpAllocateHeap0xf0 042f4de4  77d757fe ntdll!RtlpAllocateHeapInternal0x3ee 042f4de8  77d753fe ntdll!RtlAllocateHeap0x3e 042f4dec  00ad1690 ConsoleApplication1!main0x30 [D:\net6\ConsoleApp1\ConsoleApplication1\DisplayGreeting.cpp  14] 042f4df0  00ad1bc3 ConsoleApplication1!invoke_main0x33 [D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl  78] 042f4df4  00ad1a17 ConsoleApplication1!__scrt_common_main_seh0x157 [D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl  288] 042f4df8  00ad18ad ConsoleApplication1!__scrt_common_main0xd [D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl  331] 042f4dfc  00ad1c48 ConsoleApplication1!mainCRTStartup0x8 [D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_main.cpp  17] 042f4e00  7646fa29 KERNEL32!BaseThreadInitThunk0x19 042f4e04  77d975f4 ntdll!__RtlUserThreadStart0x2f 042f4e08  77d975c4 ntdll!_RtlUserThreadStart0x1b ...接下来再回答一个问题页堆的堆块有没有头部附加信息呢当然是有的叫做 DPH_BLOCK_INFORMATION 即在 UserPtr-0x20 的位置我们可以用 dt 显示一下。0:000 ?? sizeof(ntdll!_DPH_BLOCK_INFORMATION) unsigned int 0x200:000 dt ntdll!_DPH_BLOCK_INFORMATION 056e5ff0-0x200x000 StartStamp       : 0xabcdbbbb0x004 Heap             : 0x056e1000 Void0x008 RequestedSize    : 90x00c ActualSize       : 0x10000x010 FreeQueue        : _LIST_ENTRY [ 0x0 - 0x0 ]0x010 FreePushList     : _SINGLE_LIST_ENTRY0x010 TraceIndex       : 00x018 StackTrace       : 0x042f4dcc Void0x01c EndStamp         : 0xdcbabbbb...根据上面两个输出在脑海中应该可以绘出如下图这里要稍微解释下 栅栏页 的概念。4. 栅栏页每一个 heap_entry 都会占用 8k 的空间第一个 4k 是用户区第二个 4k 是栅栏区为了就是当代码越界时访问了这个 栅栏页 会立即报错因为栅栏页是禁止访问的我们可以提取 UserAddr 附近的内存看看 056e6000 056e50000x1000 后面是不是都是问号。0:000 dp 056e5ff0  056e5ff0  c0c0c0c0 c0c0c0c0 d0d0d0c0 d0d0d0d0 056e6000  ???????? ???????? ???????? ???????? 056e6010  ???????? ???????? ???????? ???????? 056e6020  ???????? ???????? ???????? ???????? 056e6030  ???????? ???????? ???????? ???????? 056e6040  ???????? ???????? ???????? ???????? 056e6050  ???????? ???????? ???????? ???????? 056e6060  ???????? ???????? ???????? ????????0:000 !address 056e50000x1000Usage:                  PageHeap Base Address:           056e6000 End Address:            057e0000 Region Size:            000fa000 (1000.000 kB) State:                  00002000          MEM_RESERVE Protect:                info not present at the target Type:                   00020000          MEM_PRIVATE Allocation Base:        056e0000 Allocation Protect:     00000001          PAGE_NOACCESS More info:              !heap -p 0x56e1000 More info:              !heap -p -a 0x56e6000Content source: 0 (invalid), length: fa000三总结 这就是对 页堆 的一个研究总的来说 页堆 是一种专用于调试的堆优缺点如下优点因为 栅栏页 紧邻 用户页一旦代码越界进入了 栅栏页会立即报 访问违例 异常这样我们就可以获取第一现场错误。缺点对空间造成了巨大浪费即使 1byte 的内存分配也需要至少 2 个内存页 的内存占用 8k。哈哈对调试程序崩溃类问题非常值得一试
http://www.pierceye.com/news/446915/

相关文章:

  • 长春网站建设wang汕头网站建设网站
  • 自助建站网站哪个好网站做nat映射需要哪些端口
  • 免费手机网站平台注册嘉兴建站公司
  • 什么网站可以做兼职美工网站建设方案500字
  • 宁波做网站优化网站专题页怎么做
  • 西安网站建设q.479185700強网站改版301是什么意思
  • 网站推广服务 商务服务网站建设官方网站
  • 建设电影网站的关键苏州网站建设业务的公司
  • 水头哪里有做网站的店铺装修设计软件
  • 做网站的大骗子男女做爰视频免费网站
  • 建设一个网站选择的服务器安徽建站
  • 网站制作网站价格用网页制作个人网站
  • 衡水做网站报价网络工程毕设做网站
  • 做网站设计怎么样网站建设先进技术
  • 廊坊cms建站系统wd wordpress
  • vue做网站的好处是什么顺企网下载
  • 在线建站模板下载网站的软件
  • 阿里云网站全部清空怎么做重庆市渝快办官网
  • 关于网站优化的文章室内设计公司排名都有哪些
  • 英文外贸网站建设中国建筑出版在线官网app
  • 浙江网站建设服务公司shopex网站搬家
  • 网站服务器无法访问百姓装潢上海门店具体地址
  • 怎么做网站推广怎么样网页截图快捷键是哪个
  • 常州网站制作费用如何搭建网站的支付接口
  • 网站会员体系网站后台都有哪些
  • 宜昌网站建设制作公司网站301在哪做
  • 备案网站分布地点wordpress如何去掉amp:
  • 做一个小说阅读网站怎么做网站 没有备案 访问不了
  • 乐山乐人网站建设公司网站域名查主机名
  • 自适应网站的代表腰肌劳损的自我治疗和恢复的方法有什么?