游戏基址是什么

游戏基址是什么,第1张

游戏基址即游戏中一个数值的内存所在地址

保持恒定的两部分内存地址的一部分并提供一个基准点,从这里可以计算一个字节数据的位置。基址伴随着一个加到基上的偏移值来确定信息准确的位置(绝对地址)。

这一概念与街道地址系统雷同。例如:“大街2010号”由基(大街2000街段)加上偏移值(从街段开始的10号)。在IBMPC和兼容机中的数据按其相对于由段开始的相对偏移位置被识别。

和地理没有关系,所以游戏基址可以推算出含义,修改游戏的基址,可以制作成为外挂。

实例句柄这个东西,MSDN说了,就是加载进程映像的基址,每个进程都是一样的,你得到其他的进程也在你自己的进程里用不了。比如,你建立任何一个进程,GetModuleHandle(NULL)函数返回的就是进程的实例句柄,一般都是0x400000(可能少写或多写了一个0)。所以,要得到一个进程的路径,只有一个方法,把自己的代码注入到目标进程的地址空间中,在被注入的代码中使用GetMoudleFileName(GetModuleHandle(NULL),szModPath,MAX_PATH)来得到这个进程的所在路径。

这就涉及到注入进程这个有意思的东西了。简单而易用的方法,就是用《Windows核心编程》中提到的方法,用创建远程线程来把自己的DLL注入到目标进程的方法来实现。创建远程线程用CreateRemoteThread(),很简单,与CreateThread()使用方法一样,只不过多出的第一个参数是目标进程句柄(记住,要有PROCESS_CREATE_THREAD权限),其他的参数,都要是在目标进程的地址空间中的。

基本的流程应该是:

用OpenProcess()函数打开目标进程,权限要有PROCESS_CREATE_THREAD,PROCESS_VM_READ,PROCESS_VM_WRITE。然后用VirtualAllocEx函数在目标进程中分配一个内存空间,这个空间要保存你的Dll文件的路径,然后用WriteProcessMemory把这个字符串写入,再用GetProcAddress得到LoadLibraryA函数的地址,当然得到的地址是自己进程地址空间中的地址,但一般情况下绝大部分进程的这个地址处都是同样的LoadLibraryA函数。利用得到的在目标进程中分配的内存的地址及LoadLibraryA函数,就可以利用创建远程线程的方法把自己的DLL文件注入进去。

只有把自己的代码注入到目标进程中,你才可能利用GetModuleFileName函数得到目标进程的路径。当然这个工作是由已经注入到目标进程中的DLL来做。

注意基变址寻址方式一般用于字符串或数组的处理,

就是为了方便。

比如比如你要寻找一个整形数组的第三个元素,8A660是第一个元素的地址,你用8000(sp)+A660(base)+42(index)就可以找到第三个元素,其实没什么,就是为了方便。

这明显是dll里的一个基址。

简单说就是dll里的一个全局变量。但是要注意的一点是,dll里的模块基址可能会变的,这就导致了你说的情况。

这里,你可以计算出这个变量到模块基址的偏移,这个值是不会变的,再用它加这次打开游戏时coreclientdll的模块基址,就可以得到具体的地址。

写程序的话,你直接可以用Win32API得到模块加载时的基址。

另外说一句,看看汇编和OD吧。。。这么玩是玩不转的,局限性太大。

分类: 电脑/网络 >> 程序设计 >> 其他编程语言

问题描述:

什么是基址和变址?以及基址寄存器BX和变址寄存器(SI和DI),他们存放的地址有什么不同?先谢谢了!!

解析:

基址是存放在基址寄存器中的内容,为有效地址中基址部分。基址只能是BX和BP,其默认匹配的段寄存器分别是DS和SS。

变址是存放在变址寄存器中的内容,它通常用来访问数组中的某个元素或字符串中的字符。

我觉得无需要去理解的那么深奥, 你编程的时候这些都是自动存在的,写游戏的人自己都没去了解。 00400000 是c++默认的,你可以在选项里改这个地址。 你在写程序的时候, 会写很多函数, 也会设置一些变量。 如果你要写个外挂来挂你的程序,那么你读出某个变量的值,就是你的基址+偏移, 如果你要call 你的函数, 那么call的地址,就是某个函数的首地址, 他也是基地址+便宜出来的。 如果你的游戏是一个exe文件, 那么这些多是固定的, 游戏不更新是不会变的。 但如果你dll ,就需要取dll的基地址加偏移了。 因为dll是动态装载,每次基地址不一样, 就是所谓的 00400000 不一样。 不知道你明白一些没,但我的意思是了解过程就好了,有的东西需要慢慢的任其自然去了解, 如果过程中能了解那是好事,但为了了解 完全去了解并不重要。 现在开发dvd的多半不会去研究电子元器件。 都说买个主板,买个芯片的。 如果真有那样的人, 那就是用高级语言编程,然后反汇编, 最终去仔细看汇编。。。再 0101000001 返璞归真啊。。。

aiyy520女装货源 aiyy520女装批发 aiyy520女装代理

 aiyy520女装商城

以上内容由aiyy520com 女装商城 女装官网提供

VB?好像要用API这是模块Public Declare Function WriteProcessMemory Lib "kernel32" (ByValhProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long

Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Public Declare Function ClientToScreen Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long

Public Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long

Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long

Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long

Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Long, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long

Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Any) As Long

Public Const WM_SETHOTKEY = &H32

Public Const WM_LBUTTONDOWN = &H201

Public Const WM_LBUTTONUP = &H202

Public Const WM_RBUTTONDOWN = &H204

Public Const WM_RBUTTONUP = &H205

Public Const PROCESS_ALL_ACCESS = &H1F0FFF

Public Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long

Public Const SW_RESTORE = 9

Public Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long

Public Declare Function IsIconic Lib "user32" (ByVal hwnd As Long) As Long

Public Declare Function GetForegroundWindow Lib "user32" () As Long

以上就是关于游戏基址是什么全部的内容,包括:游戏基址是什么、如何通过一个程序的进程来获取该程序的可执行文件的路径、什么是基址和变址(在汇编语言中)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9630353.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存