C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – Itanium和MSVC ABI中跨模块边界的RTTI大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在阅读 Itanium ABI

有没有人知道在使用动态加载的库时,在使用GCC和GNU binutils的Linux等流行平台上如何实现这一点的血腥细节?它有多可靠?

另外,我对MSVC中的typEID比较的印象是(使用?)在错位符号名称上使用运行时字符串比较,因为无法保证满足此要求.这仍然是它的方式吗?是否有技术平台限制阻止MSVC使用与Itanium ABI平台相同的技术?

编辑还有一个问题:跨越模块边界的异常(在ABI中)是否也依赖于RTTI信息,或者除了相当于运行时dynamic_casts之外还有其他机制吗?

解决方法

MSVC首先使用指针比较,然后,如果失败,则比较字符串.您可以在VS2012的CRT源中看到实现:

extern "C" _CRTIMP int __cdecl __TypeMatch(
    HandlerType *pCatch,// Type of the 'catch' clause
    CatchableType *pCatchable,// Type conversion under consideration
    ThrowInfo *pThrow                   // General information about the thrown
                                        //   type.
) {
    // First,check for match with ellipsis:
    if (HT_IS_TYPE_ELLIPSIS(*pCatch)) {
        return TRUE;
    }

    // Not ellipsis; the basic types match if it's the same record *or* the
    // names are identical.
    if (HT_PTD(*pCatch) != CT_PTD(*pCatchablE)
      && strcmp(Ht_name(*pCatch),Ct_name(*pCatchablE)) != 0) {
        return falSE;
    }
    ...

Itanium ABI始终仅使用指针比较.它应该与DLL一起使用的方式是动态加载器应该确保在程序的地址空间中存在每个异常的typeinfo对象的单个实例.

如果您对RTTI异常的实际实现和捕获信息感兴趣,请查看我的OpenRCE article(MSVC)Recon 2012 presentation(GCC,MSVC x64).

大佬总结

以上是大佬教程为你收集整理的c – Itanium和MSVC ABI中跨模块边界的RTTI全部内容,希望文章能够帮你解决c – Itanium和MSVC ABI中跨模块边界的RTTI所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。