Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- Trup
- AVAR 2010
- worm.win32.net-koobface
- mbr
- Protector
- Trup 부트 바이러스
- 갤럭시s 음악끊김
- 하우리
- 태백산 천제단
- 갤스 음악끊김
- net-koobface
- linux LANG
- facebook 쪽지 악성코드
- 시스템파괴
- linux 한글 깨짐
- OllyFlow
- AVAR
- Wingraph32
- printf 64비트
- 77 ddos
- DDoS
- ida
- 7.7 ddos
- Weather & Toggle Widgets
- 64비트 변수 출력
- 난독화
- 갤스
- MBR 부트 바이러스
- 사이버테러
- OllyGraph
Archives
- Today
- Total
Mylabs
64비트 변수 출력하기 (64비트 포멧스트링) 본문
전 분석용으로 현재 32비트 OS 를 사용하고 있습니다.
물론 Asm 도 32비트 어셈블리어를 봅니다.
얼마전부터 파일바이러스를 하나 분석하고 있는데, 복잡하고 Recursive 한 알고르즘을 사용하더군요.
그래서 얍삽하게(?) 인라인 어셈으로 함수단위를 코딩하려고 했는데,
이번엔 여느때와 달리 C++ 로 작업을 진행중에 있습니다.
그런데, ADD와 ADC 연산을 위해 CarryFlag를 취하고 싶어서 머리를 마구 굴려서,
1) DWORDLONG 형으로 레지스터 변수 8바이트 주고
2) 마스킹이랑 비트 쉬프트 이용해서, CF 랑 하위 8바이트를 얻어오게 만들었습니다.
근데 ADD나 ADC 연산후에 상위 바이트들과 관계없이 하위 8바이트가 모두 0이 되면,
32비트에서 쓰던 포멧스트링으로 출력하면 값이 0으로 나오더군요.
그 변수값을 정확히 출력해서 보고싶은데 거기에 맞는 64비트 포멧스트링이 무엇인지를 몰랐습니다. ㅠ
찾아보니 이런 방법이 있었네요.
%I64[formatString] ; 표현이 맞나 모르겠네요^^
물론 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 |