Смущает знак% и прочее в разборке
Я разобрал этот код
int main{
vector<string> temp;
}
Результатом является это
LEA ECX, %16I64X DWORD PTR[EBP + temp]
CALL std::vector<std::basic_string<char, std::char_traits<char>, std::
Мои вопросы:
Что%16I64X делает здесь.
что означает строка "std::vector, std::". Я знаю, что инструкция CALL назвала это, но та, которая была вызвана, не имеет смысла. Это перенаправление ввода / вывода?
Я просто запутался в логике разборки, потому что он загружает эффективный адрес и затем вызывает его. Я ожидаю что-то вроде перемещения сначала чего-то по определенному адресу, затем загрузки его эффективного адреса и вызова.
* Я просто новичок здесь. Спасибо за терпеливость.
1 ответ
"Std::vector..." и т. Д. - это полное имя конструктора vector<string>
, "std", потому что он объявлен в пространстве имен std, "basic_string", потому что "string" является определением типа basic_string<char>
и т. д. При использовании шаблонов конечные сгенерированные имена часто бывают очень длинными и их трудно читать.
Как я читаю этот код, LEA ECX загружает ecx с адресом переменной "temp", затем он передается в конструктор, так что объект создается по правильному адресу.