Compling PinTools with Microsoft Visual Studio (MSVC9)

Posted On // 2 comments
After hearing some good reviews about Pin DBI framework I have decided to give it a chance. I have downloaded the version for MSVC9 and tried to compile a sample project with MSVC9. That was the point where my problems started. Actually there is very minimal amount of information at the Pin website regarding using it with Microsoft Visual Studio (and the sample project file is pretty useless). Of course I have built the sample tools with "nmake" command successfully but I wanted to do the same straight from my MSVC. So I have spent line an hour (or two) fighting with massive numbers of compiler, linker (unresolved externals) errors until the build was done correctly. Surprisingly after running Pin with my PinTool it returned another error: "Pin 2.9 kit 39586E: Failed to load tool DLL. System error: Unknown error.". Well at this point I'm still not really sure what was wrong but after doing a lot of trial and error tests I have managed to create a MSVC configuration that actually works (at least for me). So here it is maybe someone will find it helpful. (Please note it may contain some redundant switches but it should be good enough for a start point.) For release configuration simply remove the "\DEBUG" switches.


So here are the steps:
"E:\pin" is the pin base directory.

Include directories:
E:\pin\extras\components\include\
E:\pin\extras\xed2-ia32\include
E:\pin\source\include\gen
E:\pin\source\include


Library directories:
E:\pin\ia32\lib-ext
E:\pin\extras\xed2-ia32\lib
E:\pin\ia32\lib


Preprocessor Definitions
:
TARGET_IA32;HOST_IA32;TARGET_WINDOWS;USING_XED


Compiler options:
/MT /EHs- /EHa- /wd4530 /DTARGET_WINDOWS /DBIGARRAY_MULTIPLIER=1
/DUSING_XED /D_CRT_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /nologo /DTARGET_IA32 /DHOST_IA32


Linker options:
/DLL /EXPORT:main /NODEFAULTLIB /NOLOGO /ENTRY:[email protected] ntdll-32.lib libxed.lib pin.lib pinvm.lib libcmt.lib libcpmt.lib /DEBUG



Who knows maybe this will work for you :)

2 komentarze:

StudentTempAcc said...

using this my program builds correctly with these warnings:

1>cl : Command line warning D9025 : overriding '/MDd' with '/MT'
1>cl : Command line warning D9025 : overriding '/EHs' with '/EHs-'

but when i try and run it, it tells me its unable to start the program and its not a win32 application

did you run in to similar issues?

Shaddy said...

After hours of fighting with pin. Here is the final solution, thanks Piotr.