wip
This commit is contained in:
38
internal/opcodescsv/analysis.go
Normal file
38
internal/opcodescsv/analysis.go
Normal file
@@ -0,0 +1,38 @@
|
||||
package opcodescsv
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"golang.org/x/arch/x86/x86csv"
|
||||
)
|
||||
|
||||
type Alias struct {
|
||||
Opcode string
|
||||
DataSize int
|
||||
}
|
||||
|
||||
// BuildAliasMap constructs a map from AT&T/GNU/Intel to Go syntax.
|
||||
func BuildAliasMap(is []*x86csv.Inst) (map[Alias]string, error) {
|
||||
m := map[Alias]string{}
|
||||
for _, i := range is {
|
||||
s, err := datasize(i.DataSize)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for _, alt := range []string{i.IntelOpcode(), i.GNUOpcode()} {
|
||||
if strings.ToUpper(alt) != i.GoOpcode() {
|
||||
m[Alias{Opcode: strings.ToLower(alt), DataSize: s}] = i.GoOpcode()
|
||||
}
|
||||
}
|
||||
}
|
||||
return m, nil
|
||||
}
|
||||
|
||||
func datasize(s string) (int, error) {
|
||||
if s == "" {
|
||||
return 0, nil
|
||||
}
|
||||
return strconv.Atoi(s)
|
||||
}
|
||||
Reference in New Issue
Block a user