特殊的函数调用导致的堆栈信息不对的情况

  在调用函数advapi32!GetTokenInformation时,设置断点。运行至断点时,我想查看调用此函数的参数信息

 

但是此参数信息不对

我于是查看了当前的汇编指令

单步调试后,jmp指令进入KernelBase!GetTokenInformation

并且发现之前的堆栈信息不对,调用GetTokenInformation并非有此前显示的上一级调用堆栈调用,但是进入KernelBase!GetTokenInformation后,

调用堆栈显示正确。

根据以上分析

第一次调用K显示advapi32!GetTokenInformation的EBP信息应该为调用advapi32!GetTokenInformation函数的主调函数的EBP信息,所以使用dd??查看到的是advapi32!GetTokenInformation上一级函数的的相关栈信息。而调用到advapi32!GetTokenInformation时,EBP信息为什么没有智能的修改呢?我猜测是因为advapi32!GetTokenInformation执令信息里没有包含堆栈初始化信息(push EBP,push EBP,esp)。而进入KernelBase!GetTokenInformation后,一切正常。所以在这种情况下,可以使用esp相对地址查看参数信息。

你可能感兴趣的:(特殊的函数调用导致的堆栈信息不对的情况)