📄 cpp.c
字号:
* ??0bad_cast@@QAE@ABQBD@Z (MSVCRT.@)
*/
DEFINE_THISCALL_WRAPPER1(MSVCRT_bad_cast_ctor);
bad_cast * __stdcall MSVCRT_bad_cast_ctor(bad_cast * _this, const char ** name)
{
TRACE("(%p %s)\n", _this, *name);
EXCEPTION_ctor(_this, name);
_this->vtable = &MSVCRT_bad_cast_vtable;
return _this;
}
/******************************************************************
* ??0bad_cast@@QAE@ABV0@@Z (MSVCRT.@)
*/
DEFINE_THISCALL_WRAPPER1(MSVCRT_bad_cast_copy_ctor);
bad_cast * __stdcall MSVCRT_bad_cast_copy_ctor(bad_cast * _this, const bad_cast * rhs)
{
TRACE("(%p %p)\n", _this, rhs);
MSVCRT_exception_copy_ctor(_this, rhs);
_this->vtable = &MSVCRT_bad_cast_vtable;
return _this;
}
/******************************************************************
* ??1bad_cast@@UAE@XZ (MSVCRT.@)
*/
DEFINE_THISCALL_WRAPPER0(MSVCRT_bad_cast_dtor);
void __stdcall MSVCRT_bad_cast_dtor(bad_cast * _this)
{
TRACE("(%p)\n", _this);
MSVCRT_exception_dtor(_this);
}
/******************************************************************
* ??4bad_cast@@QAEAAV0@ABV0@@Z (MSVCRT.@)
*/
DEFINE_THISCALL_WRAPPER1(MSVCRT_bad_cast_opequals);
bad_cast * __stdcall MSVCRT_bad_cast_opequals(bad_cast * _this, const bad_cast * rhs)
{
TRACE("(%p %p)\n", _this, rhs);
MSVCRT_exception_opequals(_this, rhs);
return _this;
}
/******************************************************************
* ??_Ebad_cast@@UAEPAXI@Z (MSVCRT.@)
*/
DEFINE_THISCALL_WRAPPER1(MSVCRT_bad_cast_vector_dtor);
void * __stdcall MSVCRT_bad_cast_vector_dtor(bad_cast * _this, unsigned int flags)
{
TRACE("(%p %x)\n", _this, flags);
if (flags & 2)
{
/* we have an array, with the number of elements stored before the first object */
int i, *ptr = (int *)_this - 1;
for (i = *ptr - 1; i >= 0; i--) MSVCRT_bad_cast_dtor(_this + i);
MSVCRT_operator_delete(ptr);
}
else
{
MSVCRT_bad_cast_dtor(_this);
if (flags & 1) MSVCRT_operator_delete(_this);
}
return _this;
}
/******************************************************************
* ??_Gbad_cast@@UAEPAXI@Z (MSVCRT.@)
*/
DEFINE_THISCALL_WRAPPER1(MSVCRT_bad_cast_scalar_dtor);
void * __stdcall MSVCRT_bad_cast_scalar_dtor(bad_cast * _this, unsigned int flags)
{
TRACE("(%p %x)\n", _this, flags);
MSVCRT_bad_cast_dtor(_this);
if (flags & 1) MSVCRT_operator_delete(_this);
return _this;
}
/******************************************************************
* ??8type_info@@QBEHABV0@@Z (MSVCRT.@)
*/
DEFINE_THISCALL_WRAPPER1(MSVCRT_type_info_opequals_equals);
int __stdcall MSVCRT_type_info_opequals_equals(type_info * _this, const type_info * rhs)
{
int ret = !strcmp(_this->mangled + 1, rhs->mangled + 1);
TRACE("(%p %p) returning %d\n", _this, rhs, ret);
return ret;
}
/******************************************************************
* ??9type_info@@QBEHABV0@@Z (MSVCRT.@)
*/
DEFINE_THISCALL_WRAPPER1(MSVCRT_type_info_opnot_equals);
int __stdcall MSVCRT_type_info_opnot_equals(type_info * _this, const type_info * rhs)
{
int ret = !!strcmp(_this->mangled + 1, rhs->mangled + 1);
TRACE("(%p %p) returning %d\n", _this, rhs, ret);
return ret;
}
/******************************************************************
* ?before@type_info@@QBEHABV1@@Z (MSVCRT.@)
*/
DEFINE_THISCALL_WRAPPER1(MSVCRT_type_info_before);
int __stdcall MSVCRT_type_info_before(type_info * _this, const type_info * rhs)
{
int ret = strcmp(_this->mangled + 1, rhs->mangled + 1) < 0;
TRACE("(%p %p) returning %d\n", _this, rhs, ret);
return ret;
}
/******************************************************************
* ??1type_info@@UAE@XZ (MSVCRT.@)
*/
DEFINE_THISCALL_WRAPPER0(MSVCRT_type_info_dtor);
void __stdcall MSVCRT_type_info_dtor(type_info * _this)
{
TRACE("(%p)\n", _this);
if (_this->name)
MSVCRT_free(_this->name);
}
/******************************************************************
* ?name@type_info@@QBEPBDXZ (MSVCRT.@)
*/
DEFINE_THISCALL_WRAPPER0(MSVCRT_type_info_name);
const char * __stdcall MSVCRT_type_info_name(type_info * _this)
{
if (!_this->name)
{
/* Create and set the demangled name */
/* Nota: mangled name in type_info struct always start with a '.', while
* it isn't valid for mangled name.
* Is this '.' really part of the mangled name, or has it some other meaning ?
*/
char* name = __unDName(0, _this->mangled + 1, 0,
MSVCRT_malloc, MSVCRT_free, 0x2800);
if (name)
{
unsigned int len = strlen(name);
/* It seems _unDName may leave blanks at the end of the demangled name */
while (len && name[--len] == ' ')
name[len] = '\0';
_mlock(_EXIT_LOCK2);
if (_this->name)
{
/* Another thread set this member since we checked above - use it */
MSVCRT_free(name);
}
else
_this->name = name;
_munlock(_EXIT_LOCK2);
}
}
TRACE("(%p) returning %s\n", _this, _this->name);
return _this->name;
}
/******************************************************************
* ?raw_name@type_info@@QBEPBDXZ (MSVCRT.@)
*/
DEFINE_THISCALL_WRAPPER0(MSVCRT_type_info_raw_name);
const char * __stdcall MSVCRT_type_info_raw_name(type_info * _this)
{
TRACE("(%p) returning %s\n", _this, _this->mangled);
return _this->mangled;
}
/* Unexported */
DEFINE_THISCALL_WRAPPER1(MSVCRT_type_info_vector_dtor);
void * __stdcall MSVCRT_type_info_vector_dtor(type_info * _this, unsigned int flags)
{
TRACE("(%p %x)\n", _this, flags);
if (flags & 2)
{
/* we have an array, with the number of elements stored before the first object */
int i, *ptr = (int *)_this - 1;
for (i = *ptr - 1; i >= 0; i--) MSVCRT_type_info_dtor(_this + i);
MSVCRT_operator_delete(ptr);
}
else
{
MSVCRT_type_info_dtor(_this);
if (flags & 1) MSVCRT_operator_delete(_this);
}
return _this;
}
/* vtables */
const exception_vtable MSVCRT_exception_vtable =
{
__thiscall_MSVCRT_exception_vector_dtor,
__thiscall_MSVCRT_what_exception
};
const exception_vtable MSVCRT_bad_typeid_vtable =
{
__thiscall_MSVCRT_bad_typeid_vector_dtor,
__thiscall_MSVCRT_what_exception
};
const exception_vtable MSVCRT_bad_cast_vtable =
{
__thiscall_MSVCRT_bad_cast_vector_dtor,
__thiscall_MSVCRT_what_exception
};
const exception_vtable MSVCRT___non_rtti_object_vtable =
{
__thiscall_MSVCRT___non_rtti_object_vector_dtor,
__thiscall_MSVCRT_what_exception
};
static const exception_vtable MSVCRT_type_info_vtable =
{
__thiscall_MSVCRT_type_info_vector_dtor,
NULL
};
/* Static RTTI for exported objects */
static type_info exception_type_info =
{
(void*)&MSVCRT_type_info_vtable,
NULL,
".?AVexception@@"
};
static const rtti_base_descriptor exception_rtti_base_descriptor =
{
&exception_type_info,
0,
0,
0,
0,
0
};
static const rtti_base_array exception_rtti_base_array =
{
{
&exception_rtti_base_descriptor,
NULL,
NULL
}
};
static const rtti_object_hierachy exception_type_hierachy =
{
0,
0,
1,
&exception_rtti_base_array
};
static const rtti_object_locator exception_rtti =
{
0,
0,
0,
&exception_type_info,
&exception_type_hierachy
};
static const cxx_type_info exception_cxx_type_info =
{
0,
&exception_type_info,
0,
-1,
0,
sizeof(exception),
(cxx_copy_ctor)__thiscall_MSVCRT_exception_copy_ctor
};
static type_info bad_typeid_type_info =
{
(void*)&MSVCRT_type_info_vtable,
NULL,
".?AVbad_typeid@@"
};
static const rtti_base_descriptor bad_typeid_rtti_base_descriptor =
{
&bad_typeid_type_info,
1,
0,
0xffffffff,
0,
0
};
static const rtti_base_array bad_typeid_rtti_base_array =
{
{
&bad_typeid_rtti_base_descriptor,
&exception_rtti_base_descriptor,
NULL
}
};
static const rtti_object_hierachy bad_typeid_type_hierachy =
{
0,
0,
2,
&bad_typeid_rtti_base_array
};
static const rtti_object_locator bad_typeid_rtti =
{
0,
0,
0,
&bad_typeid_type_info,
&bad_typeid_type_hierachy
};
static const cxx_type_info bad_typeid_cxx_type_info =
{
0,
&bad_typeid_type_info,
0,
-1,
0,
sizeof(exception),
(cxx_copy_ctor)__thiscall_MSVCRT_bad_typeid_copy_ctor
};
static type_info bad_cast_type_info =
{
(void*)&MSVCRT_type_info_vtable,
NULL,
".?AVbad_cast@@"
};
static const rtti_base_descriptor bad_cast_rtti_base_descriptor =
{
&bad_cast_type_info,
1,
0,
0xffffffff,
0,
0
};
static const rtti_base_array bad_cast_rtti_base_array =
{
{
&bad_cast_rtti_base_descriptor,
&exception_rtti_base_descriptor,
NULL
}
};
static const rtti_object_hierachy bad_cast_type_hierachy =
{
0,
0,
2,
&bad_cast_rtti_base_array
};
static const rtti_object_locator bad_cast_rtti =
{
0,
0,
0,
&bad_cast_type_info,
&bad_cast_type_hierachy
};
static const cxx_type_info bad_cast_cxx_type_info =
{
0,
&bad_cast_type_info,
0,
-1,
0,
sizeof(exception),
(cxx_copy_ctor)__thiscall_MSVCRT_bad_cast_copy_ctor
};
static type_info __non_rtti_object_type_info =
{
(void*)&MSVCRT_type_info_vtable,
NULL,
".?AV__non_rtti_object@@"
};
static const rtti_base_descriptor __non_rtti_object_rtti_base_descriptor =
{
&__non_rtti_object_type_info,
2,
0,
0xffffffff,
0,
0
};
static const rtti_base_array __non_rtti_object_rtti_base_array =
{
{
&__non_rtti_object_rtti_base_descriptor,
&bad_typeid_rtti_base_descriptor,
&exception_rtti_base_descriptor
}
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -