mirror of
https://github.com/BertoldVdb/ms-tools.git
synced 2025-12-10 07:44:46 +01:00
68 lines
1.1 KiB
Go
68 lines
1.1 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/fatih/color"
|
|
)
|
|
|
|
func hexdump(offset int, data []byte, mark []bool) string {
|
|
var result string
|
|
red := color.New(color.FgRed)
|
|
|
|
for len(data) > 0 {
|
|
l := len(data)
|
|
if l > 32 {
|
|
l = 32
|
|
}
|
|
work := data[:l]
|
|
data = data[l:]
|
|
var workMark []bool
|
|
if mark != nil {
|
|
workMark = mark[:l]
|
|
mark = mark[l:]
|
|
}
|
|
|
|
var workHex string
|
|
var workAscii string
|
|
for i := 0; i < 32; i++ {
|
|
m := byte(0)
|
|
valid := i < len(work)
|
|
delta := false
|
|
if valid {
|
|
m = work[i]
|
|
if workMark != nil && workMark[i] {
|
|
delta = true
|
|
}
|
|
}
|
|
|
|
if valid {
|
|
if delta {
|
|
workHex += red.Sprintf("%02x ", m)
|
|
} else {
|
|
workHex += fmt.Sprintf("%02x ", m)
|
|
}
|
|
|
|
if m < 32 || m > 126 {
|
|
m = '.'
|
|
}
|
|
if delta {
|
|
workAscii += red.Sprintf("%c", m)
|
|
} else {
|
|
workAscii += fmt.Sprintf("%c", m)
|
|
}
|
|
} else {
|
|
workHex += " "
|
|
workAscii += " "
|
|
}
|
|
if i%8 == 7 {
|
|
workHex += " "
|
|
}
|
|
}
|
|
|
|
result += fmt.Sprintf("%08x %s|%s|\n", offset, workHex, workAscii)
|
|
offset += l
|
|
}
|
|
|
|
return result
|
|
}
|