阅读:1371回复:11
高手请进!
本人想读取某一特定物理地址的内存,如0x1b,使用内联汇编,下面的做法编译时报错,做法如下:
unsigned int base; _asm{ PUSH DS PUSH EBX XOR DS,DS MOV EBX, 1BH MOV DWORD PTR base, DS:[EBX] POP EBX POP DS } 出错提示信息: Compiling - a.cpp for i386 a.cpp(95) : error C2415: improper operand type a.cpp(97) : error C2415: improper operand type BUILD: Compile errors: not linking d:\work\process directory BUILD: Done 95行的位置是MOV EBX, 1BH |
|
最新喜欢:![]() |
沙发#
发布于:2005-01-27 10:26
做法哪里出问题了,高手请指正!!
|
|
板凳#
发布于:2005-01-27 11:08
操作类型不匹配,就这两行:
XOR DS,DS MOV DWORD PTR base, DS:[EBX] 注销了就没错误了,你看看能不能用别的寄存器来调整一下。 |
|
|
地板#
发布于:2005-01-27 11:45
_asm{
PUSH DS PUSH EBX XOR EBX,EBX MOV DS,BX MOV EBX, 1BH MOV DWORD PTR base, DS:[EBX] POP EBX POP DS } |
|
|
地下室#
发布于:2005-01-27 11:56
MOV DWORD PTR base, DS:[EBX]
改成 MOV base, DWORD PTR DS:[EBX] |
|
|
5楼#
发布于:2005-01-27 12:05
_asm{ 对了,我粗心,毕竟是大牢,对了XOR DS, DS无这条指令。8086汇编上都是,xor ax, ax mov ds,ax 没错 |
|
|
6楼#
发布于:2005-01-27 13:51
谢谢各位,但是我就是想访问物理地址是0x1b内存,该怎么做
|
|
7楼#
发布于:2005-01-27 13:55
_asm{
push ds push eax xor eax,eax mov ds,eax mov eax,27 mov base,eax pop eax pop ds } 还是不对 |
|
8楼#
发布于:2005-01-27 13:59
好了,谢谢各位,都有分
|
|
9楼#
发布于:2005-01-27 15:41
确保你在DOS的16位下
USHORT base; _asm{ push ds push ax xor ax,ax mov ds,ax mov ax,27 mov base, word ptr ds:[ax] pop ax pop ds } |
|
|
10楼#
发布于:2005-01-27 16:04
确保你在DOS的16位下 Windows下需要找一个空闲段描述符,自己加入一个段描述符,直接作线性地址一对一映射到物理地址,然后将该描述符对应的索引装入段寄存器,就可以访问了。 离题的问题: wowocock,看来您也是从DOS年代过来的,现在年纪几何?说不定,咱俩差不多 |
|
|
11楼#
发布于:2005-02-17 10:49
如果在WINDOWS下用驱动访问物理地址是0x1b的内存,该如何做,各位高手请赐教,不胜感激!
|
|