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; }