首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WinDbg评价ebp+12

WinDbg评价ebp+12
EN

Stack Overflow用户
提问于 2022-09-02 08:41:40
回答 1查看 60关注 0票数 1

我试着理解关于堆栈指针的东西。它是如何工作的..。因为大部分的教材都没有结合实际的例子,所以我试着复制一下:框架

以下是我编写的非常简单的代码:

代码语言:javascript
复制
#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上这么做的:

代码语言:javascript
复制
0:000> ? poi(ebp+8)
Evaluate expression: 1 = 00000001

好的。不,我们想要第二个参数,应该是ebp+12

代码语言:javascript
复制
0:000> ? poi(ebp+12)
Evaluate expression: 270729434 = 102300da

我们没有得到2 = 00000002。我在WinDbg中打开了内存窗口,它显示了正确的值,但是为什么我的命令不能工作呢?

谢谢!

更新:为了更好地理解截图:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-04 13:55:16

这是个常见的错误。默认情况下,12的意思是0x12

如果您想要小数12,请使用0n120xC或使用n 10更改默认数字格式 (实际上,我不知道有谁这样做)。

代码语言:javascript
复制
0:000> ? 12
Evaluate expression: 18 = 00000000`00000012
0:000> n 10
base is 10
0:000> ? 12
Evaluate expression: 12 = 00000000`0000000c

回到第16基地:

代码语言:javascript
复制
1:005:x86> n 16
base is 16
1:005:x86> ? poi(ebp+8)
Evaluate expression: 1 = 00000001
1:005:x86> ? poi(ebp+c)
Evaluate expression: 2 = 00000002

如果你有奇怪的错误

代码语言:javascript
复制
1:005:x86> ?poi(ebp +c)
Memory access error at ')'

那是因为你还在10号基地。

您可能还需要查看使用dps的堆栈,如下所示:

代码语言:javascript
复制
1:005:x86> dps ebp-c L7
008ff60c  cccccccc       <-- magic number (4x INT 3 breakpoint)
008ff610  00000003        
008ff614  cccccccc
008ff618  008ff6f4
008ff61c  00fb189a DebugESPEBP!main+0x2a [C:\...\DebugESPEBP.cpp @ 13]
008ff620  00000001        <-- a
008ff624  00000002        <-- b

正如您所看到的,dps将给您返回地址作为带有行号的符号。你会看到调试模式中的内存布局包含有助于调试的神奇数字。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73579943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档