github.com/saferwall/pe@v1.5.2/dosheader_test.go (about) 1 // Copyright 2022 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 "testing" 9 ) 10 11 type TestDOSHeader struct { 12 imageDOSHeader ImageDOSHeader 13 } 14 15 func TestParseDOSHeader(t *testing.T) { 16 17 tests := []struct { 18 in string 19 out TestDOSHeader 20 }{ 21 { 22 getAbsoluteFilePath("test/putty.exe"), 23 TestDOSHeader{ 24 imageDOSHeader: ImageDOSHeader{ 25 Magic: 0x5a4d, 26 BytesOnLastPageOfFile: 0x78, 27 PagesInFile: 0x1, 28 Relocations: 0x0, 29 SizeOfHeader: 0x4, 30 MinExtraParagraphsNeeded: 0x0, 31 MaxExtraParagraphsNeeded: 0x0, 32 InitialSS: 0x0, 33 InitialSP: 0x0, 34 Checksum: 0x0, 35 InitialIP: 0x0, 36 InitialCS: 0x0, 37 AddressOfRelocationTable: 0x40, 38 OverlayNumber: 0x0, 39 ReservedWords1: [4]uint16{}, 40 OEMIdentifier: 0x0, 41 OEMInformation: 0x0, 42 ReservedWords2: [10]uint16{}, 43 AddressOfNewEXEHeader: 0x78, 44 }, 45 }, 46 }, 47 } 48 49 for _, tt := range tests { 50 t.Run(tt.in, func(t *testing.T) { 51 ops := Options{Fast: true} 52 file, err := New(tt.in, &ops) 53 if err != nil { 54 t.Fatalf("New(%s) failed, reason: %v", tt.in, err) 55 } 56 57 err = file.ParseDOSHeader() 58 if err != nil { 59 t.Fatalf("Parse(%s) failed, reason: %v", tt.in, err) 60 } 61 62 got := file.DOSHeader 63 if got != tt.out.imageDOSHeader { 64 t.Errorf("parse DOS header assertion failed, got %v, want %v", got, 65 tt.out.imageDOSHeader) 66 } 67 68 }) 69 } 70 } 71 72 func TestParseDOSHeaderNonMZ(t *testing.T) { 73 74 tests := []struct { 75 in string 76 out error 77 }{ 78 { 79 // This is an ELF file. 80 getAbsoluteFilePath("test/look"), 81 ErrDOSMagicNotFound, 82 }, 83 } 84 85 for _, tt := range tests { 86 t.Run(tt.in, func(t *testing.T) { 87 ops := Options{Fast: true} 88 file, err := New(tt.in, &ops) 89 if err != nil { 90 t.Fatalf("New(%s) failed, reason: %v", tt.in, err) 91 } 92 93 err = file.ParseDOSHeader() 94 if err != tt.out { 95 t.Fatalf("parsing DOS header failed, got %v, want %v", err, tt.out) 96 } 97 }) 98 } 99 }