mirror of
				https://github.com/go-delve/delve.git
				synced 2025-10-30 10:17:03 +08:00 
			
		
		
		
	 b9bcd979d5
			
		
	
	b9bcd979d5
	
	
	
		
			
			The bitmasks for transforming a 64-bit register into it's lower-bit counterparts (e.g. RAX -> EAX -> AX -> AH/AL) were incorrect. This patch fixes the bitmasks and adds an additional test.
		
			
				
	
	
		
			61 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package linutil
 | |
| 
 | |
| import (
 | |
| 	"testing"
 | |
| 
 | |
| 	"golang.org/x/arch/x86/x86asm"
 | |
| )
 | |
| 
 | |
| func TestAMD64Get(t *testing.T) {
 | |
| 	val := uint64(0xffffffffdeadbeef)
 | |
| 	regs := AMD64Registers{
 | |
| 		Regs: &AMD64PtraceRegs{
 | |
| 			Rax: val,
 | |
| 		},
 | |
| 	}
 | |
| 	// Test AL, low 8 bits of RAX
 | |
| 	al, err := regs.Get(int(x86asm.AL))
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 	if al != 0xef {
 | |
| 		t.Fatalf("expected %#v, got %#v\n", 0xef, al)
 | |
| 	}
 | |
| 
 | |
| 	// Test AH, high 8 bits of RAX
 | |
| 	ah, err := regs.Get(int(x86asm.AH))
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 	if ah != 0xBE {
 | |
| 		t.Fatalf("expected %#v, got %#v\n", 0xbe, ah)
 | |
| 	}
 | |
| 
 | |
| 	// Test AX, lower 16 bits of RAX
 | |
| 	ax, err := regs.Get(int(x86asm.AX))
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 	if ax != 0xBEEF {
 | |
| 		t.Fatalf("expected %#v, got %#v\n", 0xbeef, ax)
 | |
| 	}
 | |
| 
 | |
| 	// Test EAX, lower 32 bits of RAX
 | |
| 	eax, err := regs.Get(int(x86asm.EAX))
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 	if eax != 0xDEADBEEF {
 | |
| 		t.Fatalf("expected %#v, got %#v\n", 0xdeadbeef, eax)
 | |
| 	}
 | |
| 
 | |
| 	// Test RAX, full 64 bits of register
 | |
| 	rax, err := regs.Get(int(x86asm.RAX))
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 	if rax != val {
 | |
| 		t.Fatalf("expected %#v, got %#v\n", val, rax)
 | |
| 	}
 | |
| }
 |