forked from security/hakurei
69 lines
1.3 KiB
Go
69 lines
1.3 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"errors"
|
|
"io"
|
|
"log"
|
|
"os"
|
|
|
|
"hakurei.app/command"
|
|
)
|
|
|
|
func main() {
|
|
log.SetFlags(0)
|
|
log.SetPrefix("irdump: ")
|
|
|
|
var (
|
|
flagOutput string
|
|
flagReal bool
|
|
)
|
|
c := command.New(os.Stderr, log.Printf, "irdump", func(args []string) (err error) {
|
|
var input *os.File
|
|
if len(args) < 1 {
|
|
return errors.New("irdump requires 1 argument")
|
|
}
|
|
if input, err = os.Open(args[0]); err != nil {
|
|
return
|
|
}
|
|
defer input.Close()
|
|
|
|
var output *os.File
|
|
if flagOutput == "" {
|
|
output = os.Stdout
|
|
} else {
|
|
defer output.Close()
|
|
if output, err = os.Create(flagOutput); err != nil {
|
|
return
|
|
}
|
|
}
|
|
|
|
inputData := bytes.NewBuffer(nil)
|
|
if _, err = io.Copy(inputData, input); err != nil {
|
|
return
|
|
}
|
|
var out string
|
|
if out, err = Disassemble(inputData.Bytes(), flagReal); err != nil {
|
|
return
|
|
}
|
|
if _, err = output.WriteString(out); err != nil {
|
|
return
|
|
}
|
|
return
|
|
}).Flag(
|
|
&flagOutput,
|
|
"o", command.StringFlag(""),
|
|
"Output file for asm (leave empty for stdout)",
|
|
).Flag(
|
|
&flagReal,
|
|
"r", command.BoolFlag(false),
|
|
"skip label generation; idents print real value")
|
|
|
|
c.MustParse(os.Args[1:], func(err error) {
|
|
log.Fatal(err)
|
|
})
|
|
}
|
|
func Disassemble(ir []byte, real bool) (string, error) {
|
|
return "hello world", nil
|
|
}
|