c++实现内存修改进程内存 修改马里奥

1.HWND:表示句柄(handle), Wnd 是变量对象描述,表示窗口,所以hWnd 表示窗口句柄

2.FindWindow函数返回与指定字符串相匹配的窗口类名或窗口名的最顶层窗口的窗口句柄。这个函数不会查找子窗口。
函数原型:
HWND FindWindow( LPCTSTR lpClassName,LPCTSTR lpWindowName)//类名,标题名
3.DWORD双字DWORD processid 进程标识符id用双字类型

4.HANDLE:句柄,是Windows用来表示对象的(不是C++的对象),HWND是其中一种,HWND是HANDLE,但HANDLE不只是HWND,HANDLE是一个通用句柄表示,HWND是一个专用表示窗口的句柄。

5.OpenProcess 函数用来打开一个已存在的进程对象,并返回进程的句柄。
函数原型:
HANDLE OpenProcess(

DWORD dwDesiredAccess, //渴望得到的访问权限(标志)

BOOL bInheritHandle, // 是否继承句柄

DWORD dwProcessId// 进程标示符

);

6.GetWindowThreadProcessId
函数原型

DWORD GetWindowThreadProcessId(

HWND hWnd,

LPDWORD lpdwProcessId

);返回线程号,注意,lpdwProcessId 是存放进程号的变量。返回值是线程号,lpdwProcessId 是进程号存放处。

当然可以把答案再放到其它地方。如

DWORD dwPID, dwTID;

dwTID = GetWindowThreadProcessId( hWnd, &dwPID );

7.WriteProcessMemory
VC++声明

BOOL WriteProcessMemory(

HANDLE hProcess,//由OpenProcess返回的进程句柄。

LPVOID lpBaseAddress,//要写的内存首地址

LPVOID lpBuffer,//指向要写的数据的指针

DWORD nSize,//要写入的字节数。

LPDWORD lpNumberOfBytesWritten//返回值,非零值代表成功(编程时写0)

);

vc++修改马里奥总结:
1.使用findWindow找到窗口句柄
2.通过GetWindowThreadProcessId找到进程id(pid)
3.OpenProcess打开进程
4.WriteProcessMemory修改内存

 

源代码:

#include<stdio.h>
#include<windows.h>
int main()
{
    HWND h=FindWindow(NULL,"Super Mario XP") ;//获取窗口句柄
    DWORD processid;
    GetWindowThreadProcessId(h,&processid);//获取进程id
    HANDLE Hprocess=NULL;
    Hprocess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,processid);//打开进程
    if(Hprocess==0)
    printf("打开进程失败!\n");
    else
    {
        printf("打开进程成功!\n");
        printf("修改为:");
        int n;
        scanf("%d",&n);
        DWORD life;
        life=(DWORD)n;
    //    DWORD lifeaddr=0x004282a2;
        DWORD a=WriteProcessMemory(Hprocess,(LPVOID)(0x004282a2),&life,4,0);//注意参数
        if(a==0)
        printf("修改失败!");
        else
        printf("修改成功!");
    }
    return 0;
}

效果图:

  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言可以通过使用动态内存分配函数来实现内存分配策略。在C中,我们可以使用malloc, calloc, realloc和free这几个函数来动态分配和释放内存。 malloc函数用于分配一块指定大小的内存。它接收一个参数,表示需要分配的内存的大小(以字节为单位),并返回一个指向这块内存的指针。如果分配失败,则返回NULL。 calloc函数也用于分配一块内存,但是与malloc不同的是,它还会将分配的内存清零。它需要两个参数,第一个参数表示要分配的内存块数,第二个参数表示每个内存块的大小。它返回一个指向这块内存的指针,如果分配失败,则返回NULL。 realloc函数用于调整已分配内存的大小。它接收两个参数,第一个参数是一个已经分配了内存的指针,第二个参数表示需要重新分配的内存的大小。该函数会返回一个指向重新分配后内存的指针,如果内存不足或分配失败,则返回NULL。 free函数用于释放以前通过malloc、calloc或realloc函数分配的内存。它接收一个参数,表示需要释放的内存的指针。使用free函数后,被释放的内存可以再次用于分配。 内存分配策略可以根据具体的需求进行设计和实现。例如,可以通过循环调用malloc函数来动态分配多块不同大小的内存,并在使用完后通过调用free函数来逐个释放这些内存块。还可以使用realloc函数来调整已经分配内存的大小,以适应不同的需求。另外,还可以使用calloc函数来分配一块已经初始化为0的内存块。 通过合理使用这些内存分配函数,可以实现不同的内存分配策略,以满足不同的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值