diff --git a/suite/patch_major_os_version.py b/suite/patch_major_os_version.py
new file mode 100755
index 0000000000000000000000000000000000000000..d5036e887921096cd76540103bd923572ae00adf
--- /dev/null
+++ b/suite/patch_major_os_version.py
@@ -0,0 +1,29 @@
+#!/usr/bin/env python
+# By Daniel Pistelli & Nguyen Tan Cong
+
+# This script is to patch DLL/EXE MajorVersion to 5,
+# so they can be loaded by Windows XP.
+# This is the problem introduced by compiling on Windows 7, using VS2013.
+
+import sys, struct
+
+if len(sys.argv) < 2:
+    print("Usage: %s <pe_file_path>" % sys.argv[0]) 
+    sys.exit(0)
+
+pe_file_path = sys.argv[1]
+
+with open(pe_file_path, "rb") as f:
+    b = f.read()
+
+if not b.startswith("MZ"):
+    print("Not a PE file")
+    sys.exit(0)
+
+e_lfanew = struct.unpack_from("<I", b, 0x3C)[0]
+vb = struct.pack("<HHHHH", 5, 0, 0, 0, 5) # encode versions
+# patches MajorOperatingSystemVersion and MajorSubsystemVersion
+b = b[0:e_lfanew + 0x40] + vb + b[e_lfanew + 0x4A:]
+# write back to file
+with open(pe_file_path, "wb") as f:
+    f.write(b)
diff --git a/suite/regress/c-crashers/Makefile b/suite/regress/c-crashers/Makefile
index fd45d9ad3207da25447d30451c178e22941b82ac..d7a9f9f276015612d7f12be9188370dc5438e94c 100644
--- a/suite/regress/c-crashers/Makefile
+++ b/suite/regress/c-crashers/Makefile
@@ -1,5 +1,6 @@
+CFLAGS = -Wall
+LDLIBS = -l$(LIBNAME)
 LIBNAME = keystone
-CFLAGS = -Wall -l$(LIBNAME)
 PROGS = $(patsubst %.c, %, $(wildcard crash-??-*.c))
 all: $(PROGS)
 clean:
diff --git a/suite/regress/c-crashers/crash-02-hexagon-index-lt-size-failed.c b/suite/regress/c-crashers/crash-02-hexagon-index-lt-size-failed.c
index 754eb69247384cb4770aa4e476fe183ec0d5c331..827c923dce3e0e53f5ec4654414a06db93d47ef9 100644
--- a/suite/regress/c-crashers/crash-02-hexagon-index-lt-size-failed.c
+++ b/suite/regress/c-crashers/crash-02-hexagon-index-lt-size-failed.c
@@ -14,4 +14,5 @@ int main(int argc, char **argv) {
     ks_free(insn);
   }
   ks_close(ks);
+  return 0;
 }
diff --git a/suite/regress/c-crashers/crash-03-x64-invalid-index.c b/suite/regress/c-crashers/crash-03-x64-invalid-index.c
index 0fef6efb770351fce9ae2430c703c62cc50f0e3b..e463c6a2251cf06a8c55b9a8cf622309ccc61c2f 100644
--- a/suite/regress/c-crashers/crash-03-x64-invalid-index.c
+++ b/suite/regress/c-crashers/crash-03-x64-invalid-index.c
@@ -14,4 +14,5 @@ int main(int argc, char **argv) {
     ks_free(insn);
   }
   ks_close(ks);
+  return 0;
 }
diff --git a/suite/regress/c-crashers/crash-04-hexagon-readcount-not-equal-to-one.c b/suite/regress/c-crashers/crash-04-hexagon-readcount-not-equal-to-one.c
index bd05844d85db01dc65f919120f244f966e6319d0..d1ad27902d386ddcf39743a8d7f5b5c8434af13e 100644
--- a/suite/regress/c-crashers/crash-04-hexagon-readcount-not-equal-to-one.c
+++ b/suite/regress/c-crashers/crash-04-hexagon-readcount-not-equal-to-one.c
@@ -14,4 +14,5 @@ int main(int argc, char **argv) {
     ks_free(insn);
   }
   ks_close(ks);
+  return 0;
 }
diff --git a/suite/regress/c-crashers/crash-05-x64-normal-symbols-cannot-be-unnamed.c b/suite/regress/c-crashers/crash-05-x64-normal-symbols-cannot-be-unnamed.c
index 47a2734c13c079d5b1b6e72a1ee6c584af016b96..05d0a132404197e9a70a42ffb153f83d96569576 100644
--- a/suite/regress/c-crashers/crash-05-x64-normal-symbols-cannot-be-unnamed.c
+++ b/suite/regress/c-crashers/crash-05-x64-normal-symbols-cannot-be-unnamed.c
@@ -14,4 +14,5 @@ int main(int argc, char **argv) {
     ks_free(insn);
   }
   ks_close(ks);
+  return 0;
 }
diff --git a/suite/regress/c-crashers/crash-06-systemz-exponent-has-no-digits-in-apfloat-line-126.c b/suite/regress/c-crashers/crash-06-systemz-exponent-has-no-digits-in-apfloat-line-126.c
index f56072727d1aebd6236f432055162a06c3cd6cd8..b9c057eb5d573b0100942685df8834a7e3edce52 100644
--- a/suite/regress/c-crashers/crash-06-systemz-exponent-has-no-digits-in-apfloat-line-126.c
+++ b/suite/regress/c-crashers/crash-06-systemz-exponent-has-no-digits-in-apfloat-line-126.c
@@ -14,4 +14,5 @@ int main(int argc, char **argv) {
     ks_free(insn);
   }
   ks_close(ks);
+  return 0;
 }
diff --git a/suite/regress/c-crashers/crash-07-systemz-exponent-has-no-digits-in-apfloat-line-131.c b/suite/regress/c-crashers/crash-07-systemz-exponent-has-no-digits-in-apfloat-line-131.c
index a5af729f5d87cce75c340c6341a5dcaa9f7a5415..81cb62706d1296d2a311e4a0fea5c215cfb09cc5 100644
--- a/suite/regress/c-crashers/crash-07-systemz-exponent-has-no-digits-in-apfloat-line-131.c
+++ b/suite/regress/c-crashers/crash-07-systemz-exponent-has-no-digits-in-apfloat-line-131.c
@@ -15,4 +15,5 @@ int main(int argc, char **argv) {
     ks_free(insn);
   }
   ks_close(ks);
+  return 0;
 }
diff --git a/suite/regress/c-crashers/crash-08-systemz-invalid-character-in-exponent-absexponent-case.c b/suite/regress/c-crashers/crash-08-systemz-invalid-character-in-exponent-absexponent-case.c
index 22af2e4120296800648bcbb921e7745803822676..84908fea26fd772be3a42cae45e4bc80ba6847d3 100644
--- a/suite/regress/c-crashers/crash-08-systemz-invalid-character-in-exponent-absexponent-case.c
+++ b/suite/regress/c-crashers/crash-08-systemz-invalid-character-in-exponent-absexponent-case.c
@@ -14,4 +14,5 @@ int main(int argc, char **argv) {
     ks_free(insn);
   }
   ks_close(ks);
+  return 0;
 }
diff --git a/suite/regress/c-crashers/crash-09-hexagon-invalid-character-in-exponent-value-case.c b/suite/regress/c-crashers/crash-09-hexagon-invalid-character-in-exponent-value-case.c
index 003cc2153f005f00ca00103247d488bed01f1979..c6471c0fe5422332ea5c747cfba1754afc837967 100644
--- a/suite/regress/c-crashers/crash-09-hexagon-invalid-character-in-exponent-value-case.c
+++ b/suite/regress/c-crashers/crash-09-hexagon-invalid-character-in-exponent-value-case.c
@@ -15,4 +15,5 @@ int main(int argc, char **argv) {
     ks_free(insn);
   }
   ks_close(ks);
+  return 0;
 }
diff --git a/suite/regress/c-crashers/crash-10-x64-stringref-cannot-be-built-from-a-null-argument.c b/suite/regress/c-crashers/crash-10-x64-stringref-cannot-be-built-from-a-null-argument.c
index c321a8dde40c6a086f6a9485ae263abf107f88f9..7da5f23c4e8d69a35446191f1b8e8af4b48dc6a1 100644
--- a/suite/regress/c-crashers/crash-10-x64-stringref-cannot-be-built-from-a-null-argument.c
+++ b/suite/regress/c-crashers/crash-10-x64-stringref-cannot-be-built-from-a-null-argument.c
@@ -14,4 +14,5 @@ int main(int argc, char **argv) {
     ks_free(insn);
   }
   ks_close(ks);
+  return 0;
 }
diff --git a/suite/regress/c-crashers/crash-11-systemz-elfobjectwriter-should-not-have-constructed-this.c b/suite/regress/c-crashers/crash-11-systemz-elfobjectwriter-should-not-have-constructed-this.c
index 6f72229552b2c79f236b6d93746dbfc02bb469a6..7f70943cbf367c5ac0be5f7418982305f65b0ecd 100644
--- a/suite/regress/c-crashers/crash-11-systemz-elfobjectwriter-should-not-have-constructed-this.c
+++ b/suite/regress/c-crashers/crash-11-systemz-elfobjectwriter-should-not-have-constructed-this.c
@@ -15,4 +15,5 @@ int main(int argc, char **argv) {
     ks_free(insn);
   }
   ks_close(ks);
+  return 0;
 }
diff --git a/suite/regress/c-crashers/crash-12-x64-cannot-set-a-variable-that-has-already-been-used.c b/suite/regress/c-crashers/crash-12-x64-cannot-set-a-variable-that-has-already-been-used.c
index 378df18df38aac47c7a3e7c83f41d5706648475e..1f3964022b960a1f0117fd09dc6352ce15c46187 100644
--- a/suite/regress/c-crashers/crash-12-x64-cannot-set-a-variable-that-has-already-been-used.c
+++ b/suite/regress/c-crashers/crash-12-x64-cannot-set-a-variable-that-has-already-been-used.c
@@ -17,4 +17,5 @@ int main(int argc, char **argv) {
     ks_free(insn);
   }
   ks_close(ks);
+  return 0;
 }
diff --git a/suite/regress/c-crashers/crash-13-hexagon-mc-code-emitter-mk-is-not-equal-to-symbolref.c b/suite/regress/c-crashers/crash-13-hexagon-mc-code-emitter-mk-is-not-equal-to-symbolref.c
index 497d689d1075135fcbc53eab4c620f30f1825fdc..55ed9a6a4914a0670423764ec328e1f9eb921b22 100644
--- a/suite/regress/c-crashers/crash-13-hexagon-mc-code-emitter-mk-is-not-equal-to-symbolref.c
+++ b/suite/regress/c-crashers/crash-13-hexagon-mc-code-emitter-mk-is-not-equal-to-symbolref.c
@@ -15,4 +15,5 @@ int main(int argc, char **argv) {
     ks_free(insn);
   }
   ks_close(ks);
+  return 0;
 }
diff --git a/suite/regress/c-crashers/crash-14-x64-invalid-accessor.c b/suite/regress/c-crashers/crash-14-x64-invalid-accessor.c
index e636de740ecdb8d661e0a182f7b3a5374d172fac..ce1c88bd56b23c9ab39116e6b580498d007bc4c6 100644
--- a/suite/regress/c-crashers/crash-14-x64-invalid-accessor.c
+++ b/suite/regress/c-crashers/crash-14-x64-invalid-accessor.c
@@ -16,4 +16,5 @@ int main(int argc, char **argv) {
     ks_free(insn);
   }
   ks_close(ks);
+  return 0;
 }
diff --git a/suite/regress/c-crashers/crash-15-x64-expected-macro-to-be-defined.c b/suite/regress/c-crashers/crash-15-x64-expected-macro-to-be-defined.c
index 1c61d0d323dd7bde7019449d4fd44e9d6b67ae4a..eb693bded66ad7a4f9753cbab4a75f104380ce17 100644
--- a/suite/regress/c-crashers/crash-15-x64-expected-macro-to-be-defined.c
+++ b/suite/regress/c-crashers/crash-15-x64-expected-macro-to-be-defined.c
@@ -16,4 +16,5 @@ int main(int argc, char **argv) {
     ks_free(insn);
   }
   ks_close(ks);
+  return 0;
 }
diff --git a/suite/regress/c-crashers/crash-16-arm-expression-value-must-be-representable-in-32-bits.c b/suite/regress/c-crashers/crash-16-arm-expression-value-must-be-representable-in-32-bits.c
index 544d950bfa4d8ecd5dd31d32daeb4e87e49e0e56..cd7d2c6f15c4d79498dd381c2a3f4f4b33fde7ec 100644
--- a/suite/regress/c-crashers/crash-16-arm-expression-value-must-be-representable-in-32-bits.c
+++ b/suite/regress/c-crashers/crash-16-arm-expression-value-must-be-representable-in-32-bits.c
@@ -14,4 +14,5 @@ int main(int argc, char **argv) {
     ks_free(insn);
   }
   ks_close(ks);
+  return 0;
 }
diff --git a/suite/regress/c-crashers/crash-17-arm-invalid-size.c b/suite/regress/c-crashers/crash-17-arm-invalid-size.c
index 74bab9d9a0e214638924d0c92d30f8d3541c7057..a7e682f9c66d0eb5cdfaecfd9ea0c9b4068de59f 100644
--- a/suite/regress/c-crashers/crash-17-arm-invalid-size.c
+++ b/suite/regress/c-crashers/crash-17-arm-invalid-size.c
@@ -20,4 +20,5 @@ int main(int argc, char **argv) {
     ks_free(insn);
   }
   ks_close(ks);
+  return 0;
 }
diff --git a/suite/regress/c-crashers/crash-18-arm-invalid-access.c b/suite/regress/c-crashers/crash-18-arm-invalid-access.c
index dd047d74ab0d963894bb158a971b25a6839f0aa0..4696d7201662f362707904c06bd574a8d3a3e18a 100644
--- a/suite/regress/c-crashers/crash-18-arm-invalid-access.c
+++ b/suite/regress/c-crashers/crash-18-arm-invalid-access.c
@@ -15,4 +15,5 @@ int main(int argc, char **argv) {
     ks_free(insn);
   }
   ks_close(ks);
+  return 0;
 }
diff --git a/suite/regress/c-crashers/crash-19-arm-unable-to-encode-mcoperand.c b/suite/regress/c-crashers/crash-19-arm-unable-to-encode-mcoperand.c
index 534f9e3ccfc4c6d71b3f3d129dd8a9979015111d..95dc34e36604b1922f92b4e8e20226c8e0af4c39 100644
--- a/suite/regress/c-crashers/crash-19-arm-unable-to-encode-mcoperand.c
+++ b/suite/regress/c-crashers/crash-19-arm-unable-to-encode-mcoperand.c
@@ -14,4 +14,5 @@ int main(int argc, char **argv) {
     ks_free(insn);
   }
   ks_close(ks);
+  return 0;
 }
diff --git a/suite/regress/c-crashers/crash-20-systemz-segfault-in-llvm-mcassembler-computefragmentsize.c b/suite/regress/c-crashers/crash-20-systemz-segfault-in-llvm-mcassembler-computefragmentsize.c
index a51f47658aa08eedcfd7f852f2b26f7f47c6b7fc..7ef2ad10e3b56188d3dc0c68326ca4cabb697689 100644
--- a/suite/regress/c-crashers/crash-20-systemz-segfault-in-llvm-mcassembler-computefragmentsize.c
+++ b/suite/regress/c-crashers/crash-20-systemz-segfault-in-llvm-mcassembler-computefragmentsize.c
@@ -14,4 +14,5 @@ int main(int argc, char **argv) {
     ks_free(insn);
   }
   ks_close(ks);
+  return 0;
 }
diff --git a/suite/regress/c-crashers/crash-25-x64-expected-an-immediate-or-register.c b/suite/regress/c-crashers/crash-25-x64-expected-an-immediate-or-register.c
index c1f4b9bbbfb2672cc027e88e9864d870b8c4c6b5..12ada790c04eb9602cfafe72b902ab9ee30398d1 100644
--- a/suite/regress/c-crashers/crash-25-x64-expected-an-immediate-or-register.c
+++ b/suite/regress/c-crashers/crash-25-x64-expected-an-immediate-or-register.c
@@ -14,4 +14,5 @@ int main(int argc, char **argv) {
     ks_free(insn);
   }
   ks_close(ks);
+  return 0;
 }
diff --git a/suite/regress/c-crashers/crash-26-x64-indexreg-already-set.c b/suite/regress/c-crashers/crash-26-x64-indexreg-already-set.c
index b335acb58fb5311f5f3428c1e63eff39cc3d7337..7e5446bfd5c0eeba10e63e8ba13dd6d70778f2dd 100644
--- a/suite/regress/c-crashers/crash-26-x64-indexreg-already-set.c
+++ b/suite/regress/c-crashers/crash-26-x64-indexreg-already-set.c
@@ -15,4 +15,5 @@ int main(int argc, char **argv) {
     ks_free(insn);
   }
   ks_close(ks);
+  return 0;
 }
diff --git a/suite/regress/c-crashers/crash-27-x64-too-many-bits-for-uint64_t.c b/suite/regress/c-crashers/crash-27-x64-too-many-bits-for-uint64_t.c
index 18931c252ea27027e3ee18a3b9fcd95c2c71baf4..0889e1307fa5911f7d41073f7bae14be14a1214c 100644
--- a/suite/regress/c-crashers/crash-27-x64-too-many-bits-for-uint64_t.c
+++ b/suite/regress/c-crashers/crash-27-x64-too-many-bits-for-uint64_t.c
@@ -16,4 +16,5 @@ int main(int argc, char **argv) {
     ks_free(insn);
   }
   ks_close(ks);
+  return 0;
 }