/
/
伪代码:需Patch的代码有
5
处。
if
( ((unsigned __int8)v13 &
2
) !
=
0
)
/
/
if
(ContainsGenericVariables())函数的内联?
{
if
( (unsigned
int
)TypeHandle::IsGenericVariable((TypeHandle
*
)&v167) )
goto LABEL_271;
/
/
【Patch,不跳转】
if
( (unsigned
int
)TypeHandle::HasTypeParam((TypeHandle
*
)&v167) )
{
TypeParam
=
(MethodTable
*
*
)TypeHandle::GetTypeParam(&v167, v186);
if
( (unsigned
int
)TypeHandle::ContainsGenericVariables(TypeParam,
0
) )
goto LABEL_271;
/
/
【Patch,不跳转】
}
}
else
if
( v13 &&
*
(
int
*
)v13 >
=
0
&& (
*
(_DWORD
*
)v13 &
0x30
) !
=
0
&& MethodTable::ContainsGenericVariables(v13,
0
) )
{
goto LABEL_271;
/
/
【Patch,不跳转】
}
if
( g_IBCLogger )
IBCLogger::LogMethodDescAccessStatic(this);
v14
=
*
((_WORD
*
)this
+
3
);
if
( (v14 &
7
)
=
=
5
&& (
*
((_BYTE
*
)this
+
0x18
) &
7
)
=
=
0
)
{
/
/
【Patch,不跳转】
LABEL_271:
v157
=
0i64
;
v156
=
0i64
;
v155
=
0i64
;
v154
=
0i64
;
RealCOMPlusThrow(
0x21i64
,
0x1ABBi64
,
0i64
);
/
/
Patch目的是不让其执行到此处。 COMPlusThrow(kInvalidOperationException, IDS_EE_CODEEXECUTION_CONTAINSGENERICVAR);
}
if
( g_IBCLogger )
{
IBCLogger::LogMethodDescAccessStatic(this);
v14
=
*
((_WORD
*
)this
+
3
);
}
if
( (v14 &
7
)
=
=
5
&&
*
((_WORD
*
)this
+
0xD
) )
{
MethodDesc::GetMethodInstantiation(this, &v180);
v103
=
0
;
v104
=
v181;
if
( v181 )
{
v105
=
v180;
do
{
v106
=
*
(MethodTable
*
*
)(v105
+
8i64
*
v103);
if
( ((unsigned __int8)v106 &
1
) !
=
0
)
v106
=
*
(MethodTable
*
*
)((char
*
)v106
-
1
);
v177
=
v106;
if
( (unsigned
int
)TypeHandle::ContainsGenericVariables(&v177,
0
) )
goto LABEL_271;
/
/
【Patch,不跳转】
}
while
(
+
+
v103 < v104 );
}
pThread
=
v204;
}
/
/
ContainsGenericVariables()判断结束