mirror of
				https://github.com/go-delve/delve.git
				synced 2025-10-31 02:36:18 +08:00 
			
		
		
		
	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
 | |
| }
 |