ZayJay
ZayJay

Reputation: 199

What are the differences in the disassembly of two .NET executables built from the same source code?

Set up:

Question:
I have spent some time creating an application to get the CRC of a .NET executable and have succeeded in ignoring all differing build-time data.

I am removing all data above the // =============== CLASS MEMBERS DECLARATION =================== line in ildasm.exe output. This ignores the MVID. I am building the .exe without debug information. And lastly, I parse the output for <PrivateImplementationDetails>{GUID} and ignore those.

I then CRC the remaining text file.

The CRCs are the same when the same project is built on the same computer, but differ when the same project is built on a different computer with identical source code and MSVS 2010 settings.

Does anyone know of any machine-dependent information stored in the assembly of a .NET executable?

Below is an example of the differences. It appears that different IDs are being assigned each object and class, but I find it odd that this would only differ when they code is build on different machines...

         `class DSC_PI.MainWindow/'<>c__DisplayClass21' V_2,`
         `class DSC_PI.MainWindow/'<>c__DisplayClass10' V_2,`  

         `class DSC_PI.MainWindow/'<>c__DisplayClass1e' V_3,`
         `class DSC_PI.MainWindow/'<>c__DisplayClassd' V_3,`  

Any insight would be much much appreciated.

Upvotes: 13

Views: 443

Answers (1)

matthias.lukaszek
matthias.lukaszek

Reputation: 2220

Do both systems have the same number of cores? I could imagine, that when it comes to counting up the variable name suffix, the result can differ depending on the number of threads used for the compiler.

Upvotes: 1

Related Questions