I built the same source code, with the same compiler VC++ 6.0 on different machines (same OS: windows 2003). However they produced two "different" executables.
I disassembled two binaries using IDA and fed them into a tool which generated the call graph. I noticed,
1) The call graph are the same;
2) The tool matched all functions in one binary to another, which makes me believe they are actually the 'same' binary file;
3) Interestingly I found, the difference of binary diff lies in the fact that the same functions are put into different linear addresses. It looks that they are shifted by an offset.
For examples, in my two executables cmptree1.exe and cmptree3.exe
The subroutine sub_403550 (linear address 0x00403550) in cmptree1.exe matches sub_403540 in cmptree3.exe (linear address 0x00403540); and the followed subroutines match respectively.
Could some experts please tell me what could cause the difference in the binaries generated from the same source and same compiler?