# This file defines the following function: # write_address_of_code( # const void* patch_code, # size_t patch_code_size, # void** ptr_addr); # This function allocates memory for patch_code, copies patch_code to that memory, then writes the address of the # allocated code at the specified pointer. The allocated memory is never freed. This function pops its arguments off # the stack before returning. .versions 50YJ 59NJ 59NL write_call_to_code: # [esp + 0x04] = code ptr # [esp + 0x08] = code size # [esp + 0x0C] = ptr addr # Allocate memory for the copied code mov ecx, [] push dword [esp + 0x08] mov eax, call eax # malloc7 test eax, eax je done # Copy the code to the newly-allocated memory # eax = dest pointer (from malloc7 call above) mov edx, [esp + 0x04] # edx = source pointer mov ecx, [esp + 0x08] # ecx = source size push ebx memcpy_again: dec ecx mov bl, [edx + ecx] # Copy one byte from source to dest mov [eax + ecx], bl test ecx, ecx jne memcpy_again pop ebx # Write the address mov ecx, [esp + 0x0C] mov [ecx], eax done: ret 0x0C