【问题标题】:Confused by the % sign and other things in disassembly在反汇编中被 % 符号和其他东西弄糊涂了
【发布时间】:2012-04-11 16:15:00
【问题描述】:

我反汇编了这段代码

int main{

vector<string> temp;


}

结果是这样的

LEA ECX, %16I64X DWORD PTR[EBP + temp] 
CALL std::vector<std::basic_string<char, std::char_traits<char>, std::

我的问题是:

  1. %16I64X 在这里做什么。

  2. “std::vector, std::”这行是什么意思。我知道 CALL 指令调用了这个,但是被调用的指令没有意义。这是 I/O 重定向吗?

  3. 我只是对反汇编的逻辑感到困惑,因为它会加载有效地址然后调用它。我期待像首先在特定地址中移动某些东西然后加载其有效地址然后调用它。

*我只是这里的初学者。感谢您的耐心等待。

【问题讨论】:

  • 可能%16I64X 看起来它告诉汇编器使用lea 指令的short from(8 位位移)。

标签: assembly call cpu-registers disassembly


【解决方案1】:

“std::vector...”等是vector&lt;string&gt;的构造函数的全称。 "std" 因为它是在 std-namespace 中声明的,"basic_string" 因为 "string" 是 basic_string&lt;char&gt; 的 typedef 等。使用模板时,最终生成的名称通常很长且难以阅读。

我阅读这段代码的方式是 LEA ECX 使用“temp”变量的地址加载 ecx,然后将其传递给构造函数,以便在正确的地址创建对象。

【讨论】:

    猜你喜欢
    • 2022-01-23
    • 2019-01-12
    • 1970-01-01
    • 2011-08-02
    • 1970-01-01
    • 2014-08-14
    • 2016-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多