x64栈回溯流程
2016-05-23 10:31:15 0 举报
x64栈回溯是一种用于调试程序的技术,它可以帮助开发人员找到程序中的错误。在x64架构下,栈是向下增长的,因此回溯时需要从栈顶开始。当发生异常时,操作系统会将异常现场信息保存到栈中,包括寄存器值、函数调用链等。开发人员可以通过分析这些信息来确定异常发生的位置。 回溯流程通常包括以下步骤:首先,开发人员需要获取当前线程的上下文信息,包括寄存器值和栈指针。然后,他们可以遍历栈帧,分析每个栈帧中的参数和局部变量。通过这种方式,开发人员可以找到导致异常的代码位置。
作者其他创作
大纲/内容
pResultUnwind = ret
不在任何模块里?
Y
N
GetFinalChained
不在任何模块中?
获取失败?
没找到?
first = falseRsp += size
获取Rsp对应栈上的值addr
(Recursion)
获取UNWIND SIZE
EHANDLER || UHANDLER
模块==ntdll&&addr == 0
Rsp += 8
解析文件过程
Size = 0OtherSize = 0
回溯结束条件
Look RuntimeFunctions Over ?
获取初始Rip,Rsp
CHAININFO ?
END
根据Rip地址获取崩溃模块和偏移地址
Size += UnwindCode.Size
Size +=OtherSize
first?
first = false
Look UnwindCodes Over ?
OtherSize = GetUnwindSize
UnwindInfoAddress == AddrOfExceptionHandler ?
Rsp += size+8
使用CPE解析这个模块
需要注意的过程
解析MiniDump
没有超出栈尺寸?
解析失败?
Return Size
获取偏移对应的UNWIND_INFO
Loop Next
获取addr对应的模块和偏移
GetUnwindSize
Try: Rsp += 8
0 条评论
下一页