분해

2012-03-28 9 views
0

에서 % 기호 및 다른 것들에 의해 혼란 나는 결과는이분해

LEA ECX, %16I64X DWORD PTR[EBP + temp] 
CALL std::vector<std::basic_string<char, std::char_traits<char>, std:: 

내 질문이 있습니다

int main{ 

vector<string> temp; 


} 

이 코드를 분해 % 16I64X을 무엇

  1. 여기에서.

  2. 줄 "std :: vector, std ::"는 무엇을 의미합니까? 나는 CALL 명령이 이것을 부르지 만 부름받은 것은 의미가 없다는 것을 안다. 이것은 I/O 리디렉션입니까?

  3. 실용적인 주소를로드하고 호출하기 때문에 디스 어셈블리의 논리를 혼란스러워합니다. 나는 특정 주소에서 먼저 무언가를 움직이는 것과 같은 것을 기대하고있다.

* 여기 단지 초보자입니다. 양해 해 주셔서 감사합니다.

+0

아마도'% 16I64X'는 어셈블러에게 lea 명령어의 (8 비트 변위와 함께) 짧은 것을 사용하는 것처럼 보입니다. – hirschhornsalz

답변

0

"std :: vector ..."등은 생성자의 전체 이름은 vector<string>입니다. "std"는 std-namespace에서 선언 되었기 때문에 "basic_string"은 basic_string<char> 등의 typedef이기 때문에 "std"입니다. 템플릿을 사용할 때 최종 생성 된 이름은 종종 매우 길고 읽기가 어렵습니다.

이 코드를 읽는 방법은 LEA ECX가 "temp"변수의 주소와 함께 ecx를로드하는 것이며, 다음은 생성자에게 전달되어 올바른 주소에 개체가 만들어집니다.