初手学VB,真心求各路高手进来看看,教下我我我!!

来源:百度知道 编辑:UC知道 时间:2024/06/19 05:11:43
是关于内存基础方面的!!最近学习做游戏内存修改,代码..API ...等方面都可以.问题是内存的基址 偏移 什么一级基址...不懂.(因为还不是专业学的,但很有兴趣,呵呵)
主题:例如游戏里的血值(HP),每次启动游戏或小退HP的值都会存在不同的内存地址,我们怎样能找到呢?我知道可以从基址入手,不过本人不太懂基址 偏移 还有其他内存地址的关系?在这些名词里,什么是每次开机都不变的呢?什么是会改变的呢?它是随着什么改变而改变的呢?
先谢谢了!!
- -2楼的回答离题了,我都说代码方面都会,知识内存不懂,继续.......高手路过请留下个脚印!!比空手走了. 谢谢

这比较麻烦的,建议先找本汇编的书看看吧。

我知道可以从基址入手,不过本人不太懂基址 偏移 还有其他内存地址的关系?在这些名词里,什么是每次开机都不变的呢?

你也太会飞了.
一个程序要运行一定要调入内存里面.我们给内存的位置编上号,这个就可以找到程序在内存的哪里.基址 偏移是intel8086 cpu开始的地址寻找方式.具体说太长编了.你找一下汇编程序的书看吧.
只要重新启动程序,程序所在内存的位置会改变的.但在windows的寻址方式下.每个程序的虚拟位置不会变,程序变量除了静态的,所有都会改变位置的.这种情况下修改内存,所说到的基址下偏移是不同于8086的基址偏移,这是windows环境下的基址偏移,如果在修改windows的地址,还有权限问题.总之都不知道怎样入手了.很复杂啊.

可以用ME(CE\OE……)来寻找
寻找到后
Public pw, ph, pid As Long

Dim a, b, c, d As Long
Dim rmb As Long
a = FindWindow(vbNullString, "游戏窗体名称")
GetWindowThreadProcessId a, b
c = OpenProcess(PROCESS_ALL_ACCESS, 0, b)
If c = 0 Then
Label2.Caption = "当前金钱:游戏未运行"
Command1.Enabled = False
Frame2.Caption = "游戏--(状态:未运行)"
Exit Sub
End If
Command1.Enabled = True
'读取基址A82CB4 获取他的内容保存到d
ReadProcessMemory c, ByVal &HA82CB4, d, 4, 0
'读d+30c的地址内容保存到rmb,4字节大小
ReadProcessMemory c, ByVal d +