Смущает знак% и прочее в разборке - PullRequest
0 голосов
/ 28 марта 2012

Я разобрал этот код

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 назвала это, но та, которая была вызвана, не имеет смысла.Это перенаправление ввода / вывода?

  3. Я просто запутался в логике разборки, потому что он загружает эффективный адрес и затем вызывает его.Я ожидаю что-то вроде перемещения сначала чего-то по определенному адресу, затем загрузки его эффективного адреса и вызова.

* Я здесь только новичок.Спасибо за ваше терпение.

1 Ответ

0 голосов
/ 28 марта 2012

"std :: vector ..." и т. Д. - это полное имя конструктора vector<string>. "std", потому что он объявлен в пространстве имен std, "basic_string", потому что "string" - это typedef, равный basic_string<char> и т. д. При использовании шаблонов конечные сгенерированные имена часто бывают очень длинными и трудными для чтения.

То, как я читаю этот код, заключается в том, что LEA ECX загружает ecx с адресом переменной «temp», затем он передается в конструктор, так что объект создается по правильному адресу.

...