• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Golang crash.Info类代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了Golang中github.com/bnagy/crashwalk/crash.Info的典型用法代码示例。如果您正苦于以下问题:Golang Info类的具体用法?Golang Info怎么用?Golang Info使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。



在下文中一共展示了Info类的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。

示例1: mustAddExtra

func mustAddExtra(prefix string, scanner *bufio.Scanner, ci *crash.Info, die func()) {
	scanner.Scan()
	if !strings.HasPrefix(scanner.Text(), prefix) {
		die()
	}
	ci.Extra = append(ci.Extra, scanner.Text())
}
开发者ID:zuBux,项目名称:crashwalk,代码行数:7,代码来源:gdb.go


示例2: parse

func parse(raw []byte, cmd string) crash.Info {

	// this just prettifies the rest of the parsers slightly
	die := func() {
		explode(raw, cmd)
	}

	ci := crash.Info{}

	ci.Registers = parseRegisters(raw, die)
	parseStack(raw, &ci, die)
	parseExploitable(raw, &ci, die)
	ci.FaultingInsn, ci.Disassembly = parseDisasm(raw, die)
	parseIndicators(raw, &ci, die)

	return ci
}
开发者ID:shadown,项目名称:francis,代码行数:17,代码来源:francis.go


示例3: parseExploitable

func parseExploitable(raw []byte, ci *crash.Info, die func()) {

	scanner := bufio.NewScanner(bytes.NewReader(raw))

	// Faulting frame: #  4 None at 0x7ffff6fad93b in /usr/lib/x86_64-linux-gnu/libcairo.so.2.11301.0
	// Faulting frame: #  6 operator new(unsigned long) at 0x7ffff6d87698 in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.20
	// [  <---ignore--->  ] [  symbol text until "at"  ]     [address]      [ <-- module from here--> ]
	mustAdvanceTo("Faulting frame:", scanner, die)
	ff := strings.Fields(scanner.Text())
	if len(ff) < 9 {
		die()
	}

	atIdx := 0
	for i := 0; i < len(ff); i++ {
		if ff[i] == "at" {
			atIdx = i
			break
		}
	}
	if atIdx == 0 {
		die()
	}

	ci.FaultingFrame = crash.StackEntry{
		Symbol:  strings.Join(ff[4:atIdx], " "),
		Address: mustParseHex(ff[atIdx+1], die),
		// don't know if modules can ever contain spaces?
		Module: strings.Join(ff[atIdx+3:], " "),
	}
	// Description: Abort signal
	mustAddExtra("Description:", scanner, ci, die)
	// Short description: AbortSignal (20/22)
	mustAddExtra("Short description:", scanner, ci, die)
	// Hash: 71c14ffe39944b60af6fd47d1e505f97.0822ff5e99ce7ad4a1e6e98b273082a7
	mustAdvanceTo("Hash:", scanner, die)
	ci.Hash = strings.Fields(scanner.Text())[1]
	// Exploitability Classification: UNKNOWN
	mustAdvanceTo("Exploitability", scanner, die)
	ci.Classification = strings.Fields(scanner.Text())[2]
	// Explanation: The target is stopped on a SIGABRT. [...]
	mustAddExtra("Explanation:", scanner, ci, die)

	return
}
开发者ID:zuBux,项目名称:crashwalk,代码行数:45,代码来源:gdb.go


示例4: parse

func parse(raw []byte, cmd string) crash.Info {
	// This is "inefficient", but I'm going to parse each thing I'm interested
	// in out of the full output instead of doing a single pass.

	// this just prettifies the rest of the parsers slightly
	die := func() {
		explode(raw, cmd)
	}

	ci := crash.Info{}

	ci.Registers = parseRegisters(raw, die)
	ci.Stack = parseStack(raw, die)
	parseExploitable(raw, &ci, die) // easier for this one to modify ci directly
	ci.FaultingInsn, ci.Disassembly = parseDisasm(raw, die)

	return ci
}
开发者ID:zuBux,项目名称:crashwalk,代码行数:18,代码来源:gdb.go


示例5: parseExploitable

func parseExploitable(raw []byte, ci *crash.Info, die func()) {
	scanner := bufio.NewScanner(bytes.NewReader(raw))
	for scanner.Scan() {
		if strings.HasPrefix(scanner.Text(), "Hash:") {
			ff := strings.Fields(scanner.Text())
			if len(ff) < 2 {
				die()
			}
			ci.Hash = ff[1]
			break
		}
	}
}
开发者ID:shadown,项目名称:francis,代码行数:13,代码来源:francis.go


示例6: parseStack

func parseStack(raw []byte, ci *crash.Info, die func()) {
	// Stack trace:
	// * thread #1: tid = 0x9f2fa1f, 0x00007fff97580282 libsystem_kernel.dylib`__pthread_kill + 10, queue = 'com.apple.main-thread', stop reason = signal SIGABRT
	//   * frame #0: 0x00007fff97580282 libsystem_kernel.dylib`__pthread_kill + 10
	//     frame #1: 0x00007fff8e3d54c3 libsystem_pthread.dylib`pthread_kill + 90
	//     frame #2: 0x00007fff97a4cb73 libsystem_c.dylib`abort + 129
	//     frame #3: 0x00000001000b4dc4 pdftoppm`Catalog::getNumPages() [inlined] Object::dictIs(this=0x0000000000000007, dictType=<unavailable>) - 18446744069413843515
	//     frame #4: 0x00000001000029c0 pdftoppm`main(argc=2, argv=<unavailable>) - 18446744069414573631
	//     frame #5: 0x00007fff9a2f35c9 libdyld.dylib`start + 1
	//     frame #6: 0x00007fff9a2f35c9 libdyld.dylib`start + 1

	scanner := bufio.NewScanner(bytes.NewReader(raw))
	mustAdvanceTo("Stack trace:", scanner, die)

	scanner.Scan()
	ff := strings.Fields(scanner.Text())
	if len(ff) < 8 || ff[1] != "thread" {
		die()
	}

	for scanner.Scan() {

		// scan until we run out of frames
		ff := strings.Fields(scanner.Text())
		if len(ff) == 0 {
			break
		}
		// A leading asterisk adjusts all our offsets by 1
		adjust := 0
		if ff[0] == "*" {
			adjust++
		}
		if ff[0+adjust] != "frame" {
			break
		}
		if len(ff) < 3 {
			die()
		}

		var address uint64
		var found bool
		for _, s := range ff {
			if strings.HasPrefix(s, "0x") {
				address = mustParseHex(s, die)
				found = true
			}
		}
		if !found {
			die()
		}
		splits := []string{"???", "???"}
		if len(ff) > 3+adjust {
			// split on backtick (`)
			// libsystem_pthread.dylib`pthread_kill + 90
			rest := strings.Join(ff[3+adjust:], " ")
			splits = strings.SplitN(rest, "`", 2)
			if len(splits) < 2 {
				die()
			}
		}
		entry := crash.StackEntry{
			Address: address,
			Module:  splits[0],
			Symbol:  splits[1],
		}
		ci.Stack = append(ci.Stack, entry)

	}

	// Set the fault to the first frame that's not blacklisted
walk:
	for _, frame := range ci.Stack {
		for _, r := range blacklist {
			if r.MatchString(frame.Module) {
				continue walk
			}
		}
		ci.FaultingFrame = frame
		break
	}

	// don't be too fussy about not finding a stack, here, some crashes set
	// those registers to values that are unreadable as addresses.
	return
}
开发者ID:shadown,项目名称:francis,代码行数:85,代码来源:francis.go



注:本文中的github.com/bnagy/crashwalk/crash.Info类示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Golang readline.AddHistory函数代码示例发布时间:2022-05-24
下一篇:
Golang pq.ParseURL函数代码示例发布时间:2022-05-24
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap