我正在尝试在 Go 中为 sancov 文件格式实现一个简单的解析器https://clang.llvm.org/docs/SanitizerCoverage.html#sancov-data-format
格式基本上是前 8 个字节是一个幻值 0xC0BFFFFFFFFFFF64 或 0xC0BFFFFFFFFFFF32 幻值的最后一个字节决定剩余偏移量的大小。
但是我不知道如何将十六进制值与 Go 中的字节值进行比较
package main
import (
"fmt"
"log"
"os"
)
func main() {
path := "test.exe.16900.sancov"
f, err := os.Open(path)
if err != nil {
log.Fatal("Error while opening file", err)
}
for {
data := make([]byte, 8)
// ignoring errors for now
bytesread, _ := f.Read(data)
if bytesread == 0 {
break
}
fmt.Printf("value: %x read %d bytes\n", data, bytesread)
//"64ffffffffffbfc0"
if data == 0xC0BFFFFFFFFFFF64 { // this is not valid
fmt.Println("64 bit header found")
}
}
}
我在这里缺少什么?
输出(删除最后一个 if 语句时)如下
PS C:\Users\user\src\test> go run main.go
value: 64ffffffffffbfc0 read 8 bytes
value: 3b10004001000000 read 8 bytes
value: 7c10004001000000 read 8 bytes
狐的传说
红颜莎娜
相关分类