github.com/saferwall/pe@v1.5.2/ntheader_test.go (about) 1 // Copyright 2021 Saferwall. All rights reserved. 2 // Use of this source code is governed by Apache v2 license 3 // license that can be found in the LICENSE file. 4 5 package pe 6 7 import ( 8 "reflect" 9 "sort" 10 "strconv" 11 "testing" 12 ) 13 14 func TestParseNtHeaderNE(t *testing.T) { 15 16 tests := []struct { 17 in string 18 out error 19 }{ 20 { 21 // This is an NE executable file. Extracted from Windows CE 2.0. 22 getAbsoluteFilePath("test/_setup.dll"), 23 ErrImageOS2SignatureFound, 24 }, 25 } 26 27 for _, tt := range tests { 28 t.Run(tt.in, func(t *testing.T) { 29 ops := Options{Fast: true} 30 file, err := New(tt.in, &ops) 31 if err != nil { 32 t.Fatalf("New(%s) failed, reason: %v", tt.in, err) 33 } 34 35 err = file.Parse() 36 if err != tt.out { 37 t.Fatalf("parsing nt header failed, got %v, want %v", err, tt.out) 38 } 39 }) 40 } 41 } 42 43 func TestNtHeaderMachineType(t *testing.T) { 44 45 tests := []struct { 46 in ImageFileHeaderMachineType 47 out string 48 }{ 49 { 50 ImageFileHeaderMachineType(0x8664), "x64", 51 }, 52 { 53 ImageFileHeaderMachineType(0xffff), "?", 54 }, 55 } 56 57 for _, tt := range tests { 58 name := "CaseNtHeaderMachineTypeEqualTo_" + strconv.Itoa(int(tt.in)) 59 t.Run(name, func(t *testing.T) { 60 61 got := tt.in.String() 62 if got != tt.out { 63 t.Errorf("nt header machine type assertion failed, got %v, want %v", 64 got, tt.out) 65 } 66 }) 67 } 68 } 69 70 func TestNtHeaderCharacteristicsType(t *testing.T) { 71 72 tests := []struct { 73 in ImageFileHeaderCharacteristicsType 74 out []string 75 }{ 76 { 77 ImageFileHeaderCharacteristicsType(0x0022), []string{"ExecutableImage", "LargeAddressAware"}, 78 }, 79 } 80 81 for _, tt := range tests { 82 name := "CaseNtHeaderCharacteristicsTypeEqualTo_" + strconv.Itoa(int(tt.in)) 83 t.Run(name, func(t *testing.T) { 84 got := tt.in.String() 85 sort.Strings(got) 86 sort.Strings(tt.out) 87 if !reflect.DeepEqual(got, tt.out) { 88 t.Errorf("nt header Characteristics type assertion failed, got %v, want %v", 89 got, tt.out) 90 } 91 }) 92 } 93 } 94 95 func TestOptionalHeaderSubsystemType(t *testing.T) { 96 97 tests := []struct { 98 in ImageOptionalHeaderSubsystemType 99 out string 100 }{ 101 { 102 ImageOptionalHeaderSubsystemType(0x2), "Windows GUI", 103 }, 104 { 105 ImageOptionalHeaderSubsystemType(0xff), "?", 106 }, 107 } 108 109 for _, tt := range tests { 110 name := "CaseOptionalHeaderSubsystemTypeEqualTo_" + strconv.Itoa(int(tt.in)) 111 t.Run(name, func(t *testing.T) { 112 got := tt.in.String() 113 if got != tt.out { 114 t.Errorf("optional header subsystem type assertion failed, got %v, want %v", 115 got, tt.out) 116 } 117 }) 118 } 119 } 120 121 func TestOptionalHeaderDllCharacteristicsType(t *testing.T) { 122 123 tests := []struct { 124 in ImageOptionalHeaderDllCharacteristicsType 125 out []string 126 }{ 127 { 128 ImageOptionalHeaderDllCharacteristicsType(0x8160), 129 []string{"DynamicBase", "HighEntropyVA", "NXCompact", "TerminalServiceAware"}, 130 }, 131 } 132 133 for _, tt := range tests { 134 name := "CaseOptionalHeaderDllCharacteristicsTypeEqualTo_" + strconv.Itoa(int(tt.in)) 135 t.Run(name, func(t *testing.T) { 136 got := tt.in.String() 137 sort.Strings(got) 138 sort.Strings(tt.out) 139 if !reflect.DeepEqual(got, tt.out) { 140 t.Errorf("optional header dll characteristics type assertion failed, got %v, want %v", 141 got, tt.out) 142 } 143 }) 144 } 145 }