请问如何能找到WndProc的地址?

原文:https://www.pediy.com/kssd/pediy09/pediy09-251.htm

int WINAPI WinMain(...){
  ......
  while ( GetMessage(&msg, NULL, 0, 0) ){
    TranslateMessage(&msg) ;
    DispatchMessage(&msg) ;
  }
  return msg.wParam ;
}

LRESULT CALLBACK WndProc(...) {
  switch ( message ){
    ...
  }
  return DefWindowProc(...) ;
}
一般程序都是这个结构,DispatchMessage负责把message提交给WndProc处理,但我找不到WndProc的地址,只能找到DispatchMessage,按F8之后这个消息就已经处理完了,怎么能跟进去找到WndProc的起始地址呢?

GetWindowLong

1. 已知窗口句柄求窗口过程地址,用GetWindowLong/GetClassLong函数
lpfnWndProc = (WNDPROC)GetWindowLong(hWnd, GWL_WNDPROC)
lpfnWndProc = (WNDPROC)GetClassLong(hWnd, GCL_WNDPROC)

2. 下断RegisterClassA(W)/RegisterClassExA(W)查看其参数所指向的WNDCLASS(EX)结构体的lpfnWndProc成员

总之方法很多

对DefWindowProc下断。