感谢,不过似乎这个程序还是一个64位程序,至少默认打开的是x64dbg,我阅读了你的回复后了解到了因为我是使用int类型进行判断,所以导致引发的疑惑,随后我对代码进行了更改
[C] 纯文本查看 复制代码 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char const *argv[])
{
char str[24];
char key[] = "123456";
char t[] = "Ture";
char f[] = "Flase";
printf("Key");
scanf("%s",&str);
if(!strcmp(str,key))
printf("%s\n",t );
else
printf("%s\n",f );
system("pause");
return 0;
}
编译成功以后我对这个程序进行了调试
(如果你说为什么我把Flase和Ture都写成变量的话,主要是第一次我没有意识到我输入的密码
也会写入。所以添加了这两个变量在printf调用之前读取的时候我能够找到位置)
搜索->所有用户模块->跨模块调用
我搜索printf的调用找到了判断点,然后下断点(如图)
随后向后跟进了几步,printf调用前读取了f字符串,我对f字符串转到内存窗口看到了
后续就是我设置的密码和t字符串的内容,我也发现了我输入的字符串12345在这个的后面,第二次修改我将ture和flase设为常量,
在判断点前暂停,在栈窗口中我发现了我输入的内容,
随后就是转到内存窗口,也看到了位于我输入字符串前设置的密码。
但是还有一个问题能问一下么?
在我使用ce的时候,一般对一个变量打开内存布局首位都是这个变量。但是在使用x64dbg时转到内存窗口开头并不是我选中的内容(就像上面内存窗口,
我是点击Flase转到内存窗口的,但是实际上Flase的内容在内存窗口的中间。对于这里我有一点疑惑。
|