由%符号和反汇编中的其他东西混淆

时间:2012-03-28 04:42:37

标签: assembly call cpu-registers disassembly

我反汇编了这段代码

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. 我只是对反汇编的逻辑感到困惑,因为它加载有效地址然后调用它。我期待像在特定地址中移动第一个东西然后加载其有效地址然后调用它。

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

1 个答案:

答案 0 :(得分:0)

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

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