【问题标题】:Need Help in C++ Disasm在 C++ Disasm 中需要帮助
【发布时间】:2014-06-27 19:54:42
【问题描述】:

我使用 IDA Pro 进行了一些 C++ 反汇编。但我经常看到这样的台词。

call    __ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc ;std::operator<<<std::char_traits<char>>(std::basic_ostream<char,std::char_traits<char>> &,char  const*)

这些字形是关于什么的?为什么 C++ 函数看起来如此复杂?以及如何简化我的 ASM。提前致谢。

【问题讨论】:

标签: c++ reverse-engineering disassembly ida


【解决方案1】:

C++ 确保链接器可以通过 mangling 名称来区分重载函数。您看到的是编码在损坏的函数名称中的类型信息。

【讨论】:

    【解决方案2】:

    这是(例如)的输出函数

    cout << "something";
    

    std::operator&lt;&lt; 是函数的名称。它需要一个std::basic_ostream&lt;char, std::char_traits&lt;char&gt;&gt;&amp; 参数 - 换句话说,std::ostream 第二个参数是一个char const *,换句话说,一个经典的 C 风格字符串,不应该改变。

    由于operator&lt;&lt; 也返回std::ostream&amp;,因此在名称之前进行编码

    它是“复杂的”,因为它更容易定义一个模板化的basic_ostream,因为有各种类型的流,例如采用“宽字符”的owstream,有一个模板化的basic_ostream 可以被实例化以形成std::ostream,而不是必须实现几个不同的,本质上相同的流类。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-02
      • 2016-03-31
      • 1970-01-01
      • 2015-08-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多