能力值:
(RANK:450 )
|
-
-
2 楼
从这行看可能是一个类对象,因为设置ecx后并没有直接使用,而是调用了一个函数
text:0049339B mov ecx, offset unk_A75D10
class_type fun()
{
static class_type _IDonotKnowName;
int nTemp = -1;
char _cl = dword_A75DA0; //这个变量用于控制静态对象只初始化(构造)一次
try
{
if(0 == (_cl & 0x01))
{
dword_A75DA0 |= 1;
nTemp = 0;
_IDonotKnowName.class_type::class_type(0); //调用构造函数(call sub_4932E0)
_atexit(sub_8F7140); //这个是保证静态对象在程序结束时要析构
}
}
catch(...)
{
call loc_60B26E;
}
return _IDonotKnowName;
}
至于怎么抛出异常,偶就不知道了,代码里看不出来
还有就是上面代码中的那个nTemp我也没明白为什么会有这个,不知道是作者代码中的东西,还是编译器搞上去有特殊用途的
作者真实的代码可能是
class_type fun()
{
static class_type _IDonotKnowName(0);
return _IDonotKnowName;
}
其它的都是编译器加上去的
|
能力值:
( LV6,RANK:90 )
|
-
-
3 楼
不知道的还以为你买了asm2c插件了。
|
能力值:
(RANK:450 )
|
-
-
4 楼
刚搞来的,这是处女试
|
能力值:
( LV6,RANK:90 )
|
-
-
5 楼
向cn学习。
|
能力值:
( LV12,RANK:250 )
|
-
-
6 楼
!!!厉害,厉害
呵呵,只写一个厉害,系统竟然不让发贴。
|
能力值:
( LV13,RANK:530 )
|
-
-
7 楼
--- f:\projects\classlearning2\classlearning2\classlearning2.cpp ---------------
// ClassLearning2.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
class StaticClass
{
public :
StaticClass(int i)
00401000 push ecx
00401001 push esi
00401002 mov esi,ecx
{
__asm {mov eax,eax}
00401004 mov eax,eax
StaticClass(1);
00401006 push 1
00401008 lea ecx,[esp+0Bh]
0040100C call StaticClass::StaticClass (401000h)
}
00401011 mov eax,esi
00401013 pop esi
00401014 pop ecx
00401015 ret 4
--- 无源文件 -----------------------------------------------------------------------
00401018 int 3
00401019 int 3
0040101A int 3
0040101B int 3
0040101C int 3
0040101D int 3
0040101E int 3
0040101F int 3
--- f:\projects\classlearning2\classlearning2\classlearning2.cpp ---------------
~StaticClass()
{
}
};
StaticClass * Test()
{
00401020 mov eax,dword ptr fs:[00000000h]
00401026 push 0FFFFFFFFh
00401028 push offset __ehhandler$?Test@@YAPAVStaticClass@@XZ (40186Eh)
0040102D push eax
static StaticClass myclass(1);
0040102E mov eax,1
00401033 mov dword ptr fs:[0],esp
0040103A test byte ptr [$S1 (40337Ch)],al
00401040 jne Test+48h (401068h)
00401042 or dword ptr [$S1 (40337Ch)],eax
00401048 push eax
00401049 mov ecx,offset myclass (403378h)
0040104E mov dword ptr [esp+0Ch],0
00401056 call StaticClass::StaticClass (401000h)
0040105B push offset `Test'::`2'::`dynamic atexit destructor for 'myclass'' (401880h)
00401060 call atexit (40112Dh)
00401065 add esp,4
try
{
}catch(...)
{
}
return &myclass;
}
00401068 mov ecx,dword ptr [esp]
0040106B mov eax,offset myclass (403378h)
00401070 mov dword ptr fs:[0],ecx
00401077 add esp,0Ch
0040107A ret
--- 无源文件 -----------------------------------------------------------------------
0040107B int 3
0040107C int 3
0040107D int 3
0040107E int 3
0040107F int 3
--- f:\projects\classlearning2\classlearning2\classlearning2.cpp ---------------
int _tmain(int argc, _TCHAR* argv[])
{
Test();
00401080 call Test (401020h)
return 0;
00401085 xor eax,eax
}
00401087 ret
从以上代码看的出来
要达到这个编译优化
构造函数应该是传得1 如果在默认优化设置下
且也不是返回一个对象
而是这个对象的指针。因为如果是对象 会调用拷贝函数
VC8 Release 编译
LZ的代码应该是VC6的 默认没有 ESP CHECK
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
真是谢谢楼上 linxer 以及 foxabu的代码和指点,我最喜欢就是看用代码来解释,很详细,我慢慢消化消化^o^
还有感谢十三上次给我的代码,让我受益非浅
还有个问题
对于
.text:00493370 var_C = dword ptr -0Ch
.text:00493370 var_4 = dword ptr -4
看似乎是这个涵数中使用的局部变量,但是汇编代码中并没有看到类似 sub esp,0ch 之类的东西,怎么理解这种情况呢
|
能力值:
( LV13,RANK:530 )
|
-
-
9 楼
.text:0049337C push 0FFFFFFFFh
.text:0049337E push offset loc_60B26E
.text:00493383 push eax
|
能力值:
( LV6,RANK:90 )
|
-
-
10 楼
一个是普通变量,另一个被SHE拿去用了。
so
int nTemp = -1;这句是没必要写的,因为是编译器生成的。
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
对于这局部变量基本懂了,虽然没用类似 sub esp,0ch 显式申明,但几个push实际上已经是在申明的同时初试话这些变量了,嘿嘿 又长见识了
|
能力值:
(RANK:450 )
|
-
-
12 楼
这个帖子被加精了,偶就再说两句吧,让它完美点
.text:0049337C push 0FFFFFFFFh
.text:0049337E push offset loc_60B26E
.text:00493383 push eax
这三行代码是vc SEH异常处理用的,昨天晚上看的时候按标准的异常处理项了,就多出一个nTemp = -1了, 这是一个阔展了的SEH异常处理项
sub esp,0ch 就是跟上面三行代码对着来的
罗云彬的win32汇编里 和 看雪的软件加密技术内幕里都有详尽论述
|
能力值:
(RANK:350 )
|
-
-
13 楼
操作失误,应是设置优秀帖,己纠正过来了。
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
看见精心里还扑嗵扑嗵了半天,刚煮熟的鸭子又飞了,下次多煮几只
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
十三少也喜欢SHE啊?
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
我也喜欢SHE
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
why not try to hex-rays?
|
能力值:
( LV13,RANK:530 )
|
-
-
18 楼
LZ发帖的时候还没有免费版的
|
|
|