Windbg:ChildEBP和RetAddr的含义

时间:2014-04-09 07:35:19

标签: c++ windows debugging assembly windbg

在WinDbg中,kkb命令展开堆栈并生成堆栈跟踪。输出看起来像这样 -

ChildEBP RetAddr  Args to Child              
0021b2f0 559fdbf2 04b885a0 02a30000 5a675a79 <some_symbol>
0021b3dc 559fc3b8 02a3d0b8 0021b4c0 00000000 <some_symbol>

据我所知,EBP是指向当前堆栈帧起始地址的基指针。 RetAddr是“返回地址”,一旦当前函数返回,处理将恢复。但是,据我所知,功能框架被推到了堆栈上。那么,为什么RetAddr的值与ChildEBP的值显着不同?它们应该是相似的,因为我们正在处理相同的堆栈。 我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

EBP所指的地方实际上是内存的数据部分。你可以读写它。

其中,返回地址将指向内存的代码部分。这部分是只读的。

是的,它是相同的堆栈,但内存的两个不同部分。想象一下,如果你可以写代码部分 - 黑客很容易在代码段中注入恶意代码。

link有相关详情