| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 999 人关注过本帖
标题:求救:window c编程高手的请进
只看楼主 加入收藏
xlgoodday
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2005-10-14
收藏
 问题点数:0 回复次数:6 
求救:window c编程高手的请进
//main.c
#define _UNICODE
#define UNICODE
#include<windows.h>
const int BREAK_POINT1 = 0x00405120;
const int BREAK_POINT2 = 0x00401000;
const int PATCH_POSITION=0x00401004;
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
        PSTR szCmdLine, int iCmdShow)
{
 CONTEXT stCT;   //线程环境
 char buf[2]={0x0cc,0x60};
 STARTUPINFO startupinfo;
 PROCESS_INFORMATION processInfo;
 DEBUG_EVENT devent;
 GetStartupInfo(&startupinfo);
 BOOL fOk=CreateProcess(
  TEXT("D:\\masm32\\Resource\\Chapter13\\Patch2\\test.exe"),NULL,NULL,NULL,NULL,
  DEBUG_PROCESS | DEBUG_ONLY_THIS_PROCESS,NULL,NULL, &startupinfo,&processInfo);
 if(!fOk)
 {
  MessageBox(NULL,TEXT("装载文件失败."),NULL,MB_OK);
  ExitProcess(0);
 }
 while(TRUE)
 {
  WaitForDebugEvent(&devent,INFINITE);//等待调试事件
  if(devent.dwDebugEventCode==EXIT_PROCESS_DEBUG_EVENT)
   break;
  if(devent.dwDebugEventCode==CREATE_PROCESS_DEBUG_EVENT)
   WriteProcessMemory(processInfo.hProcess,(LPVOID)BREAK_POINT1,buf,1,NULL);//写入一个
   //0xCC(int 3的机器码)
  else if(devent.dwDebugEventCode==EXCEPTION_DEBUG_EVENT)
  {
   if(devent.u.Exception.ExceptionRecord.ExceptionCode==EXCEPTION_BREAKPOINT)
   {
    stCT.ContextFlags=CONTEXT_FULL;
    GetThreadContext(processInfo.hThread,&stCT);
    if(stCT.Eip==BREAK_POINT1+1)
    {
     --stCT.Eip;
     WriteProcessMemory(processInfo.hProcess,(LPVOID)BREAK_POINT1,buf+1,1,NULL);
     stCT.EFlags=stCT.EFlags|0x100;//regFlag的单步标志被置为1
     SetThreadContext(processInfo.hThread,&stCT);     
    }
    else if(devent.u.Exception.ExceptionRecord.ExceptionCode==EXCEPTION_SINGLE_STEP)
    {
     stCT.ContextFlags=CONTEXT_FULL;
     SuspendThread(processInfo.hThread);
     GetThreadContext(processInfo.hThread,&stCT);
     ResumeThread(processInfo.hThread);
     if(stCT.Eip==BREAK_POINT2)
     {
      *buf=0x90;
      *(buf+1)=0x90;
      WriteProcessMemory(processInfo.hProcess,(LPVOID)PATCH_POSITION,
           buf,1,NULL);
     }
     else
     {
      stCT.EFlags=stCT.EFlags|0x100;//regFlag的单步标志被置为1
      SuspendThread(processInfo.hThread);
      SetThreadContext(processInfo.hThread,&stCT);
      ResumeThread(processInfo.hThread);
     }
    }
   }   
  }
  else if(devent.dwDebugEventCode==LOAD_DLL_DEBUG_EVENT)
  {
   break;
  }
  else if(devent.dwDebugEventCode==EXIT_THREAD_DEBUG_EVENT)
  {
   break;
  }
  
 ContinueDebugEvent(devent.dwProcessId,devent.dwThreadId,DBG_CONTINUE);
 }
 CloseHandle(processInfo.hThread);
 CloseHandle(processInfo.hProcess);
 ExitProcess(0);
}
这是一个关于补丁的程序。要打补丁的程序是
K7YjamBp.rar (1.42 KB) 求救:window c编程高手的请进



程序的错误是在 WriteProcessMemory(processInfo.hProcess,(LPVOID)BREAK_POINT1,buf,1,NULL);//写入一个
   //0xCC(int 3的机器码)
但我不知道为什么会错。请高手指点。
搜索更多相关主题的帖子: window 
2005-10-14 12:12
踏魔狼
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:1322
专家分:33
注 册:2005-9-22
收藏
得分:0 
那里有错呀! 你这个本身就是windows程序,所以我选择用VC来编译.
我选择的工程是win32 application空项目一切OK.

=×&D o I p R e E n C g T l X&×=
2005-10-16 23:24
xlgoodday
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2005-10-14
收藏
得分:0 
我说的是逻辑错误,不是编译和链接错误。

2005-10-18 12:24
踏魔狼
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:1322
专家分:33
注 册:2005-9-22
收藏
得分:0 
早说吗.你不说清楚那会去了解它有没有错呢.

=×&D o I p R e E n C g T l X&×=
2005-10-18 12:39
xlgoodday
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2005-10-14
收藏
得分:0 
那请帮我看一下错误的原因。

2005-10-18 21:12
xlgoodday
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2005-10-14
收藏
得分:0 
没人知道吗?

2005-10-21 19:29
xlgoodday
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2005-10-14
收藏
得分:0 

真的没人知道啊?


2005-10-28 20:17
快速回复:求救:window c编程高手的请进
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023471 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved