注册 登录
编程论坛 C++教室

C++内存读写遇到的一个奇怪问题

chinayun 发布于 2023-06-18 18:00, 1102 次点击
   rax = 基址;//不行
    rax = startAddress + 0x213DB78;//可以
基址 rax startAddress 都是DWORD64 类型


这两行代码第一行是startAddress + 0x213DB78的实际值 假设为0x613DB78
第二行是模块起始地址+0x213DB78 实际值在dbg中显示为       0x613DB78

但是我使用基址不能读取到内存
使用startAddress + 0x213DB78就能正确读到内存
请问这个是为什么呢
6 回复
#2
rjsp2023-06-18 20:05
代码呢?否则没头没脑的,一无所知,无法回答呀。

你把 startAddress 的值输出来看看,不要信赖「实际值在dbg中显示为 0x613DB78 」。
#3
chinayun2023-06-18 21:08
回复 2楼 rjsp
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录

你好,发帖的时候想贴图片但是没有找到这个功能,所有值都是确认了的,statraddress是GetModuleInformation获取到的模块起始地址
#4
rjsp2023-06-18 22:23
贴的是图片,加上代码也不全。贴了等于白贴

你就老老实实的把 基址、startAddress + 0x213DB78 用printf输出看看
你用 printtoconsole 我也没法知道它是怎么写的。尤其是 %X 又说是 DWORD64 类型,这明显矛盾。
简单点 你直接写 if( 基址 == startAddress + 0x213DB78  ) puts("hello world"); 看看有没有输出
#5
chinayun2023-06-19 08:28
回复 4楼 rjsp
感谢回复:),我已经这么操作了,我发现了问题但是我不知道为什么会造成这样的结果,:(
只有本站会员才能查看附件,请 登录
#6
rjsp2023-06-19 16:56
证明你的 0x213DB78 错了呗,你这个 0x213DB78 本身就是根据错误的显示数值计算而来
你现在用正确的显示数值重新减一下
#7
chinayun2023-06-19 20:42
回复 6楼 rjsp
:)我对您的支持和建议感到非常感激。真的很幸运能够得到您的帮助,您的回答对我来说非常有价值,衷心感谢您的善意和慷慨!
我通过不断地调试输出找到了问题所在,因为我在读取内存的函数中错误的传递了读取长度,导致读取出来的地址过长,而且因为错误的调试方式才没有正确找到问题所在。
只有本站会员才能查看附件,请 登录
1