【发布时间】:2015-05-23 10:00:35
【问题描述】:
我想在当前进程的内存中搜索模式。我使用 VirtualQuery 查询内存页面以提取感兴趣的范围。问题是在连续循环 5 分钟后,程序因堆栈溢出而崩溃。进程分配的内存越来越大。
问题在于这个循环:
valid_range:
pushad
mov eax, [ebp]
mov esi, [eax] ; memory range start
mov ecx, [eax + 12] ; memory range size
xor eax, eax
loopmem:
lodsb ; this causes stackoverflow after certain time ????
dec ecx
cmp ecx, 0 ; we loop trough memory until we finish it
; reduced the code to minimum
je finish_range
jmp loopmem
finish_range:
popad
ret
【问题讨论】:
-
如果我注释掉 lodsb 一切顺利
-
出现堆栈溢出有点奇怪,但您可能希望确保只接触已提交且未设置 PAGE_GUARD 属性的页面。
-
是的,看起来内存范围是错误的,但仍然无法解释为什么读取内存会增加它。