|
|
1
6
您正在查看单个字符,然后将它们转换为32位整数,这让您感到困惑。返回地址位于这四行中的最低有效字节中:
即,您的回信地址是0x08048b54。 请尝试以下方法:
|
|
|
2
4
这个
|
|
|
3
1
如果您想知道这一切是如何工作的,最好是在调试器中运行应用程序。真的很难弄清楚到底发生了什么。 任何调试器都可以,但是我最了解windbg,所以这里有一些关于如何开始使用稍微修改过的代码版本的指针,就像Greg建议的那样,您需要一个int*。
致:
删除:
移动(第一个变量,在x1之前):
新的更改(更容易阅读,并且与以前一样(x-i)是随机的/当前不在范围值中):
在windbg中,启动调用、内存、线程和命令窗口,以便您可以看到它们。 用编译器编译你的C代码,我使用MSVC(你可以免费试用),用“Visual Studio 20##命令提示符”和“cl/Zi your.C”编译。加载Windbg(Windows调试工具),按Ctrl+E或使用“打开可执行文件”。
在命令窗口中,在DoTestStack上放置一个带有“bu DoTestStack”的断点。 使用“g”命令开始调试。
输出应该与测试代码相同(在您执行我建议的更改之后),如果您继续点击p,您还会看到在内存窗口中,您可以观察每次执行I更改的值,但是由于printf现在正在打印其他值,您只需在输出上的原始“0”处看到它;)。 您可以交替使用windbg命令 (注意,i的值是0xb,因为它在for循环的中间)
这与修改后的测试代码相同(无符号支持除外);
|