diff --git a/native_exec/native_function.py b/native_exec/native_function.py index 624bd9a..549698d 100644 --- a/native_exec/native_function.py +++ b/native_exec/native_function.py @@ -193,6 +193,7 @@ def generate_stub_64(callback): c_callback = ctypes.c_ulong.from_address(id(callback._objects['0']) + 3 * ctypes.sizeof(ctypes.c_void_p)).value gstate_save_addr = allocator.reserve_int() return_addr_save_addr = allocator.reserve_int() + return_value_save_addr = allocator.reserve_int() Reserve_space_for_call = MultipleInstr([Push_RDI()] * 4) Clean_space_for_call = MultipleInstr([Pop_RDI()] * 4) @@ -250,6 +251,8 @@ def generate_stub_64(callback): code += Mov_RAX_X(c_callback) code += Clean_space_for_call code += Call_RAX() + # Save return value + code += Mov_DX_RAX(return_value_save_addr) code += Mov_RAX_DX(return_addr_save_addr) code += Push_RAX() code += Mov_RAX_X(release) @@ -267,6 +270,8 @@ def generate_stub_64(callback): code += Mov_RSI_DRAX() code += Mov_RAX_X(save_rdi) code += Mov_DRAX_RDI() + # Restore return value + code += Mov_RAX_DX(return_value_save_addr) code += Ret() return code diff --git a/pe_parse.py b/pe_parse.py index 15d324f..a4ac064 100644 --- a/pe_parse.py +++ b/pe_parse.py @@ -108,7 +108,6 @@ def PEFile(baseaddr): def get_IMPORT_DESCRIPTORS(self): import_datadir = self.get_DataDirectory()[IMAGE_DIRECTORY_ENTRY_IMPORT] if import_datadir.VirtualAddress == 0: - print("get_IMPORT_DESCRIPTORS : VirtualAddress == 0") return [] import_descriptor_addr = RVA(import_datadir.VirtualAddress).addr current_import_descriptor = self.IMAGE_IMPORT_DESCRIPTOR.from_address(import_descriptor_addr) @@ -157,7 +156,6 @@ def PEFile(baseaddr): else: import_by_name = IMPORT_BY_NAME.from_address(baseaddr + int_entry.AddressOfData) name = ctypes.c_char_p(ctypes.addressof(import_by_name) + IMPORT_BY_NAME.Name.offset).value - print(name) res.append((import_by_name.Hint, name)) int_addr += ctypes.sizeof(THUNK_DATA) int_entry = THUNK_DATA.from_address(int_addr)