游戏开发论坛

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: iori8421

关于vb读取内存指针的问题-汇编代码的读取

[复制链接]

1

主题

86

帖子

86

积分

注册会员

Rank: 2

积分
86
发表于 2006-5-10 08:34:00 | 显示全部楼层

Re:关于vb读取内存指针的问题-汇编代码的读取

想修改另一个进程的内存数据,好像也不一定要用DLL吧。我看到国外有些游戏修改工具就一个EXE文件就能解决。
可能有些API就能修改了吧。

10

主题

62

帖子

68

积分

注册会员

Rank: 2

积分
68
发表于 2006-5-10 08:54:00 | 显示全部楼层

Re:关于vb读取内存指针的问题-汇编代码的读取

用ReadProcessMemory、WriteProcessMemory可以访问另一进程的内存数据

但是楼主好像是在写一个汇编的反编译器

10

主题

62

帖子

68

积分

注册会员

Rank: 2

积分
68
发表于 2006-5-10 09:10:00 | 显示全部楼层

Re: 关于vb读取内存指针的问题-汇编代码的读取

004288a0 move 〔esi+00000632) edx

简单的说就是这个位置是我找到的一个游戏的内存指针的汇编代码。

现在我想用vb来读取这个位置的数据,也就是说用vb读取这个游戏内存中机器吗地址004288a0 的esi的值!


明白了
是在那个进程的004288a0地址暂停,然后读取esi寄存器的值

用CreateProcess创建目标进程时注意加上DEBUG_PROCESS标志来调试进程
用ReadProcessMemory读取该进程004288a0地址的那个字节,保存在一个Byte变量中
用WriteProcessMemory在该进程004288a0地址写入一字节CCh,它是断点指令的机器码
开始调试循环,等待004288a0地址的断点
现在目标进程在004288a0地址遇到断点指令,暂停
用GetThreadContext取得(目标进程)当前线程的寄存器堆,这样得到esi的值
恢复该进程004288a0地址的数据,使程序继续执行(或着你想用TerminateProcess结束进程)


这些东西其实不难(前提是你懂Win32汇编),主要是一般人不知道调试API的存在
由于存在调试API,所以任何能够调用Win32 API的编程工具都能写调试程序

详细内容请参考:
1.MSDN中关于调试API的说明
2.罗云彬的《Windows环境下32位汇编语言程序设计》
3.Jetfrey Richter的《Windows核心编程(Programming Applications for Microsoft Windows Fourth Editio)》
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-24 12:53

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表