def test_reuse_scratch_register(self): base_addr = 0xFEDCBA9876543210 cb = LocationCodeBuilder64() cb.begin_reuse_scratch_register() cb.MOV(ecx, heap(base_addr)) cb.MOV(ecx, heap(base_addr + 8)) cb.end_reuse_scratch_register() expected_instructions = ( # mov r11, 0xFEDCBA9876543210 '\x49\xBB\x10\x32\x54\x76\x98\xBA\xDC\xFE' + # mov rcx, [r11] '\x49\x8B\x0B' + # mov rcx, [r11+8] '\x49\x8B\x4B\x08') assert cb.getvalue() == expected_instructions
def test_reuse_scratch_register(self): base_addr = 0xFEDCBA9876543210 cb = LocationCodeBuilder64() cb.begin_reuse_scratch_register() cb.MOV(ecx, heap(base_addr)) cb.MOV(ecx, heap(base_addr + 8)) cb.end_reuse_scratch_register() expected_instructions = ( # mov r11, 0xFEDCBA9876543210 '\x49\xBB\x10\x32\x54\x76\x98\xBA\xDC\xFE' + # mov rcx, [r11] '\x49\x8B\x0B' + # mov rcx, [r11+8] '\x49\x8B\x4B\x08' ) assert cb.getvalue() == expected_instructions
def test_MOV_64bit_address_into_r11(self): base_addr = 0xFEDCBA9876543210 cb = LocationCodeBuilder64() cb.MOV(r11, heap(base_addr)) expected_instructions = ( # mov r11, 0xFEDCBA9876543210 '\x49\xBB\x10\x32\x54\x76\x98\xBA\xDC\xFE' + # mov r11, [r11] '\x4D\x8B\x1B') assert cb.getvalue() == expected_instructions
def test_MOV_64bit_address_into_r11(self): base_addr = 0xFEDCBA9876543210 cb = LocationCodeBuilder64() cb.MOV(r11, heap(base_addr)) expected_instructions = ( # mov r11, 0xFEDCBA9876543210 '\x49\xBB\x10\x32\x54\x76\x98\xBA\xDC\xFE' + # mov r11, [r11] '\x4D\x8B\x1B' ) assert cb.getvalue() == expected_instructions