したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | メール | |

管理人の独り言(プログラミング関連)

18774さん:2008/08/20(水) 17:45:07
void *SetProcMod(
  LRESULT (CALLBACK *proc)(LPVOID, HWND, UINT, WPARAM, LPARAM),
  SIZE_T bytes = 0
) const
{
  static const BYTE code[] = {
    0x53,                //PUSH EBX
    0x89, 0xE3,              //MOV EBX, ESI
    0x81, 0xC3, 0x04, 0x00, 0x00, 0x00,  //ADD EBX, 4
    0xB8, 0x00, 0x00, 0x00, 0x00,    //MOV EAX, imm32
    0x87, 0x03,              //XCHG EAX, [EBX]
    0x5B,                //POP EBX
    0x50,                //PUSH EAX
    0xB8, 0x00, 0x00, 0x00, 0x00,    //MOV EAX, imm32
    0xFF, 0xE0,              //JMP EAX
  };
  
  BYTE *p = (BYTE *)VirtualAlloc(
    NULL,
    sizeof(code) + sizeof(WNDPROC) + bytes,
    MEM_COMMIT,
    PAGE_EXECUTE_READWRITE
  );
  
  memcpy(p, code, sizeof(code));
  
  *((DWORD *)(p + 10)) = (DWORD)(p + sizeof(code) + sizeof(WNDPROC));
  *((DWORD *)(p + 19)) = (DWORD)proc;
  *((WNDPROC *)(p + sizeof(code))) = SetProc((WNDPROC)p);
  
  return p + sizeof(code) + sizeof(WNDPROC);
}


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板