32 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			32 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
import functools;
 | 
						|
 | 
						|
# --- printers for stuff and yeah ---
 | 
						|
class EfiGuidPrinter(gdb.ValuePrinter):
 | 
						|
    "Print an EfiGuid"
 | 
						|
 | 
						|
    def __init__(self, val):
 | 
						|
        self.__val = val;
 | 
						|
 | 
						|
    def to_string(self):
 | 
						|
        # it's really disappointing that you cant iterate these silly arrays
 | 
						|
        d4 = self.__val["data4"];
 | 
						|
        last = functools.reduce(lambda s, bit: f'{s}{int(bit):0>2X}', [d4[0], d4[1], d4[2], d4[3], d4[4], d4[5], d4[6], d4[7]], "");
 | 
						|
        
 | 
						|
        return f'{int(self.__val["data1"]):0>8X}-{int(self.__val["data2"]):0>4X}-{int(self.__val["data3"]):0>4X}-{last}';
 | 
						|
 | 
						|
def add_pretty_printer(name, printer, custom_lookup = None):
 | 
						|
    def lookup(val):
 | 
						|
        if val.type.tag == name:
 | 
						|
            return printer(val);
 | 
						|
 | 
						|
        return None;
 | 
						|
 | 
						|
    gdb.current_objfile().pretty_printers.append(lookup if custom_lookup is None else custom_lookup);
 | 
						|
 | 
						|
    return;
 | 
						|
 | 
						|
add_pretty_printer("_EfiGuid", EfiGuidPrinter, lambda val: EfiGuidPrinter(val) if val.type.strip_typedefs().tag == "_EfiGuid" else None);
 | 
						|
 | 
						|
# --- code ---
 | 
						|
# def transition_cckernel():
 |