做的好的h游戏下载网站,北碚网站建设哪家好,网站开发话术,学做网站好吗k rsp rip frame_countx64下manual stack walking与x86不同#xff0c;x86一般情况下有ebp chain#xff0c;x64没有ebp chain#xff0c;类似x86的FPOx64下#xff0c;rsp在函数执行完prologue之后就不会变化(调用约定)#xff1b;所以0.如果函… k rsp rip frame_countx64下manual stack walking与x86不同x86一般情况下有ebp chainx64没有ebp chain类似x86的FPOx64下rsp在函数执行完prologue之后就不会变化(调用约定)所以0.如果函数内执行了call指令call指令返回地址压栈后rsp就会减81.也就是说在stack reconstruction时识别到返回地址所在的栈地址再加8就是当前函数执行完prologue的rsp2.由于x64非叶子函数有function table entry记录unwind info包括prologue操作所以根据unwind info可以还原进入当前函数时rsp的值这个值就是指向本函数执行完时的返回地址3.这时在回到步骤1就是stack walking 参考 http://blogs.msdn.com/b/ntdebugging/archive/2010/05/12/x64-manual-stack-reconstruction-and-stack-walking.aspx 调用约定 amd64规范rdi,rsi,rdx,rcx,r8,r9,栈 ms规范rcx,rdx,r8,r9,栈 func1(int a, int b, int c, int d, int e); // a in RCX, b in RDX, c in R8, d in R9, e pushed on stack 注意无论是amd还是ms寄存器传送的参数在栈上都有home spacecallee可选择是否把寄存器参数回写栈debug下通常会release下home space会作其他用途 函数参数识别 由于参数用寄存器传送所以release下参数查找会比较麻烦通常做法是1.查看汇编代码看参数传到那里才mov到栈2.查看参数来源 转载于:https://www.cnblogs.com/hjbf/p/10414489.html