Mylabs

64비트 변수 출력하기 (64비트 포멧스트링) 본문

Dev

64비트 변수 출력하기 (64비트 포멧스트링)

[Edge] 2010. 4. 27. 13:37
 전 분석용으로 현재 32비트 OS 를 사용하고 있습니다. 

 물론 Asm 도 32비트 어셈블리어를 봅니다.

 얼마전부터 파일바이러스를 하나 분석하고 있는데, 복잡하고 Recursive 한 알고르즘을 사용하더군요. 

 그래서 얍삽하게(?) 인라인 어셈으로 함수단위를 코딩하려고 했는데, 

 이번엔 여느때와 달리 C++ 로 작업을 진행중에 있습니다. 

 그런데, ADD와 ADC 연산을 위해 CarryFlag를 취하고 싶어서 머리를 마구 굴려서,
   1) DWORDLONG 형으로 레지스터 변수 8바이트 주고
   2) 마스킹이랑 비트 쉬프트 이용해서, CF 랑 하위 8바이트를 얻어오게 만들었습니다.

 근데 ADD나 ADC 연산후에 상위 바이트들과 관계없이 하위 8바이트가 모두 0이 되면, 

 32비트에서 쓰던 포멧스트링으로 출력하면 값이 0으로 나오더군요.

 그 변수값을 정확히 출력해서 보고싶은데 거기에 맞는 64비트 포멧스트링이 무엇인지를 몰랐습니다. ㅠ 

 찾아보니 이런 방법이 있었네요. 

      %I64[formatString]      ;   표현이 맞나 모르겠네요^^

DWORDLONG EDX = 0x0000000100000000;
printf("EDX : %x \n", EDX);      // 당연히 "0" 출력됩니다.
printf("EDX : %I64x \n",EDX);  // 8바이트 모두 hex 값으로 출력해 줍니다.

'Dev' 카테고리의 다른 글

구글 애드센스 신청하기  (0) 2015.06.23
linux LANG 설정  (0) 2012.01.03
Linux - find 명령어의 사용법  (2) 2009.04.28