最近在学习反汇编,用了一个很小的例子:
- C/C++ code
#include <iostream>using namespace std;#define pwd "mypassword"void main(){ char userPwd[100]; cout<<"crackme1"<<endl<<"enter password:"; cin>>userPwd; if(strcmp(pwd,userPwd)) cout<<"wrong password\n"; else cout<<"password OK!\n";}
用VS2010命令行工具输入:dumpbin /SECTION:.data /RAWDATA test.exe >.data
生成的.data文件中没有代码里写的数据,用VC++6.0生成的程序却可以看到!
而且用VS2010生成的程序.data文件是4KB,而VC6的有80KB!
请高手解惑!
------解决方案--------------------------------------------------------
和编译设置有关,你在VC6里和VC10一样动态链接多线程版的CRT的话,这些字符串也在rdata里面。
VC6默认连的是单线程版的CRT,这个在VC2005里面去掉了。