我试着去理解关于stackpointer,basepointer的事情..它是如何工作的..因为大多数的教学材料都没有结合一个实际的例子,我试着重现:https://en.wikibooks.org/wiki/X86_Disassembly/Functions_and_Stack_Frames
下面是我编写的非常简单的代码:
#include <stdio.h>
int main()
{
function1(1, 2);
}
int function1(int a, int b)
{
int c = a + b;
return c;
}
我使用WinDbg来执行程序,并设置断点bm CallStackPractice!function1
,键入g
以命中断点,键入p
以单步执行函数。
对于ebp+8
,我们应该得到第一个参数。我在WinDbg中这样做了:
0:000> ? poi(ebp+8)
Evaluate expression: 1 = 00000001
很好,第二个参数应该是ebp+12
.
0:000> ? poi(ebp+12)
Evaluate expression: 270729434 = 102300da
我们没有得到2 = 00000002
。我在WinDbg中打开了内存窗口,它显示了正确的值,但为什么我的命令不起作用?
谢谢你,谢谢你
更新:为了更好地理解屏幕截图:
1条答案
按热度按时间dz6r00yl1#
这是一个常见的错误。默认情况下,
12
表示0x12
。如果你想要一个十进制数12,使用
0n12
或0xC
或change the default number format加上n 10
(实际上我不知道有谁会这么做)。回到16号基地:
如果你遇到奇怪的错误
那是因为你还在10垒
您可能还需要查看
dps
的堆栈,如下所示:如您所见,
dps
会以行号符号的形式给予返回地址。