Bitcoin QT not Opening
Comparing two bitcoin-qt.exes the first difference is at offset 0xD8. This is likely some timestamp part of the PE header:
+0000 00D0: 00 E0 7F 01 00 04 00 00 0E 22 7F 01 02 00 40 01 ........ ."....@. -0000 00D0: 00 E0 7F 01 00 04 00 00 99 43 7F 01 02 00 40 01 ........ .C....@. There is also a large non-matching tract 01270E70....014A1000. This contains image data and text and appear to be the compiled Qt resources. Possibly an ordering issue.
Edit: the field at 0xD8 (PE_header+0x58) is a 16-bit checksum. It makes sense for this to not match. So the problem is fully in the compiled Qt resources.
Edit.2: Yep, the qrc_bitcoin.cpp as generated by Qt's rcc is different every time. It appears to pick a random ordering of files easily reproduced with ~/staging32/host/bin/rcc --list bitcoin.qrc.
Edit.3: The Qt4 resource compiler does not do this randomization, as we still use Qt4 on Linux this explains why this only happens on Windows. Looking into a way around this Qt5 'feature'.
Edit.4: Oh joy, all of this is due to a QHash security fix. Every run of an executable, the ordering is different. . They shouldn't be using a QHash here but some ordered dictionary...
Edit.5: I think I found a way to override the behavior without patching Qt rcc source (for now) by setting QT_RCC_TEST=1.