标签:
4.计算机内存CPU执行原理
讲解1:
#include<stdio.h> // 标准输入输出 standard
#include<stdlib.h> // 标准库 含system
void main()
{
int num = 56; // 定义整型变量,初始化为56
printf("天朝有%d个民族\n", num); // 十进制输出num值
printf("地址%p\n", &num); // 取地址
// 插入断点,调试
// 查看内存:调试——窗口——内存——内存1——找到后右击带符号显示
printf("锄禾日当午,学C真他妈苦\n");
system("echo 重剑无锋,大巧无工");
system("pause");
}
输出地址:0018F978
讲解2:
#include<stdio.h> // 标准输入输出 standard
#include<stdlib.h> // 标准库 含system
void main()
{
int num = 1; // 任何变量在内存里都有一个地址
printf("地址%p\n", &num); // 按照地址的方式打印出num的地址
// 断点
// 内存:0x0018FA50 1
num = 2;
// 断点
// 内存:0x0018FA50 2
num = 3;
// 断点
// 内存:0x0018FA50 3
printf("%d\n", num); // 按照十进制输出
// 0x0018FA50
system("pause");
}
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
void changetitle() // 改变游戏窗口标题
{
// 创建一个窗口编号变量,根据类型名与窗口标题寻找植物大战僵尸的窗口
HWND win = FindWindowA("MainWindow", "植物大战僵尸中文版");
SetWindowTextA(win, "锄禾日当午,植物大战僵尸真是苦"); // 设置窗口标题
}
void lock() // 锁定游戏窗口
{
// 创建一个窗口编号变量,根据类型名与窗口标题寻找植物大战僵尸的窗口
HWND win = FindWindowA("MainWindow", "锄禾日当午,植物大战僵尸真是苦");
EnableWindow(win, 0); // 0,代表锁定,1代表解锁
}
void unlock() // 解锁游戏窗口
{
// 创建一个窗口编号变量,根据类型名与窗口标题寻找植物大战僵尸的窗口
HWND win = FindWindowA("MainWindow", "锄禾日当午,植物大战僵尸真是苦");
EnableWindow(win, 1); // 0,代表锁定,1代表解锁
}
void show() // 显示 游戏窗口
{
// 创建一个窗口编号变量,根据类型名与窗口标题寻找植物大战僵尸的窗口
HWND win = FindWindowA("MainWindow", "锄禾日当午,植物大战僵尸真是苦");
ShowWindow(win, SW_SHOW); // 显示
}
void hide() // 隐藏游戏窗口
{
// 创建一个窗口编号变量,根据类型名与窗口标题寻找植物大战僵尸的窗口
HWND win = FindWindowA("MainWindow", "锄禾日当午,植物大战僵尸真是苦");
ShowWindow(win, SW_HIDE); // 隐藏
}
void chose() // 关闭植物大战僵尸
{
system("taskkill /f /im PlantsVsZombies.exe");
}
void open() // 打开,附加游戏资源的游戏,用批处理打开
{
// 打开
// cd C:\Users\mingzi\Desktop\Plants_vs_Zombies\植物大战僵尸中文版
// Plan
}
void move()
{
// 创建一个窗口编号变量,根据类型名与窗口标题寻找植物大战僵尸的窗口
HWND win = FindWindowA("MainWindow", "锄禾日当午,植物大战僵尸真是苦");
for (int i = 0; i < 1600; i++)
{
SetWindowPos(win, NULL, i, 0, 500, 600, 0);// 移动之,i,0,横纵坐标
Sleep(20);
}
}
void smalltobig()
{
// 创建一个窗口编号变量,根据类型名与窗口标题寻找植物大战僵尸的窗口
HWND win = FindWindowA("MainWindow", "锄禾日当午,植物大战僵尸真是苦");
for (int i = 0; i < 1600; i++)
{
SetWindowPos(win, NULL, 0, 0, i, i*9/16, 0);// 放大缩小之:宽度,高度
Sleep(20);
}
}
void main()
{
//hide();
//show();
//close();
open();
Sleep(5000);
move();
smalltobig();
}
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h> // Sleep函数
// _declspec(dllexport) dll函数导出 接口
_declspec(dllexport) void go()
{
// 一个进程不可以随便更改另外一个进程的内存,保证系统的稳定
int *p = (int *)0x0018FA50;
*p = 100;
}
_declspec(dllexport) void autoadd()
{
int *p = (int *)0x0018FE43;
*p = 0;
while (1) // 死循环,循环检测,是否需要充血
{
if (*p < 100) // 判断血是否小于100
{
*p = 150; // 自动加血
}
}
}
#include<stdio.h> // 标准输入输出 standard #include<stdlib.h> // 标准库 含system void main() { int a = 1; int b = 2; printf("&a = %p,&b = %p", &a, &b); int c = 3; printf("\n&c = %p", &c); c = a + 3; //加断点 // 内存:0x0018F720 + 3 // 寄存器:EAX = 0000000E EIP = 01053F47 c = a + 4; //加断点 // 内存:0x0018F720 + 4 // 寄存器:EAX = 00000004 EIP = 01053F50 c = a + 5; //加断点 // 内存:0x0018F720 + 5 // 寄存器:EAX = 00000005 EIP = 01053F59 c = a + b; //加断点 // 内存:0x0018F720 + 6 // 寄存器:EAX = 00000006 EIP = 01053F62 system("pause"); }
#include<stdio.h> // 标准输入输出 standard
#include<stdlib.h> // 标准库 含system
void main()
{
int a = 10;
int b = 5;
int c = 0;
printf("%p\n", &c);
// 嵌入汇编语言
// 功能:c = a + b;
// mov:移动 add:加
_asm
{
mov eax,c // eax 为寄存器 将c的值移动到eax,eax = 0
//加断点
// 内存:0x0018FEB8 0
// 寄存器:EAX = 00000000
add eax,a // eax = 10
//加断点
// 内存:
// 寄存器:EAX = 0000000A
add eax,b // eax = 15
//加断点
// 内存:
// 寄存器:EAX = 0000000F
mov c,eax // eax赋值给c
}
printf("%d\n", c);
// 加断点
// 内存:0x0018FEB8 +15
// 寄存器:EAX = 0000000F
system("pause");
}
版权所有,转载请注明出处http://www.cnblogs.com/lizhongpingchn/p/5563997.html
标签:
原文地址:http://www.cnblogs.com/lizhongpingchn/p/5563997.html