社区
资源
帖子详情
编译器版本问题
owlpc
2007-02-12 08:12:41
正在逆向一程序.可以肯定的是:这程序是用VC++6.0开发的.
但我把反出来的程序再重新编译时,很多函数总有一点差别(不论我怎样改变编译设置).从汇编代码看,我怀疑我的编译器版本与它的不同.
我的CL编译器版本如下
产品版本 6.008168.0
文件版本 12.00.8168.0
现求与之不同的编译器.或提供下载地址!
我的Email是:owlpcb@163.com
...全文
291
13
打赏
收藏
编译器版本问题
正在逆向一程序.可以肯定的是:这程序是用VC++6.0开发的. 但我把反出来的程序再重新编译时,很多函数总有一点差别(不论我怎样改变编译设置).从汇编代码看,我怀疑我的编译器版本与它的不同. 我的CL编译器版本如下 产品版本 6.008168.0 文件版本 12.00.8168.0 现求与之不同的编译器.或提供下载地址! 我的Email是:owlpcb@163.com
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
stevphen
2007-02-14
打赏
举报
回复
学习
东文-桑晨
2007-02-14
打赏
举报
回复
jf~
owlpc
2007-02-13
打赏
举报
回复
另外,印证我的编译器版本比它高的证据还有:
在连续地进行_cdecl 类型函数调用时,它的堆栈恢复都是与函数一一对应的.有多条add esp+XX.
而我的却能将它合并,只用一条.
owlpc
2007-02-13
打赏
举报
回复
多谢ATField(field)提醒:
正确的写法是:
char retset[21] ;
memset(retstr, 0, sizeof(retstr)-1) ;
GetPrivateProfileString(
lpSectionName,lpKeyName,"0,0,0,0",retstr,sizeof(retstr)-1,lpFileName) ;
优化选项我已试过n种组合.
我具体的步骤是:先关闭所有的.然后根据需要一项一项地打开.
现在打开的选项都是必需的.因为有其它的函数为证.
从汇编代码来说,我生成的代码效率较高.所以怀疑我的编译器版本比它高.
ATField
2007-02-13
打赏
举报
回复
char retstr[21]应该是char retstr[20],因为原来的代码是push 14h
看第二段汇编代码在下面这段语句:
lpNumTypeAInfo->n1 = var34 ;
lpNumTypeAInfo->n2 = var30 ;
lpNumTypeAInfo->n3 = var2c ;
lpNumTypeAInfo->n4 = var28 ;
具体的汇编代码把赋值的顺序打乱了,而原来的代码并没有打乱赋值顺序,提示LZ在编译C++代码的时候可能打开了某个优化选项,建议试着关掉优化或者换用不同的优化选项再试试。当然,这也有可能是不同编译器版本在相同的编译选项下的结果不同导致的,很难直接推断。
owlpc
2007-02-12
打赏
举报
回复
这是反出来的源代码经编译后生成的汇编代码
sub_401490 ; int __cdecl sub_401490(int,LPCSTR lpAppName,LPCSTR lpKeyName,LPCSTR lpFileName)
sub_401490 sub_401490 proc near ; CODE XREF: sub_403130+85p
sub_401490
sub_401490 var_34 = dword ptr -34h
sub_401490 var_30 = dword ptr -30h
sub_401490 var_2C = dword ptr -2Ch
sub_401490 var_28 = dword ptr -28h
sub_401490 ReturnedString = byte ptr -24h
sub_401490 var_20 = dword ptr -20h
sub_401490 var_1C = dword ptr -1Ch
sub_401490 var_18 = dword ptr -18h
sub_401490 var_14 = dword ptr -14h
sub_401490 var_10 = byte ptr -10h
sub_401490 var_C = dword ptr -0Ch
sub_401490 var_4 = dword ptr -4
sub_401490 arg_0 = dword ptr 4
sub_401490 lpAppName = dword ptr 8
sub_401490 lpKeyName = dword ptr 0Ch
sub_401490 lpFileName = dword ptr 10h
sub_401490
sub_401490 6A FF push 0FFFFFFFFh
sub_401490+2 68 E0 38 40 00 push offset loc_4038E0
sub_401490+7 64 A1 00 00 00 00 mov eax, large fs:0
sub_401490+D 50 push eax
sub_401490+E 64 89 25 00 00 00 00 mov large fs:0, esp
sub_401490+15 83 EC 28 sub esp, 28h
sub_401490+18 56 push esi
sub_401490+19 33 C0 xor eax, eax
sub_401490+1B 8B 4C 24 48 mov ecx, [esp+38h+lpFileName]
sub_401490+1F 89 44 24 14 mov dword ptr [esp+38h+ReturnedString], eax
sub_401490+23 51 push ecx ; lpFileName
sub_401490+24 89 44 24 1C mov [esp+3Ch+var_20], eax
sub_401490+28 8B 4C 24 44 mov ecx, [esp+3Ch+lpAppName]
sub_401490+2C 89 44 24 20 mov [esp+3Ch+var_1C], eax
sub_401490+30 8D 54 24 18 lea edx, [esp+3Ch+ReturnedString]
sub_401490+34 89 44 24 24 mov [esp+3Ch+var_18], eax
sub_401490+38 6A 15 push 15h ; nSize
sub_401490+3A 89 44 24 2C mov [esp+40h+var_14], eax
sub_401490+3E 52 push edx ; lpReturnedString
sub_401490+3F 88 44 24 34 mov [esp+44h+var_10], al
sub_401490+43 8B 44 24 50 mov eax, [esp+44h+lpKeyName]
sub_401490+47 68 D4 60 40 00 push offset Default ; "0,0,0,0"
sub_401490+4C 50 push eax ; lpKeyName
sub_401490+4D 51 push ecx ; lpAppName
sub_401490+4E C7 44 24 4C 01 00 00 00 mov [esp+50h+var_4], 1
sub_401490+56 FF 15 40 40 40 00 call ds:GetPrivateProfileStringA
sub_401490+5C 8D 54 24 10 lea edx, [esp+38h+var_28]
sub_401490+60 8D 44 24 0C lea eax, [esp+38h+var_2C]
sub_401490+64 52 push edx
sub_401490+65 8D 4C 24 0C lea ecx, [esp+3Ch+var_30]
sub_401490+69 50 push eax
sub_401490+6A 8D 54 24 0C lea edx, [esp+40h+var_34]
sub_401490+6E 51 push ecx
sub_401490+6F 52 push edx
sub_401490+70 8D 44 24 24 lea eax, [esp+48h+ReturnedString]
sub_401490+74 68 C8 60 40 00 push offset s_DDDD ; "%d,%d,%d,%d"
sub_401490+79 50 push eax ; char *
sub_401490+7A FF 15 6C 43 40 00 call ds:sscanf
sub_401490+80 8B 74 24 54 mov esi, [esp+50h+arg_0]
sub_401490+84 8B 4C 24 1C mov ecx, [esp+50h+var_34]
sub_401490+88 8B 54 24 20 mov edx, [esp+50h+var_30]
sub_401490+8C 8B 44 24 24 mov eax, [esp+50h+var_2C]
sub_401490+90 89 0E mov [esi], ecx
sub_401490+92 8B 4C 24 28 mov ecx, [esp+50h+var_28]
sub_401490+96 89 4E 0C mov [esi+0Ch], ecx
sub_401490+99 83 C4 18 add esp, 18h
sub_401490+9C 8D 4C 24 40 lea ecx, [esp+38h+lpAppName]
sub_401490+A0 89 56 04 mov [esi+4], edx
sub_401490+A3 89 46 08 mov [esi+8], eax
sub_401490+A6 E8 A9 1D 00 00 call CString::~CString(void)
sub_401490+A6
sub_401490+AB 8D 4C 24 44 lea ecx, [esp+38h+lpKeyName]
sub_401490+AF C6 44 24 34 00 mov byte ptr [esp+38h+var_4], 0
sub_401490+B4 E8 9B 1D 00 00 call CString::~CString(void)
sub_401490+B4
sub_401490+B9 8D 4C 24 48 lea ecx, [esp+38h+lpFileName]
sub_401490+BD C7 44 24 34 FF FF FF FF mov [esp+38h+var_4], 0FFFFFFFFh
sub_401490+C5 E8 8A 1D 00 00 call CString::~CString(void)
sub_401490+C5
sub_401490+CA 8B 4C 24 2C mov ecx, [esp+38h+var_C]
sub_401490+CE 8B C6 mov eax, esi
sub_401490+D0 5E pop esi
sub_401490+D1 64 89 0D 00 00 00 00 mov large fs:0, ecx
sub_401490+D8 83 C4 34 add esp, 34h
sub_401490+DB C3 retn
sub_401490+DB
sub_401490+DB sub_401490 endp
owlpc
2007-02-12
打赏
举报
回复
这是我反出来的源代码
typedef struct tagNUMTYPEAINFO
{
UINT n1 ;
UINT n2 ;
UINT n3 ;
UINT n4 ;
} NUMTYPEAINFO ;
typedef NUMTYPEAINFO *PNUMTYPEAINFO ;
typedef NUMTYPEAINFO far *LPNUMTYPEAINFO ;
LPNUMTYPEAINFO _cdecl Fun_431330(LPNUMTYPEAINFO lpNumTypeAInfo, CString lpSectionName, CString lpKeyName, CString lpFileName)
{
int var34,var30,var2c,var28 ;
char retstr[21] ;
memset(retstr, 0, sizeof(retstr)) ;
GetPrivateProfileString(lpSectionName,lpKeyName,"0,0,0,0",retstr,sizeof(retstr),lpFileName) ;
sscanf(retstr,"%d,%d,%d,%d",&var34,&var30,&var2c,&var28) ;
lpNumTypeAInfo->n1 = var34 ;
lpNumTypeAInfo->n2 = var30 ;
lpNumTypeAInfo->n3 = var2c ;
lpNumTypeAInfo->n4 = var28 ;
return lpNumTypeAInfo ;
}
owlpc
2007-02-12
打赏
举报
回复
这是原代码(用IDA反出来的)
sub_431330 ; int __cdecl sub_431330(int,LPCSTR lpAppName,LPCSTR lpKeyName,LPCSTR lpFileName)
sub_431330 sub_431330 proc near ; CODE XREF: sub_401580+69p
sub_431330 ; sub_401580+D7p
sub_431330 ; sub_401580+143p
sub_431330 ; sub_401580+1AFp
sub_431330 ; sub_401580+21Bp
sub_431330 ; sub_401F40+6Ap ...
sub_431330
sub_431330 var_34 = dword ptr -34h
sub_431330 var_30 = dword ptr -30h
sub_431330 var_2C = dword ptr -2Ch
sub_431330 var_28 = dword ptr -28h
sub_431330 ReturnedString = byte ptr -24h
sub_431330 var_20 = dword ptr -20h
sub_431330 var_1C = dword ptr -1Ch
sub_431330 var_18 = dword ptr -18h
sub_431330 var_14 = dword ptr -14h
sub_431330 var_10 = byte ptr -10h
sub_431330 var_C = dword ptr -0Ch
sub_431330 var_4 = dword ptr -4
sub_431330 arg_0 = dword ptr 4
sub_431330 lpAppName = dword ptr 8
sub_431330 lpKeyName = dword ptr 0Ch
sub_431330 lpFileName = dword ptr 10h
sub_431330
sub_431330 000 6A FF push 0FFFFFFFFh
sub_431330+2 004 68 E0 D5 4B 00 push offset loc_4BD5E0
sub_431330+7 008 64 A1 00 00 00 00 mov eax, large fs:0
sub_431330+D 008 50 push eax
sub_431330+E 00C 64 89 25 00 00 00 00 mov large fs:0, esp
sub_431330+15 00C 83 EC 28 sub esp, 28h
sub_431330+18 034 56 push esi
sub_431330+19 038 33 C0 xor eax, eax
sub_431330+1B 038 8B 4C 24 48 mov ecx, [esp+38h+lpFileName]
sub_431330+1F 038 89 44 24 14 mov dword ptr [esp+38h+ReturnedString], eax
sub_431330+23 038 51 push ecx ; lpFileName
sub_431330+24 03C 89 44 24 1C mov [esp+3Ch+var_20], eax
sub_431330+28 03C 8B 4C 24 44 mov ecx, [esp+3Ch+lpAppName]
sub_431330+2C 03C 89 44 24 20 mov [esp+3Ch+var_1C], eax
sub_431330+30 03C 8D 54 24 18 lea edx, [esp+3Ch+ReturnedString]
sub_431330+34 03C 89 44 24 24 mov [esp+3Ch+var_18], eax
sub_431330+38 03C 6A 14 push 14h ; nSize
sub_431330+3A 040 89 44 24 2C mov [esp+40h+var_14], eax
sub_431330+3E 040 52 push edx ; lpReturnedString
sub_431330+3F 044 88 44 24 34 mov [esp+44h+var_10], al
sub_431330+43 044 8B 44 24 50 mov eax, [esp+44h+lpKeyName]
sub_431330+47 044 68 8C E9 4E 00 push offset Default ; "0,0,0,0"
sub_431330+4C 048 50 push eax ; lpKeyName
sub_431330+4D 04C 51 push ecx ; lpAppName
sub_431330+4E 050 C7 44 24 4C 01 00 00 00 mov [esp+50h+var_4], 1
sub_431330+56 050 FF 15 64 B1 4C 00 call ds:GetPrivateProfileStringA
sub_431330+5C 038 8D 54 24 10 lea edx, [esp+38h+var_28]
sub_431330+60 038 8D 44 24 0C lea eax, [esp+38h+var_2C]
sub_431330+64 038 52 push edx
sub_431330+65 03C 8D 4C 24 0C lea ecx, [esp+3Ch+var_30]
sub_431330+69 03C 50 push eax
sub_431330+6A 040 8D 54 24 0C lea edx, [esp+40h+var_34]
sub_431330+6E 040 51 push ecx
sub_431330+6F 044 52 push edx
sub_431330+70 048 8D 44 24 24 lea eax, [esp+48h+ReturnedString]
sub_431330+74 048 68 80 E9 4E 00 push offset s_DDDD ; "%d,%d,%d,%d"
sub_431330+79 04C 50 push eax ; char *
sub_431330+7A 050 FF 15 AC B8 4C 00 call ds:sscanf
sub_431330+80 050 8B 74 24 54 mov esi, [esp+50h+arg_0]
sub_431330+84 050 8B 54 24 1C mov edx, [esp+50h+var_34]
sub_431330+88 050 8B 44 24 20 mov eax, [esp+50h+var_30]
sub_431330+8C 050 8B CE mov ecx, esi
sub_431330+8E 050 83 C4 18 add esp, 18h
sub_431330+91 038 89 11 mov [ecx], edx
sub_431330+93 038 8B 54 24 0C mov edx, [esp+38h+var_2C]
sub_431330+97 038 89 41 04 mov [ecx+4], eax
sub_431330+9A 038 8B 44 24 10 mov eax, [esp+38h+var_28]
sub_431330+9E 038 89 51 08 mov [ecx+8], edx
sub_431330+A1 038 89 41 0C mov [ecx+0Ch], eax
sub_431330+A4 038 8D 4C 24 40 lea ecx, [esp+38h+lpAppName]
sub_431330+A8 038 E8 E7 5C 08 00 call CString::~CString(void)
sub_431330+A8
sub_431330+AD 038 8D 4C 24 44 lea ecx, [esp+38h+lpKeyName]
sub_431330+B1 038 C6 44 24 34 00 mov byte ptr [esp+38h+var_4], 0
sub_431330+B6 038 E8 D9 5C 08 00 call CString::~CString(void)
sub_431330+B6
sub_431330+BB 038 8D 4C 24 48 lea ecx, [esp+38h+lpFileName]
sub_431330+BF 038 C7 44 24 34 FF FF FF FF mov [esp+38h+var_4], 0FFFFFFFFh
sub_431330+C7 038 E8 C8 5C 08 00 call CString::~CString(void)
sub_431330+C7
sub_431330+CC 038 8B 4C 24 2C mov ecx, [esp+38h+var_C]
sub_431330+D0 038 8B C6 mov eax, esi
sub_431330+D2 038 5E pop esi
sub_431330+D3 034 64 89 0D 00 00 00 00 mov large fs:0, ecx
sub_431330+DA 034 83 C4 34 add esp, 34h
sub_431330+DD 000 C3 retn
sub_431330+DD
sub_431330+DD sub_431330 endp
ATField
2007-02-12
打赏
举报
回复
你是用反编译还是自己看汇编来写对应的C++代码?重新编译的结果有何不同?
peterxuxu
2007-02-12
打赏
举报
回复
LZ犯了个错误,忘记了尽可能不要出错就怀疑编译器的原则,还是先贴部分有问题的代码大家帮你分析一下吧?
owlpc
2007-02-12
打赏
举报
回复
因为程序比较大.所以我一定要用与它一样的编译器,这样编译出来的汇编代码才能完全相同.
不然的话,要验证我写的C++源码是否正确会很麻烦地.
ATField
2007-02-12
打赏
举报
回复
VC6也有很多ServicePack阿,估计Service Pack不同
pecker
2007-02-12
打赏
举报
回复
我的也是这个版本啊
matlab找不到
编译器
的
问题
matlab在关联
编译器
的时候,会出现找不到
编译器
的
问题
,原因是matlab要找windows sdk的mt.exe,找不到报错的.因为vs2012在安装时,windows sdk的mt.exe位置变了,而matlab还是按照老的路径找,肯定找不到(原来在windows sdks下面,现在在windows kits下面). 如果你的环境是64位windows,并且vs2012装在默认目录下,matlab是64位
版本
,那么直接使用附件的文件,把他们添加到matlab/bin/win64下面的相关目录下即可,一个4个文件,放在2个目录. 如果你的vs目录不是默认的,或者是32位
版本
,或者vs
版本
不是2012,那么需要修改附件里面的相关目录的设置(其实就是cl.exe和mt.exe的目录位置), 我修改的方法是直接设置成目标目录(默认安装的位置),不是读注册表,这样简单,也无需修改注册表,以及建立什么目录链接(mklink).当然如果你的mt.exe目录不在Windows kits下,那需要修改附件的文件. 附件里有一个word文件,是我修改的标识,当做帮助来用. 使用方法, 1 把附件相关的4个文件添加到matlab/bin/win64下面的2个相关目录 2 在matlab 里面运行 mbuild -setup, 然后选 y, 再选择2012的那个项目,再选y 3 这是应该成功了 4 mex -setup也是一样的. 有一个奇怪的情况,就是.stp文件必须直接修改,我在桌面修改,然后覆盖到matlab目录后,其实并没有覆盖,还是原来的文件. 修改时要注意.
arm-linux-gcc-4.5.1(友善之臂提供的最新交叉
编译器
)
arm-linux-gcc-4.5.1(友善之臂提供的最新交叉
编译器
)!
protoc-2.5.0-win32.zip
protobuf在win下的
编译器
,2.5.0
版本
Keil
编译器
版本
问题
MDK5.2编译报错
问题
CCS
编译器
版本
问题
This project was created using a version of compiler that is not currently installed
在导入例程时,可能会出现
编译器
版本
不正确的
问题
解决方法有: 1)更改
编译器
版本
2)安装所需的
编译器
,注意:下载安装过程需要联网 这里两种方法都会讲解,但我们推荐第1)种方法,因为简单。 1 方法1)更改
编译器
版本
1、 右键单击工程名,并选择“Properties” 2、 在“General”选项卡中的“Compiler version:”选择当前已有的
版本
,
版本
号高于错误提示的就可以 2 方法2)安装所需的
编译器
1、 打开菜单Help ...
资源
2,586
社区成员
18,441
社区内容
发帖
与我相关
我的任务
资源
VC/MFC 资源
复制链接
扫一扫
分享
社区描述
VC/MFC 资源
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章