1 /*
2 type characteristic =
3 | IMAGE_FILE_RELOCS_STRIPPED
4 | IMAGE_FILE_EXECUTABLE_IMAGE
5 | IMAGE_FILE_LINE_NUMS_STRIPPED
6 | IMAGE_FILE_LOCAL_SYMS_STRIPPED
7 | IMAGE_FILE_AGGRESSIVE_WS_TRIM
8 | IMAGE_FILE_LARGE_ADDRESS_AWARE
9 | RESERVED
10 | IMAGE_FILE_BYTES_REVERSED_LO
11 | IMAGE_FILE_32BIT_MACHINE
12 | IMAGE_FILE_DEBUG_STRIPPED
13 | IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP
14 | IMAGE_FILE_NET_RUN_FROM_SWAP
15 | IMAGE_FILE_SYSTEM
16 | IMAGE_FILE_DLL
17 | IMAGE_FILE_UP_SYSTEM_ONLY
18 | IMAGE_FILE_BYTES_REVERSED_HI
19 | UNKNOWN of int
20
21 let get_characteristic =
22 function
23 | 0x0001 -> IMAGE_FILE_RELOCS_STRIPPED
24 | 0x0002 -> IMAGE_FILE_EXECUTABLE_IMAGE
25 | 0x0004 -> IMAGE_FILE_LINE_NUMS_STRIPPED
26 | 0x0008 -> IMAGE_FILE_LOCAL_SYMS_STRIPPED
27 | 0x0010 -> IMAGE_FILE_AGGRESSIVE_WS_TRIM
28 | 0x0020 -> IMAGE_FILE_LARGE_ADDRESS_AWARE
29 | 0x0040 -> RESERVED
30 | 0x0080 -> IMAGE_FILE_BYTES_REVERSED_LO
31 | 0x0100 -> IMAGE_FILE_32BIT_MACHINE
32 | 0x0200 -> IMAGE_FILE_DEBUG_STRIPPED
33 | 0x0400 -> IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP
34 | 0x0800 -> IMAGE_FILE_NET_RUN_FROM_SWAP
35 | 0x1000 -> IMAGE_FILE_SYSTEM
36 | 0x2000 -> IMAGE_FILE_DLL
37 | 0x4000 -> IMAGE_FILE_UP_SYSTEM_ONLY
38 | 0x8000 -> IMAGE_FILE_BYTES_REVERSED_HI
39 | x -> UNKNOWN x
40
41 let characteristic_to_string =
42 function
43 | IMAGE_FILE_RELOCS_STRIPPED -> "IMAGE_FILE_RELOCS_STRIPPED"
44 | IMAGE_FILE_EXECUTABLE_IMAGE -> "IMAGE_FILE_EXECUTABLE_IMAGE"
45 | IMAGE_FILE_LINE_NUMS_STRIPPED -> "IMAGE_FILE_LINE_NUMS_STRIPPED"
46 | IMAGE_FILE_LOCAL_SYMS_STRIPPED -> "IMAGE_FILE_LOCAL_SYMS_STRIPPED"
47 | IMAGE_FILE_AGGRESSIVE_WS_TRIM -> "IMAGE_FILE_AGGRESSIVE_WS_TRIM"
48 | IMAGE_FILE_LARGE_ADDRESS_AWARE -> "IMAGE_FILE_LARGE_ADDRESS_AWARE"
49 | RESERVED -> "RESERVED"
50 | IMAGE_FILE_BYTES_REVERSED_LO -> "IMAGE_FILE_BYTES_REVERSED_LO"
51 | IMAGE_FILE_32BIT_MACHINE -> "IMAGE_FILE_32BIT_MACHINE"
52 | IMAGE_FILE_DEBUG_STRIPPED -> "IMAGE_FILE_DEBUG_STRIPPED"
53 | IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP -> "IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP"
54 | IMAGE_FILE_NET_RUN_FROM_SWAP -> "IMAGE_FILE_NET_RUN_FROM_SWAP"
55 | IMAGE_FILE_SYSTEM -> "IMAGE_FILE_SYSTEM"
56 | IMAGE_FILE_DLL -> "IMAGE_FILE_DLL"
57 | IMAGE_FILE_UP_SYSTEM_ONLY -> "IMAGE_FILE_UP_SYSTEM_ONLY"
58 | IMAGE_FILE_BYTES_REVERSED_HI -> "IMAGE_FILE_BYTES_REVERSED_HI"
59 | UNKNOWN x -> Printf.sprintf "UNKNOWN_CHARACTERISTIC 0x%x" x
60
61 let is_dll characteristics =
62 let characteristic = characteristic_to_int IMAGE_FILE_DLL in
63 characteristics land characteristic = characteristic
64
65 let has characteristic characteristics =
66 let characteristic = characteristic_to_int characteristic in
67 characteristics land characteristic = characteristic
68
69 (* TODO: this is a mad hack *)
70 let show_type characteristics =
71 if (has IMAGE_FILE_DLL characteristics) then "DLL"
72 else if (has IMAGE_FILE_EXECUTABLE_IMAGE characteristics) then "EXE"
73 else "MANY" (* print all *)
74 */
75
76 pub const IMAGE_FILE_RELOCS_STRIPPED: u16 = 0x0001;
77 pub const IMAGE_FILE_EXECUTABLE_IMAGE: u16 = 0x0002;
78 pub const IMAGE_FILE_LINE_NUMS_STRIPPED: u16 = 0x0004;
79 pub const IMAGE_FILE_LOCAL_SYMS_STRIPPED: u16 = 0x0008;
80 pub const IMAGE_FILE_AGGRESSIVE_WS_TRIM: u16 = 0x0010;
81 pub const IMAGE_FILE_LARGE_ADDRESS_AWARE: u16 = 0x0020;
82 pub const RESERVED: u16 = 0x0040;
83 pub const IMAGE_FILE_BYTES_REVERSED_LO: u16 = 0x0080;
84 pub const IMAGE_FILE_32BIT_MACHINE: u16 = 0x0100;
85 pub const IMAGE_FILE_DEBUG_STRIPPED: u16 = 0x0200;
86 pub const IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP: u16 = 0x0400;
87 pub const IMAGE_FILE_NET_RUN_FROM_SWAP: u16 = 0x0800;
88 pub const IMAGE_FILE_SYSTEM: u16 = 0x1000;
89 pub const IMAGE_FILE_DLL: u16 = 0x2000;
90 pub const IMAGE_FILE_UP_SYSTEM_ONLY: u16 = 0x4000;
91 pub const IMAGE_FILE_BYTES_REVERSED_HI: u16 = 0x8000;
92
is_dll(characteristics: u16) -> bool93 pub fn is_dll(characteristics: u16) -> bool {
94 characteristics & IMAGE_FILE_DLL == IMAGE_FILE_DLL
95 }
96
is_exe(characteristics: u16) -> bool97 pub fn is_exe(characteristics: u16) -> bool {
98 characteristics & IMAGE_FILE_EXECUTABLE_IMAGE == IMAGE_FILE_EXECUTABLE_IMAGE
99 }
100