Смущает знак% и прочее в разборке

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

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 ответ

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

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

Другие вопросы по тегам