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的起始地址呢?

  • 标 题:答复
  • 作 者:一个刀客
  • 时 间:2007-08-29 14:26

GetWindowLong

  • 标 题:答复
  • 作 者:冲天剑
  • 时 间:2007-08-29 14:27

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

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

总之方法很多

  • 标 题:答复
  • 作 者:stupidass
  • 时 间:2007-09-01 17:19

对DefWindowProc下断。