blabberer
April 3rd, 2014, 17:22
The xxx project - looking under the hoods of guids
In the olden golden times things were simple and humanely understandable
Todays machines don't like humans and their understandability
All they want is garbage to produce more garbage that requires more powerful machine with a higher processing power running multiple cores in parallel and utilizing multi petaabyte memory
In the olden times we wrote a simple void main (void ) { printf ("hello world \n"
; } and all we needed was a 9 MB package that came with almost everything an hobbyist would ever want to write programs with.
Yes bcc 5.5 command line tools with / includes / libs / resource compilers / make utility / all combined was just a measly 9 MB
One fine day it went bust and ended up �embarcing� kylie or was it kulfi
Let it rest in peace in the museum where it may live forever.
So now comes in express editions of visual studio multi mega byte goliaths that didn�t compile and link but built
as long as it was a simple hello world build built it and there was no fiddling required and we could live with a 11 MB directory for a simple hello world
Yes we have to cough up more space than what was required for complete tool-set
don�t believe me let me dir /s for you one simple hello world
A simple hello world.cpp compiled and linked to hello world.exe needs a 2 GB tool set and 61 intermediate files and obviously 500 GB hard disk get filled with litter in two months flat
hey bcc 5.5 you didn�t need anything more than a 4 GB hard disk and 128 MB ram machine that was running windows 98 for you to make a tiny little helloworld.exe you are sorely missed.
let�s find a way out of this madness lets break free even if it is painful to become a simple /one cpp /one make file /one compiler and /one linker project and no not using bcc but using visual studio
It can it did and it will but we have to coax an eighty million year old mosquito embedded in amber to become a Tyrannosaurus Rex
Lets open the mighty big hello world project and monitor it with process explorer to find clues to its operation
First clue we get is that once f7 or build is clicked in vcexpress we see msbuild.exe is spawned from vcexpress.exe which calls tracker.exe which calls cl.exe and linker.exe
lets check out msbuild whats it is ?
From process explorer command line we know msbuild is in c:\windows\......\\
though if you have several .net framework installed each .net version comes with its own msbuild.exe
ok it seems this is a command line tool
so it looks for a file with proj extension
lets check out hello world
so there is only one file a .vcxproj
so as a reverser the first instinct is to cut off all the shit and try only this file
\> so it is looking for stdafx.cpp providing stdafx.cpp it looks for source.cpp then stdafx.h then targetvar.h lets copy all these 4 files
:
so it worked it seems we don�t want all the file except one vcxproj file to compile link and build we are back to one cpp one make file
but we see only Debug Folder how to do a Release
so Debug and Release is possible from one proj file
if we need to clean the directory
:\>ls -l
total 24
drw-rw-rw- 2 Admin 0 0 2014-04-03 00:51 Debug
drw-rw-rw- 2 Admin 0 0 2014-04-03 00:58 Release
-rw-rw-rw- 1 Admin 0 328 2014-03-31 00:46 stdafx.cpp
-rw-rw-rw- 1 Admin 0 320 2014-03-31 00:46 stdafx.h
-rw-rw-rw- 1 Admin 0 314 2014-03-31 00:46 targetver.h
-rw-rw-rw- 1 Admin 0 273 2014-03-31 02:48 weight_of_hello_from_express_to_the_
world.cpp
-rw-rw-rw- 1 Admin 0 4434 2014-03-31 00:46 weight_of_hello_from_express_to_the_
world.vcxproj
now that we have cut away the masks let�s check what�s inside of this project file so that if need arises we can tweak and fiddle with it.
Opening this is WordPad we find it is written in some kind of markup language called xml
Some Google reveals xml is kind of html that enforces certain rules that html winks and let goes
Working with this file in notepad / WordPad is clumsy who want to write < > </>
Further Google yields an editor from ms xml notepad 2007
downloading xml notepad 2007 and opening this vcxproject in xml notepad 2007
We get a nice tree view in the left and text view in the right and handy controls to edit the file with undo redo / font and all other fancy beagles and buttons.
It is time to start exploring the project file (that is delete everything inside it and start with single line and stop when it seems it works.
googling for some references we see a lot of hits that explains bits and pieces of the property whatever
gist seems to be that this file contains an ordered and sequential format of several properties
All of the properties have permanent default values defined in XXXXXXXXXXXXX.props (defaults)
These defaults are based on which configuration you choose viz Debug / Release which platform you choose (on my machine it defaults to WIN32 only at the moment)
But Win64 seems to be possible from Google
there can be global defaults too that are applicable to both the Build Configuration (Debug / Release) (Win32 / Win64)
for the advanced type custom property sheets can be used for overriding default build
The defaults are dictated with import and import group properties
The most basic import is
The main job of this import is to define all the path details into the project
like Default Output Directory / Default Directory from where the Tools for Compiling and linking are to be used / and other paths like SDK include Paths etc
The next import is
This import defines all the switches that go to cl.exe and link .exe
The last import is a targets import that defines what to do when target is Debug / Release /Clean etc
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" />
When you have only these three imports in the project file you have the most basic project with all defaults
lets try it out shall we ?
so according to specs this mandatory line is required in each file to denote this is an xml file so the first line would be
now you start the top level markup viz project and according to specs both open and close markups are required as xml does not wink at no closing markups
So that would be
the project needs certain defaults
like default targets (i.e. what to do when invoked without any arguments )
default tool set (use msbuild 4 or 2 or 1 ??) and an xml namespace ( this namespace is mandatory else msbuild wouldn�t know which xml namespace is used and will err like posted below)
the default target is build / can be clean too if you so wish
using toolset 4.0 (microsoft .net 4.0)
and xml namespace (2003 msbuild format)
so our fiddled vcxproject file now becomes
next comes the itemgroup
so the project file now becomes
inside itemgroup we now add the actual configuration like Debug /Release etc notice my special configuarion is Bullshit
we can have a DamnYou6162 Platform too but since i don�t have a machine with DamnYou6162 platform i use win32
for the adventurous ones here is what msbuld will say if you use a platform that doesn�t exist
now like i wrote earlier i am going to import all the defaults and use only the default
and iam going to buld these files
so my entire vcxproject file now looks like this
will it build ?? let�s try
it built and became its parent too by giving its name to the built exe
and did you notice the name of directory ?
it is not Debug / Release but Bullshit
so we broke the mystery of the xxx files
you may be thinking why put so much effort into useless crap
hit f7 in visual studio and be happy
that is because I wanted to use visual studio to make ollydbg plugin and ollydbg 2.01 version plugin didn�t come with a visual studio project and it seems oleh was frustrated with the guids and other garbage kind of things that seem to mask the project creation in visual studio and didn�t provide one
so i thought let me look under the hood of the guids
and thus was born the movie xxx project - looking under the hoods of guids
based on the above research i put together a simple bat file that invokes msbuild under the hoods to build an
ollydbg plugin for odbg
copy paste to a folder
source files
header files
ollydbg.lib
this vcxproject file
buildbat file
and run the bat file with an argument
C:\Documents and Settings\Admin\Desktop\testbld>dir /b
build_ollydbg_201_plugin_template.bat
ollydbg.lib
ollydbg_201_plugin_template.cpp
ollydbg_201_plugin_template.vcxproj
plugin.h
happy spleunking (do i sound like some copy cat ?? well whatever )
and you can use this same vcxproject file in visual studio
open -> file -> new -> project file -> and happily F7 to build a plugin too J
the finished vcxproject is
the bat file contains
and all else required is a bit of tweaking for file names in the projects and your source filestestvcxproj.rar (69.4 KB)
In the olden golden times things were simple and humanely understandable
Todays machines don't like humans and their understandability
All they want is garbage to produce more garbage that requires more powerful machine with a higher processing power running multiple cores in parallel and utilizing multi petaabyte memory
In the olden times we wrote a simple void main (void ) { printf ("hello world \n"

Yes bcc 5.5 command line tools with / includes / libs / resource compilers / make utility / all combined was just a measly 9 MB
One fine day it went bust and ended up �embarcing� kylie or was it kulfi
Let it rest in peace in the museum where it may live forever.
So now comes in express editions of visual studio multi mega byte goliaths that didn�t compile and link but built
as long as it was a simple hello world build built it and there was no fiddling required and we could live with a 11 MB directory for a simple hello world
Yes we have to cough up more space than what was required for complete tool-set
don�t believe me let me dir /s for you one simple hello world
Code:
:\>cd
C:\Documents and Settings\Admin\My Documents\Visual Studio 2010\Projectsweight_of_hello_from_express_to_the_world
:\>set blah
blah="f:\SysinternalsSuite\du.exe"
:\>%blah% -q .
Files: 61
Directories: 4
Size: 11,051,453 bytes
Size on disk: 11,051,453 bytes
:\>
A simple hello world.cpp compiled and linked to hello world.exe needs a 2 GB tool set and 61 intermediate files and obviously 500 GB hard disk get filled with litter in two months flat
hey bcc 5.5 you didn�t need anything more than a 4 GB hard disk and 128 MB ram machine that was running windows 98 for you to make a tiny little helloworld.exe you are sorely missed.
Quote:
Quote:
Guru Goldblum |
let�s find a way out of this madness lets break free even if it is painful to become a simple /one cpp /one make file /one compiler and /one linker project and no not using bcc but using visual studio
It can it did and it will but we have to coax an eighty million year old mosquito embedded in amber to become a Tyrannosaurus Rex
Lets open the mighty big hello world project and monitor it with process explorer to find clues to its operation
First clue we get is that once f7 or build is clicked in vcexpress we see msbuild.exe is spawned from vcexpress.exe which calls tracker.exe which calls cl.exe and linker.exe
Code:
Command line: C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe /nologo /nodemode:1 /nr
Code:
Command line: "C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools\Tracker.exe" @"C:\Documents and Settings\Admin\Local Settings\Temp\2855c911ce6c4f5a83da3ea06bb3f4e9.tmp" /c "C:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.exe" @"C:\Documents and Settings\Admin\Local Settings\Temp\aee14f5ff66544339403c2d0532a6b68.rsp"
Code:
Command line: "C:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.exe" "@C:\Documents and Settings\Admin\Local Settings\Temp\aee14f5ff66544339403c2d0532a6b68.rsp"
Code:
Command line: mspdbsrv.exe -start -spawn
Code:
Command line: "C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools\Tracker.exe" /a @"C:\Documents and Settings\Admin\Local Settings\Temp\0dca85d2d11f41dd86f25cdc7fd79dde.tmp" /c "C:\Program Files\Microsoft Visual Studio 10.0\VC\bin\link.exe" /ERRORREPORT:PROMPT @"C:\Documents and Settings\Admin\Local Settings\Temp\dd9954c18a824badb990e11888b528da.rsp"
lets check out msbuild whats it is ?
From process explorer command line we know msbuild is in c:\windows\......\\
though if you have several .net framework installed each .net version comes with its own msbuild.exe
Code:
C:\Program Files\Microsoft Visual Studio 10.0>ndff msbuild.exe
Total filerecords to scan: 315232
\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe
\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe
\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe
Scanned 310259 filerecord(s) in 25.735 s.
Found 3 file(s), 0 directory(ies), 0 alternate path(s).
ok it seems this is a command line tool
Code:
C:\Program Files\Microsoft Visual Studio 10.0>msbuild /?
Microsoft (R) Build Engine Version 4.0.30319.1
[Microsoft .NET Framework, Version 4.0.30319.1]
Copyright (C) Microsoft Corporation 2007. All rights reserved.
Syntax: MSBuild.exe [options] [project file]
Description: Builds the specified targets in the project file. If
a project file is not specified, MSBuild searches the
current working directory for a file that has a file
extension that ends in "proj" and uses that file.
so it looks for a file with proj extension
lets check out hello world
Code:
:\>dir /s /b *.*proj
C:\Documents and Settings\Admin\My Documents\Visual Studio 2010\Projects\weight_of_hello_from_express_to_the_world\weight_of_hello_from_express_to_the_world.vc xproj
:\>
so there is only one file a .vcxproj
so as a reverser the first instinct is to cut off all the shit and try only this file

Code:
:\>cd C:\Documents and Settings\Admin\Desktop\testvcxproj
:\>copy "..\..\My Documents\Visual Studio 2010\Projects\ weight_of_hello_from_express_to_the_world\weight_of_hello_from_express_to_the_world.vcxproj".
1 file(s) copied.
:\>msbuild
c1xx : fatal error C1083: Cannot open source file: 'stdafx.cpp':
Build FAILED.
1 Error(s)
Time Elapsed 00:00:00.70
\> so it is looking for stdafx.cpp providing stdafx.cpp it looks for source.cpp then stdafx.h then targetvar.h lets copy all these 4 files
:
Code:
\>copy "..\..\My Documents\Visual Studio 2010\Projects\weight_of_hello_from_express_to_the_world\stdafx.cpp" .
1 file(s) copied. and so on
:\>dir /s /b
C:\Documents and Settings\Admin\Desktop\testvcxproj\stdafx.cpp
C:\Documents and Settings\Admin\Desktop\testvcxproj\stdafx.h
C:\Documents and Settings\Admin\Desktop\testvcxproj\targetver.h
C:\Documents and Settings\Admin\Desktop\testvcxproj\weight_of_hello_from_express_to_the_world.cpp
C:\Documents and Settings\Admin\Desktop\testvcxproj\weight_of_hello_from_express_to_the_world.vcxproj
:\>msbuild
Build started 03/04/2014 00:51:57.
Build succeeded.
0 Warning(s)
0 Error(s)
Time Elapsed 00:00:01.70
:\>Debug\weight_of_hello_from_express_to_the_world.exe
h y ello world
ya mma
:\>
so it worked it seems we don�t want all the file except one vcxproj file to compile link and build we are back to one cpp one make file
but we see only Debug Folder how to do a Release
Code:
:\>msbuild /p:Configuration=Release
Code:
:\>Release\weight_of_hello_from_express_to_the_world.exe
h y ello world
ya mma
so Debug and Release is possible from one proj file
if we need to clean the directory
Code:
/t:Clean /p:Configuration=<config>
:\>ls -l
total 24
drw-rw-rw- 2 Admin 0 0 2014-04-03 00:51 Debug
drw-rw-rw- 2 Admin 0 0 2014-04-03 00:58 Release
-rw-rw-rw- 1 Admin 0 328 2014-03-31 00:46 stdafx.cpp
-rw-rw-rw- 1 Admin 0 320 2014-03-31 00:46 stdafx.h
-rw-rw-rw- 1 Admin 0 314 2014-03-31 00:46 targetver.h
-rw-rw-rw- 1 Admin 0 273 2014-03-31 02:48 weight_of_hello_from_express_to_the_
world.cpp
-rw-rw-rw- 1 Admin 0 4434 2014-03-31 00:46 weight_of_hello_from_express_to_the_
world.vcxproj
now that we have cut away the masks let�s check what�s inside of this project file so that if need arises we can tweak and fiddle with it.
Opening this is WordPad we find it is written in some kind of markup language called xml
Some Google reveals xml is kind of html that enforces certain rules that html winks and let goes
Working with this file in notepad / WordPad is clumsy who want to write < > </>
Further Google yields an editor from ms xml notepad 2007
downloading xml notepad 2007 and opening this vcxproject in xml notepad 2007
We get a nice tree view in the left and text view in the right and handy controls to edit the file with undo redo / font and all other fancy beagles and buttons.
It is time to start exploring the project file (that is delete everything inside it and start with single line and stop when it seems it works.
googling for some references we see a lot of hits that explains bits and pieces of the property whatever
gist seems to be that this file contains an ordered and sequential format of several properties
All of the properties have permanent default values defined in XXXXXXXXXXXXX.props (defaults)
These defaults are based on which configuration you choose viz Debug / Release which platform you choose (on my machine it defaults to WIN32 only at the moment)
But Win64 seems to be possible from Google
there can be global defaults too that are applicable to both the Build Configuration (Debug / Release) (Win32 / Win64)
for the advanced type custom property sheets can be used for overriding default build
The defaults are dictated with import and import group properties
The most basic import is
Code:
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" />
The main job of this import is to define all the path details into the project
like Default Output Directory / Default Directory from where the Tools for Compiling and linking are to be used / and other paths like SDK include Paths etc
The next import is
Code:
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" />
This import defines all the switches that go to cl.exe and link .exe
The last import is a targets import that defines what to do when target is Debug / Release /Clean etc
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" />
When you have only these three imports in the project file you have the most basic project with all defaults
lets try it out shall we ?
so according to specs this mandatory line is required in each file to denote this is an xml file so the first line would be
Code:
<?xml version="1.0" encoding="utf-8"?>
now you start the top level markup viz project and according to specs both open and close markups are required as xml does not wink at no closing markups
So that would be
Code:
<project>
</project>
the project needs certain defaults
like default targets (i.e. what to do when invoked without any arguments )
default tool set (use msbuild 4 or 2 or 1 ??) and an xml namespace ( this namespace is mandatory else msbuild wouldn�t know which xml namespace is used and will err like posted below)
Code:
"C:\Documents and Settings\Admin\Desktop\testvcxproj\fidlled.vcxproj" (default
target) (1) ->
C:\Documents and Settings\Admin\Desktop\testvcxproj\fidlled.vcxproj(2,1): err
or MSB4041: The default XML namespace of the project must be the MSBuild XML na
mespace. If the project is authored in the MSBuild 2003 format, please add xmln
s="http://schemas.microsoft.com/developer/msbuild/2003" to the <Project> elemen
t. If the project has been authored in the old 1.0 or 1.2 format, please conver
t it to MSBuild 2003 format.
0 Warning(s)
1 Error(s)notice the line number / char number line 2 . char 1
the default target is build / can be clean too if you so wish

using toolset 4.0 (microsoft .net 4.0)
and xml namespace (2003 msbuild format)
so our fiddled vcxproject file now becomes
Code:
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
</Project>
next comes the itemgroup
Code:
<ItemGroup Label="ProjectConfigurations">
</ItemGroup>
so the project file now becomes
Code:
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
</ItemGroup>
</Project>
inside itemgroup we now add the actual configuration like Debug /Release etc notice my special configuarion is Bullshit

Code:
<ProjectConfiguration Include="Bullshit|Win32">
<Configuration>Bullshit</Configuration>
<Platform>DamnYou6162</Platform>
</ProjectConfiguration>
we can have a DamnYou6162 Platform too but since i don�t have a machine with DamnYou6162 platform i use win32
for the adventurous ones here is what msbuld will say if you use a platform that doesn�t exist
Code:
:\>msbuild /p:Configuration=Bullshit;Platform=Damnyou6162
Build FAILED.
"C:\Documents and Settings\Admin\Desktop\testvcxproj\fidlled.vcxproj" (defaulttarget) (1) ->
(InvalidPlatformError target) ->
C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.Cpp.InvalidPlatform.Tar
gets(23,7): error MSB8007: The Platform for project 'fidlled.vcxproj' is invali
d. Platform='Damnyou6162'. You may be seeing this message because you are tryi
ng to build a project without a solution file, and have specified a non-default
Platform that doesn't exist for this project. [C:\Documents and Settings\Admin\Desktop\testvcxproj\fidlled.vcxproj]
0 Warning(s)
1 Error(s)
Time Elapsed 00:00:00.06
now like i wrote earlier i am going to import all the defaults and use only the default
Code:
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props"></Import>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
and iam going to buld these files
Code:
<ItemGroup>
<ClInclude Include="stdafx.h" />
<ClInclude Include="targetver.h"></ClInclude>
<ClCompile Include="stdafx.cpp"></ClCompile>
<ClCompile Include="weight_of_hello_from_express_to_the_world.cpp" />
</ItemGroup>
so my entire vcxproject file now looks like this
Code:
:\>type fidlled.vcxproj
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microso
ft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Bullshit|Win32">
<Configuration>Bullshit</Configuration>
<Platform>DamnYou6162</Platform>
</ProjectConfiguration>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props"></Import>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ItemGroup>
<ClInclude Include="stdafx.h" />
<ClInclude Include="targetver.h"></ClInclude>
<ClCompile Include="stdafx.cpp"></ClCompile>
<ClCompile Include="weight_of_hello_from_express_to_the_world.cpp" />
</ItemGroup>
</Project>
will it build ?? let�s try
Code:
:\>dir/s /b & msbuild /p:Configuration=Bullshit & dir /s /b
Code:
C:\Documents and Settings\Admin\Desktop\testvcxproj\fidlled.vcxproj
C:\Documents and Settings\Admin\Desktop\testvcxproj\stdafx.cpp
C:\Documents and Settings\Admin\Desktop\testvcxproj\stdafx.h
C:\Documents and Settings\Admin\Desktop\testvcxproj\targetver.h
C:\Documents and Settings\Admin\Desktop\testvcxproj\weight_of_hello_from_express_to_the_world.cpp
Microsoft (R) Build Engine Version 4.0.30319.1
[Microsoft .NET Framework, Version 4.0.30319.1]
Copyright (C) Microsoft Corporation 2007. All rights reserved.
Build started 03/04/2014 02:32:22.
Project "C:\Documents and Settings\Admin\Desktop\testvcxproj\fidlled.vcxproj" o
n node 1 (default targets).
PrepareForBuild:
Creating directory "Bullshit\".
InitializeBuildStatus:
Creating "Bullshit\fidlled.unsuccessfulbuild" because "AlwaysCreate" was spec
ified.
ClCompile:
C:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.exe /c /Zi /nologo /W
1 /WX- /O2 /Oy- /Gm- /EHsc /MD /GS /fprecise /Zc:wchar_t /Zc:forScope /Fo"B
ullshit\\" /Fd"Bullshit\vc100.pdb" /Gd /TP /analyze- /errorReport:queue stdaf
x.cpp weight_of_hello_from_express_to_the_world.cpp
stdafx.cpp
weight_of_hello_from_express_to_the_world.cpp
Generating Code...
Link:
C:\Program Files\Microsoft Visual Studio 10.0\VC\bin\link.exe /ERRORREPORT:QU
EUE /OUT:"Bullshit\fidlled.exe" /NOLOGO kernel32.lib user32.lib gdi32.lib win
spool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.l
ib odbc32.lib odbccp32.lib /MANIFEST /ManifestFile:"Bullshit\fidlled.exe.inte
rmediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /PDB:"C:
\Documents and Settings\Admin\Desktop\testvcxproj\Bullshit\fidlled.pdb" /TLBI
D:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:"Bullshit\fidlled.lib" /MACHINE:X86 Bullsh
it\stdafx.obj
Bullshit\weight_of_hello_from_express_to_the_world.obj
fidlled.vcxproj -> C:\Documents and Settings\Admin\Desktop\testvcxproj\Bullsh
it\fidlled.exe
Manifest:
C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\mt.exe /nologo /verbose /ou
tputresource:"Bullshit\fidlled.exe;#1" /manifest Bullshit\fidlled.exe.interme
diate.manifest
FinalizeBuildStatus:
Deleting file "Bullshit\fidlled.unsuccessfulbuild".
Touching "Bullshit\fidlled.lastbuildstate".
Done Building Project "C:\Documents and Settings\Admin\Desktop\testvcxproj\fidl
led.vcxproj" (default targets).
Build succeeded.
0 Warning(s)
0 Error(s)
Time Elapsed 00:00:00.65
C:\Documents and Settings\Admin\Desktop\testvcxproj\Bullshit
C:\Documents and Settings\Admin\Desktop\testvcxproj\fidlled.vcxproj
C:\Documents and Settings\Admin\Desktop\testvcxproj\stdafx.cpp
C:\Documents and Settings\Admin\Desktop\testvcxproj\stdafx.h
C:\Documents and Settings\Admin\Desktop\testvcxproj\targetver.h
C:\Documents and Settings\Admin\Desktop\testvcxproj\weight_of_hello_from_express_to_the_world.cpp
C:\Documents and Settings\Admin\Desktop\testvcxproj\Bullshit\cl.command.1.tlog
C:\Documents and Settings\Admin\Desktop\testvcxproj\Bullshit\CL.read.1.tlog
C:\Documents and Settings\Admin\Desktop\testvcxproj\Bullshit\CL.write.1.tlog
C:\Documents and Settings\Admin\Desktop\testvcxproj\Bullshit\fidlled.exe
C:\Documents and Settings\Admin\Desktop\testvcxproj\Bullshit\fidlled.exe.intermediate.manifest
C:\Documents and Settings\Admin\Desktop\testvcxproj\Bullshit\fidlled.lastbuildstate
C:\Documents and Settings\Admin\Desktop\testvcxproj\Bullshit\link.command.1.tlog
C:\Documents and Settings\Admin\Desktop\testvcxproj\Bullshit\link.read.1.tlog
C:\Documents and Settings\Admin\Desktop\testvcxproj\Bullshit\link.write.1.tlog
C:\Documents and Settings\Admin\Desktop\testvcxproj\Bullshit\mt.command.1.tlog
C:\Documents and Settings\Admin\Desktop\testvcxproj\Bullshit\mt.read.1.tlog
C:\Documents and Settings\Admin\Desktop\testvcxproj\Bullshit\mt.write.1.tlog
C:\Documents and Settings\Admin\Desktop\testvcxproj\Bullshit\stdafx.obj
C:\Documents and Settings\Admin\Desktop\testvcxproj\Bullshit\vc100.pdb
C:\Documents and Settings\Admin\Desktop\testvcxproj\Bullshit\weight_of_hello_from_express_to_the_world.obj
:\>Bullshit\fidlled.exe
h y ello world
ya mma
:\>
it built and became its parent too by giving its name to the built exe

it is not Debug / Release but Bullshit
so we broke the mystery of the xxx files
you may be thinking why put so much effort into useless crap
hit f7 in visual studio and be happy
that is because I wanted to use visual studio to make ollydbg plugin and ollydbg 2.01 version plugin didn�t come with a visual studio project and it seems oleh was frustrated with the guids and other garbage kind of things that seem to mask the project creation in visual studio and didn�t provide one
so i thought let me look under the hood of the guids
and thus was born the movie xxx project - looking under the hoods of guids
based on the above research i put together a simple bat file that invokes msbuild under the hoods to build an
ollydbg plugin for odbg
copy paste to a folder
source files
header files
ollydbg.lib
this vcxproject file
buildbat file
and run the bat file with an argument
C:\Documents and Settings\Admin\Desktop\testbld>dir /b
build_ollydbg_201_plugin_template.bat
ollydbg.lib
ollydbg_201_plugin_template.cpp
ollydbg_201_plugin_template.vcxproj
plugin.h
Code:
C:\Documents and Settings\Admin\Desktop\testbld>build_ollydbg_201_plugin_template.bat
Code:
Setting environment for using Microsoft Visual Studio 2010 x86 tools.
provide any one of the following arguments
"bldall" to build both DebugMode and Release Mode Binaries
"clnall" to clean both Debug ann Release Directory
"bldrls" to build Release mode
"clnrls" to clean Release Directory
"blddbg" to build Debug mode
"clndbg" to clean Debug Directory
Code:
C:\Documents and Settings\Admin\Desktop\testbld>build_ollydbg_201_plugin_template.bat bldall
Code:
Setting environment for using Microsoft Visual Studio 2010 x86 tools.
building both Debug and Release
C:\Documents and Settings\Admin\Desktop\testbld>dir /b
build_ollydbg_201_plugin_template.bat
Debug
ollydbg.lib
ollydbg_201_plugin_template.cpp
ollydbg_201_plugin_template.vcxproj
plugin.h
Release
C:\Documents and Settings\Admin\Desktop\testbld>dir Release\*.dll
Directory of C:\Documents and Settings\Admin\Desktop\testbld\Release
03/04/2014 04:38 7,168 ollydbg_201_plugin_template.dll
1 File(s) 7,168 bytes
0 Dir(s) 942,186,496 bytes free
C:\Documents and Settings\Admin\Desktop\testbld>dir Debug\*.dll
Directory of C:\Documents and Settings\Admin\Desktop\testbld\Debug
03/04/2014 04:38 15,360 ollydbg_201_plugin_template.dll
1 File(s) 15,360 bytes
0 Dir(s) 942,186,496 bytes free
C:\Documents and Settings\Admin\Desktop\testbld>
happy spleunking (do i sound like some copy cat ?? well whatever )
and you can use this same vcxproject file in visual studio
open -> file -> new -> project file -> and happily F7 to build a plugin too J
the finished vcxproject is
Code:
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<Keyword>Win32Proj</Keyword>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings"></ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PreprocessorDefinitions>WIN32;UNICODE;_CHAR_UNSIGNED;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<WarningLevel>Level4</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<Optimization>Disabled</Optimization>
</ClCompile>
<Link>
<TargetMachine>MachineX86</TargetMachine>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<AdditionalDependencies>ollydbg.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<PreprocessorDefinitions>WIN32;UNICODE;_CHAR_UNSIGNED;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<WarningLevel>Level4</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<TargetMachine>MachineX86</TargetMachine>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>ollydbg.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="ollydbg_201_plugin_template.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="plugin.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets"></ImportGroup>
</Project>
the bat file contains
Code:
@echo OFF
pushd ..
@Call "C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86
popd
if "%1" == "" goto getlost
if "%1" == "bldall" goto bldall
if "%1" == "clnall" goto clnall
if "%1" == "bldrls" goto bldrls
if "%1" == "blddbg" goto blddbg
if "%1" == "clndbg" goto clndbg
if "%1" == "clnrls" ( goto clnrls ) else ( goto getlost )
:bldrls
echo bulding in release mode
msbuild /nologo /v:quiet /p:Configuration=Release
goto :EOF
:blddbg
echo bulding in Debug mode
msbuild /nologo /v:quiet /p:Configuration=Debug
goto :EOF
:clnrls
echo Cleaning Release Directory
msbuild /nologo /v:quiet /p:Configuration=Release /t:Clean
goto :EOF
:clndbg
echo Cleaning Debug Directory
msbuild /nologo /v:quiet /p:Configuration=Debug /t:Clean
goto :EOF
:bldall
echo building both Debug and Release
msbuild /nologo /v:quiet /p:Configuration=Debug
msbuild /nologo /v:quiet /p:Configuration=Release
goto :EOF
:clnall
echo cleaning both Debug and Release Directories
msbuild /nologo /v:quiet /p:Configuration=Debug /t:Clean
msbuild /nologo /v:quiet /p:Configuration=Release /t:Clean
goto :EOF
:getlost
echo.
echo provide any one of the following arguments
echo.
echo "bldall" to build both DebugMode and Release Mode Binaries
echo "clnall" to clean both Debug ann Release Directory
echo "bldrls" to build Release mode
echo "clnrls" to clean Release Directory
echo "blddbg" to build Debug mode
echo "clndbg" to clean Debug Directory
and all else required is a bit of tweaking for file names in the projects and your source filestestvcxproj.rar (69.4 KB)