MessageBoxAの呼び出しを自作関数にすり替えるところまで出来た。
アラインメントを全く気にしてないけど取り敢えず動いた。

BYTE jump[14] = {
0x68,0x90,0x90,0x90,0x90, // push <自作関数のアドレス下位4バイト>
0xc7,0x44, 0x24, 0x04, 0x90, 0x90, 0x90, 0x90, //mov DWORD PTR [rsp+0x4],<自作関数のアドレス上位4バイト>
0xc3}; //ret
FARPROC pTargetFunctionAddr = GetProcAddress(hModule, "MessageBoxA");
FARPROC pMyFunctionAddr = (FARPROC)&MyMessageBoxA;
  memcpy(&jump[1], ((char*)&pMyFunctionAddr), 4);
memcpy(&jump[9], ((char*)&pMyFunctionAddr)+4, 4);
   //MessageBoxAの先頭コードをjumpコードに書き換え
DWORD OriginalProtection;
VirtualProtect(pTargetFunctionAddr, 14, PAGE_EXECUTE_READWRITE, &OriginalProtection);
memcpy(pTargetFunctionAddr, jump, 14)
MessageBoxA(0, 0, 0, 0);
}