VC的内联汇编为什么编译通过,程序运行的时候确又遇到问题需要关闭

如题所示,编译通过了,但是运行的时候,程序提示:DD。EXE遇到问题需要关闭,下面是代码:
DWORD hp;
_asm{
mov eax,0x0102e370 //内存基址
mov eax,[eax]
add eax,0x40
mov ecx,[eax]
mov hp,ecx
}
m_q1=hp;
坐等高人指点啊,不胜感激

第1个回答  2013-12-14
编译通过表示语法没有问题,并不表示程序能按照你想象的那样真确执行。至于出错的地方是不是一定是汇编这里的问题,需要你自己跟踪了,如果是这里出错那么就想办法解决了。这点代码似乎看不出什么问题。不过内存基址应该不是立即数,而是需要通过其他API来想办法获取吧,否则。。。
第2个回答  2013-12-14
简单说就是
((DWORD**)0x102e370)[0][16]
不可访问

p.s. 你这地址哪里来的?

编辑:刚刚C语言那个地方写错了。把你40当作十进制数了……追问

0102e370这个内存基址是用CE找出来的,在CE里可以看到这个地址偏移40后的数值变化,编译可以过,但是程序运行的时候就出错,不知道怎么回事

追答

那啥,每个进程都拥有自己独立的内存地址空间,一个虚拟内存地址(你在程序中用的都是虚拟内存地址),在不同的进程中,可以表示不同的物理内存地址。

如果你要访问的不是“当前进程”的内存,这样写是没有用的。

本回答被提问者采纳
相似回答
大家正在搜