Skip to content

Commit 447d8bf

Browse files
author
wintrmvte
committed
+ low-level functions
1 parent 5468c57 commit 447d8bf

File tree

1 file changed

+74
-0
lines changed

1 file changed

+74
-0
lines changed

low.go

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package coldfire
2+
3+
import (
4+
"debug/elf"
5+
"github.com/yalue/elf_reader"
6+
"os"
7+
"bytes"
8+
)
9+
10+
func EqualBytes(b1, b2 byte) bool {
11+
s1 := make([]byte, 1)
12+
s1[0] = b1
13+
s2 := make([]byte, 1)
14+
s2[0] = b2
15+
return bytes.Equal(s1, s2)
16+
}
17+
18+
func VerifyELFMagic(fname string) bool {
19+
f := IOReader(fname)
20+
_, err := elf.NewFile(f)
21+
Check(err)
22+
if err != nil {
23+
return false
24+
}
25+
var ident [16]uint8
26+
f.ReadAt(ident[0:], 0)
27+
Check(err)
28+
if ident[0] != '\x7f' || ident[1] != 'E' || ident[2] != 'L' || ident[3] != 'F' {
29+
return true
30+
}
31+
return false
32+
}
33+
34+
func IsELF(fname string) bool {
35+
raw, err := os.ReadFile(fname)
36+
Check(err)
37+
_, elf_err := elf_reader.ParseELFFile(raw)
38+
if elf_err == nil {
39+
return false
40+
}
41+
return true
42+
}
43+
44+
func IsELFInfected(fname string) bool {
45+
46+
}
47+
48+
// Checks if an ELF file is designed for AMD x86_64
49+
func IsELF64Bit(fname string) bool {
50+
f := IOReader(fname)
51+
elfile, err := elf.NewFile(f)
52+
Check(err)
53+
if (elfile.Class.String() == "ELFCLASS64" && elfile.Machine.String() == "EM_X86_64") {
54+
return true
55+
}
56+
return false
57+
}
58+
59+
func Caves(file string, min_size int) map[string]map[string]int {
60+
if IsELF(file) {
61+
elfile, err := elf.Open(file)
62+
Check(err)
63+
for _, sect := range elfile.Sections {
64+
data, _ := sect.Data()
65+
for off := 0; off < len(data); off++{
66+
if EqualBytes(data[off], 0x00) {
67+
68+
}
69+
}
70+
}
71+
} else {
72+
73+
}
74+
}

0 commit comments

Comments
 (0)