I disassembled this code


int main{

  vector<string> temp;

}



The result is this


LEA ECX, %16I64X DWORD PTR
CALL std::vector<std::basic_string<char, std::char_traits<char>, std::




I disassembled this code

int main{

vector<string> temp;


}

The result is this

LEA ECX, %16I64X DWORD PTR
CALL std::vector<std::basic_string<char, std::char_traits<char>, std::

My questions are:

1. What does %16I64X doing here.

2. What does the line "std::vector, std::" means. I know that the instruction CALL called this but the one that has been called doesnt make sense. Is this an I/O redirection?

3. Im just confused of the logic of the disassembly becuase it loads the effective address and then called it. I am expecting something like moving first something in a specific address then loads its effective address then call it.

*Im just a beginner here. Thank you for your patience.
Posted on 2012-03-28 04:34:16 by the_transltr
You got the answer on stack-overflow :D
http://stackoverflow.com/questions/9901273/confused-by-the-sign-and-other-things-in-disassembly

ECX contains the "_this" , it's the hidden argument to all class non-static methods.
"lea" is used, because "temp" is on the stack, so getting its address can be done at runtime like this.

%16I64X looks more like a bug of the disassembler, it's a printf() format that prints a 64-bit integer.
Posted on 2012-04-07 06:22:40 by Ultrano