-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
78 lines (64 loc) · 2.15 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
package main
import (
"flag"
"github.com/AlaxLee/go-assembly-analysis/analysis"
"github.com/AlaxLee/go-assembly-analysis/sections"
"log"
"os"
)
//文件输入有三种方式,url、file、pipe
var url string
var file string
var pipe bool
func init() {
flag.StringVar(&url, "code_by_url", "", "code by url")
flag.StringVar(&url, "u", "", "code by url")
flag.StringVar(&file, "code_by_file", "", "code by file")
flag.StringVar(&file, "f", "", "code by file")
flag.BoolVar(&pipe, "code_by_pipe", false, "code by pipe")
flag.BoolVar(&pipe, "p", false, "code by pipe")
}
//文件格式两种,默认是go源码,可以是编译后的文件
var assembled bool
func init() {
flag.BoolVar(&assembled, "assembled", false, "code has assembled")
flag.BoolVar(&assembled, "a", false, "code has assembled")
}
//结果展示,目前有三种,展示所有section name,展示所有分析后的结果,按section name展示分析结果
var displaySectionNames bool
var displayAllAnalyzedInfo bool
var bySectionName string
func init() {
flag.BoolVar(&displaySectionNames, "display_section_names", false, "display all section names")
flag.BoolVar(&displaySectionNames, "ns", false, "display all section names")
flag.BoolVar(&displayAllAnalyzedInfo, "display_all_analyzed_info", false, "display all analyzed info")
flag.BoolVar(&displayAllAnalyzedInfo, "aa", false, "display all analyzed info")
flag.StringVar(&bySectionName, "display_analyzed_info_by_section_name", "", "display analyzed info by section name")
flag.StringVar(&bySectionName, "an", "", "display analyzed info by section name")
}
func main() {
flag.Parse()
var ss *sections.Sections
var err error
if url != "" {
ss, err = analysis.AnalysisUrl(url, assembled)
} else if file != "" {
ss, err = analysis.AnalysisFile(file, assembled)
} else if pipe {
ss, err = analysis.AnalysisPipe(os.Stdin, assembled)
} else {
log.Fatal("param of input error")
}
if err != nil {
log.Fatalln(err)
}
if displaySectionNames {
ss.DisplayNames()
} else if displayAllAnalyzedInfo {
ss.DisplayAll()
} else if bySectionName != "" {
ss.Display(bySectionName)
} else {
log.Fatal("param of display error")
}
}