mirror of
				https://github.com/go-delve/delve.git
				synced 2025-11-01 03:42:59 +08:00 
			
		
		
		
	 1522382336
			
		
	
	1522382336
	
	
	
		
			
			Add code to fuzz the expression evaluator and variable loader, see comment to FuzzEvalExpression for how to use this.
		
			
				
	
	
		
			67 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package core
 | |
| 
 | |
| import (
 | |
| 	"github.com/go-delve/delve/pkg/logflags"
 | |
| 	"github.com/go-delve/delve/pkg/proc"
 | |
| 	"github.com/go-delve/delve/pkg/proc/core/minidump"
 | |
| 	"github.com/go-delve/delve/pkg/proc/winutil"
 | |
| )
 | |
| 
 | |
| func readAMD64Minidump(minidumpPath, exePath string) (*process, proc.Thread, error) {
 | |
| 	var logfn func(string, ...interface{})
 | |
| 	if logflags.Minidump() {
 | |
| 		logfn = logflags.MinidumpLogger().Infof
 | |
| 	}
 | |
| 
 | |
| 	mdmp, err := minidump.Open(minidumpPath, logfn)
 | |
| 	if err != nil {
 | |
| 		if _, isNotAMinidump := err.(minidump.ErrNotAMinidump); isNotAMinidump {
 | |
| 			return nil, nil, ErrUnrecognizedFormat
 | |
| 		}
 | |
| 		return nil, nil, err
 | |
| 	}
 | |
| 
 | |
| 	memory := &SplicedMemory{}
 | |
| 
 | |
| 	for i := range mdmp.MemoryRanges {
 | |
| 		m := &mdmp.MemoryRanges[i]
 | |
| 		memory.Add(m, m.Addr, uint64(len(m.Data)))
 | |
| 	}
 | |
| 
 | |
| 	entryPoint := uint64(0)
 | |
| 	if len(mdmp.Modules) > 0 {
 | |
| 		entryPoint = mdmp.Modules[0].BaseOfImage
 | |
| 	}
 | |
| 
 | |
| 	p := &process{
 | |
| 		mem:         memory,
 | |
| 		Threads:     map[int]*thread{},
 | |
| 		bi:          proc.NewBinaryInfo("windows", "amd64"),
 | |
| 		entryPoint:  entryPoint,
 | |
| 		breakpoints: proc.NewBreakpointMap(),
 | |
| 		pid:         int(mdmp.Pid),
 | |
| 	}
 | |
| 
 | |
| 	for i := range mdmp.Threads {
 | |
| 		th := &mdmp.Threads[i]
 | |
| 		p.Threads[int(th.ID)] = &thread{&windowsAMD64Thread{th}, p, proc.CommonThread{}}
 | |
| 	}
 | |
| 	var currentThread proc.Thread
 | |
| 	if len(mdmp.Threads) > 0 {
 | |
| 		currentThread = p.Threads[int(mdmp.Threads[0].ID)]
 | |
| 	}
 | |
| 	return p, currentThread, nil
 | |
| }
 | |
| 
 | |
| type windowsAMD64Thread struct {
 | |
| 	th *minidump.Thread
 | |
| }
 | |
| 
 | |
| func (th *windowsAMD64Thread) pid() int {
 | |
| 	return int(th.th.ID)
 | |
| }
 | |
| 
 | |
| func (th *windowsAMD64Thread) registers() (proc.Registers, error) {
 | |
| 	return winutil.NewAMD64Registers(&th.th.Context, th.th.TEB), nil
 | |
| }
 |