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

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

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. Меня просто смущает логика дизассемблирования, потому что он загружает эффективный адрес, а затем вызывает его. Я ожидаю что-то вроде перемещения сначала чего-то по определенному адресу, затем загружает его эффективный адрес, а затем вызывает его.

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


person the_transltr    schedule 28.03.2012    source источник
comment
Возможно, %16I64X выглядит так, как будто говорит ассемблеру использовать краткую команду from (с 8-битным смещением) инструкции lea.   -  person Gunther Piez    schedule 28.03.2012


Ответы (1)


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

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

person Ville Krumlinde    schedule 28.03.2012