Pin 3.2 버전이 올라왔군요... @_@ !!!
[ Pin - A Binary Instrumentation Tool 다운로드 페이지 ]
Pin 2.14 버전은 VS2015 를 지원하지 않고~
Pin 3.0 은 작년에 올라왔다가 어느 순간 윈도우 버전 다운로드 링크가 사라져서 난감했는데...
Pin 3.2 버전으로 다시 올라왔네요~ :)
Pin 3.x 로 넘어오면서 프로젝트 생성 시 손봐줘야 될 것들이 많아졌는데~
기록보관 차원에서 포스팅해봅니다.
시작하기 전에
준비물 : Visual Studio 2015 Community, Pin 3.2 (윈도우용)
Pin 3.2 는 다운로드 페이지에서 받은 후, 원하는 곳에 압축을 풀어두면 됩니다.
프로젝트 생성 및 Pin 설정
Win32 응용 프로그램 - DLL - 빈 프로젝트 |
PinTool 은 DLL 형태이기 때문에~ DLL 을 선택한 후 "빈 프로젝트" 로 프로젝트를 생성합니다.
프로젝트에 파일이 하나도 없으면 '프로젝트 속성' 페이지에 'C/C++' 항목이 안보이니...
편의상 비어있는 cpp 파일이라도 하나 만들어서 프로젝트에 추가해줍니다.
이제 '프로젝트 속성' 페이지를 열어서~ 하나하나 만져주면 됩니다.
구성속성 - 일반 |
다음은 'C/C++' - '일반' 페이지의 '추가 포함 디렉터리' 에 Pin 관련 Include 폴더들을 추가해줍니다.
C/C++ - 일반 - 추가 포함 디렉터리 |
이번 버전에 비해 포함시켜줘야 되는 폴더들이 많아졌습니다. oTL;;;;
압축을 풀어둔 폴더가 PIN_ROOT 라는 가정하에 아래의 폴더들을 추가하면 됩니다.
( 제 PC 의 경우 PIN_ROOT=E:\Work\Source\pin-3.2-81205-msvc-windows 가 되겠죠~ )
------------------------------------------------------------------------------------------------
%PIN_ROOT%\source\include\pin
%PIN_ROOT%\source\include\pin\gen
%PIN_ROOT%\extras
%PIN_ROOT%\extras\components\include
%PIN_ROOT%\extras\crt
%PIN_ROOT%\extras\crt\include
%PIN_ROOT%\extras\crt\include\arch-x86 (64비트용은 arch-x86_64)
%PIN_ROOT%\extras\crt\include\kernel\uapi
%PIN_ROOT%\extras\crt\include\kernel\uapi\asm-x86
%PIN_ROOT%\extras\libstdc++\include
%PIN_ROOT%\extras\stlport\include
%PIN_ROOT%\extras\xed-ia32\include\xed
( 64비트용은 %PIN_ROOT%\extras\xed-intel64\include\xed )
------------------------------------------------------------------------------------------------
일단 이 정도는 최소한으로 포함이 되어야 되는 걸로 보입니다.
없어도 되겠지 싶어서 폴더를 없애보면 컴파일 에러가... -_-;;;;;
C/C++ - 전처리기 |
------------------------------------------------------------------------------------------------
TARGET_IA32
(64비트용은 TARGET_IA32E)
HOST_IA32
(64비트용은 HOST_IA32E)
TARGET_WINDOWS
__PIN__=1
PIN_CRT=1
__i386__
(64비트용은 __LP64__ )
------------------------------------------------------------------------------------------------
다음은 'C/C++' - '코드 생성' 페이지~
C/C++ - 코드 생성 |
'런타임 라이브러리' 항목을 "다중 스레드(/MT)" 로~
'보안 검사' 항목을 "보안 검사 사용 안 함(/GS-)" 으로 지정해줍니다.
C/C++ - 언어 |
그리고 'C/C++' - '명령줄' 페이지의 '추가 옵션' 부분에~
"/FIinclude/msvc_compat.h" 를 입력해줍니다.
C/C++ - 명령줄 |
다음은 '링커' 항목입니다.
'링커' - '일반' 페이지의 '추가 라이브러리 디렉터리' 에 Pin 관련 라이브러리 폴더를 추가해줍니다.
링커 - 일반 - 추가 라이브러리 디렉터리 |
------------------------------------------------------------------------------------------------
[ 32비트 ]
%PIN_ROOT%\ia32\lib
%PIN_ROOT%\ia32\lib-ext
%PIN_ROOT%\ia32\runtime\pincrt
%PIN_ROOT%\extras\xed-ia32\lib
[ 64비트 ]
%PIN_ROOT%\intel64\lib
%PIN_ROOT%\intel64\lib-ext
%PIN_ROOT%\intel64\runtime\pincrt
%PIN_ROOT%\extras\xed-intel64\lib
------------------------------------------------------------------------------------------------
라이브러리 폴더를 추가한 다음~ 실제 사용할 라이브러리를 지정해야되는데요...
링커 - 입력 - 추가 종속성 |
'링커' - '입력' 페이지의 '추가 종속성' 항목에 아래의 라이브러리들을 추가해줍니다.
------------------------------------------------------------------------------------------------
pin.lib
pinvm.lib
xed.lib
kernel32.lib
ntdll-32.lib (64비트는 ntdll-64.lib)
c-static.lib
m-static.lib
os-apis.lib
stlport-static.lib
crtbeginS.obj
------------------------------------------------------------------------------------------------
라이브러리 추가 후엔 '모든 기본 라이브러리 무시' 항목을 "예(/NODEFAULTLIB)" 로 지정합니다.
링커 - 입력 |
'링커' - '고급' 페이지에도 만져줘야 될 항목들이 있습니다.
링커 - 고급 |
'진입점' 항목에 "Ptrace_DllMainCRTStartup%4012" 를~ (64비트는 "Ptrace_DllMainCRTStartup" 만)
'기준 주소' 항목에 "0x55000000" 을~ (64비트는 "0xC5000000") 입력하고
'이미지에 안전한 예외 처리기 포함' 항목을 "아니요(/SAFESEH:NO)" 로 지정합니다.
마지막으로 '링커' - '명령줄' 페이지의 '추가 옵션' 에 "/export:main" 을 입력~!!
링커 - 명령줄 |
꽤 번거롭긴(?) 하지만 일단 여기까지하면~
Pin 코드를 작성해서 테스트 해볼 수가 있습니다. @_@
빌드 성공 |
다음엔 게임 해킹툴 분석 시 도움이 될만한 PinTool 을 만들어보는 걸로~~ ㅋ :)
혹시 pin.H 에 에서 관련된 trait.h , char.h 에서 오류가뜨는데 왜이러시는지 아시나요?
답글삭제일단 include 폴더나 전처리기 설정 부분을 다시 확인해보시기 바랍니다.
삭제include 폴더 순서도 포스팅 내용과 동일하게 해보시길... ^^;;
어떤 오류 메시지가 뜨는지 모르는 상태에서는 확실한 답변을 드리기가 어렵네요..
작성자가 댓글을 삭제했습니다.
삭제답변감사합니다. 제가 몇번이고 정확히 똑같이 시도를 해봤는데 계속 이렇게 뜨는데 혹시 해결방법을 아시면 알려주시면 감사하겠습니다...
삭제https://3.bp.blogspot.com/-tOccZeRqjvg/WQXg0u3N15I/AAAAAAAAABY/xDEq-PBZDCctMnD5RTmPR0pmmtUEUWuhQCLcB/s320/%25EC%25BA%25A1%25EC%25B2%2598.PNG
에러가 뜨는 사진입니다.
http://wusec.blogspot.kr/2017/04/error.html
삭제사진이 깨져 잘안보이시면 이걸봐주세요!
에러를 봐선 프로젝트 설정이 뭔가 잘못된거 같은 느낌인데요...
삭제https://drive.google.com/open?id=0B3vk7mWod7ORQVZFZFdtemR4SG8
제가 작성한 프로젝트 파일입니다.
Visual Studio 2015 / Pin 3.2 기준이구요..
PIN 폴더가 "E:\Work\Source\pin-3.2-81205-msvc-windows" 로 되어있는데..
이 부분만 조금 맞춰주면 별 문제없을겁니다.
한번 비교해보는게 어떨까 싶네요..
감사합니다! 한번해보겟습니다
삭제저도 윗 분과 똑같은 현상이 있네요...ㅠㅠㅠ 어떻게 해야할까요?
답글삭제https://drive.google.com/open?id=0B3vk7mWod7ORQVZFZFdtemR4SG8
삭제참고하셔서 프로젝트 설정 부분이 다른게 없는지 비교해보시는게 어떨까요.. ^^;;
안녕하세요. 8월 21일에 올려주신 프로젝트 sin파일 열어서 포스트 내용처럼 환경설정후에 컴파일하였는데 https://www.dropbox.com/s/b4a2954uaidp2ud/%EC%BA%A1%EC%B2%981.PNG?dl=0
답글삭제같은 에러가 발생됩니다.
혹시 어떻게 해야하는지 알수있을까요?
Debug 로는 빌드가 안되었던걸로 기억합니다.
삭제Release 로 빌드해보세요~ :)