Nitraqu의 블로그

nitraqu.egloos.com

포토로그



x64dbg, Logging 기능 사용 C/C++

x64dbg의 디버깅 기능 사용 예제.

1. 매우 간단한 예제로, Loop를 돌면서 그 값을 출력하는 예제이다.

#include "stdafx.h"

int this_is_simple_loop_func(int input)
{	
	int myInput = input;	
	myInput *= 2;	
	return myInput;
}

int _tmain(int argc, _TCHAR* argv[]){	int myInt = 1;	

for (int i = 0; i < 10; i++)	
{		
	myInt = this_is_simple_loop_func(myInt);		
	printf("%d", myInt);	
}	
return 0;}




2. x64dbg에서 disassemble 된 값은 다음과 같다. 
   따로 빌드 옵션을 설정하지 않았기 때문에... 코드가 약간 지저분 하지만, 
   '01371467' 의 printf가, 'eax' 값을 출력하는 것을 , 
   '01371447' 의 cmp가 for 문의 종료 조건 (i==10 (0xA)) 을 체크하는 것을 알 수 있다. 
   여기서 우리는 '01371461'에서 eax 값을 log로 찍어 보도록 하겠다. 
   (비록 printf의 출력으로 그냥 보이는 값이지만.. 예제니까) 



3. '01371461'에 breakpoint 를 걸고 편집하자. 
   실제로 디버깅 과정에서 멈추지는 않을 것이므로, 중단조건은 0 (False) 
   로깅은 언제나 할 것이니까 로그 조건은 1 (True)
   eax 값을 기록하고 싶으니까, {eax} 값을 출력하도록 하였다. 
 


4. 이후 실행하면.. 
  다음과 같이 로그 내용이 Log 창에 출력되어 있는 것을 볼 수 있다. 

헬로우 월드 이후의 
구체적인 것은 x64dbg의 매뉴얼을 참조... 

http://x64dbg.readthedocs.io/en/latest/introduction/Formatting.html

덧글

  • 니트라큐 2018/08/14 19:57 # 답글

    주소가 가리키는 값을 보고 싶다면, [ ] 를 이용하여 가리킨다.
    해당 주소의 문자열을 보고 싶다면...
    {s:[esp+0x0C]}

  • 니트라큐 2018/08/14 20:36 # 답글

    {mem;size@address}
    // print input is {mem;0x10@[esp+0x0C]}
    와 같이 로그 문자열을 입력하면

    printf input is 6D656D6F727920616464726573732030
    와 같은 로그 출력을 볼 수 있다.
댓글 입력 영역