yiyiz
驱动小牛
驱动小牛
  • 注册日期2002-02-15
  • 最后登录2007-09-06
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望5点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
阅读:2346回复:14

如何在Visual C++的嵌入_asm{ }中调用VMMCall _MapPhysToLinear

楼主#
更多 发布于:2002-03-04 15:06
我在C++程序头部加入了
#include <C:\\98DDK\\inc\\win98\\vmm.inc>

想在C程序中调用VMMCall _MapPhysToLinear

我用
_asm{
     ..........

     VMMCall _MapPhysToLinear

     .......    

}


为何有如下错误信息

c:\\98ddk\\inc\\win98\\vmm.inc(2) : error C2146: syntax error : missing \';\' before identifier \'EQU\'
c:\\98ddk\\inc\\win98\\vmm.inc(2) : error C2501: \'ifndef\' : missing storage-class or type specifiers
c:\\98ddk\\inc\\win98\\vmm.inc(2) : fatal error C1004: unexpected end of file found
我该这么办???????

最新喜欢:

SnareSnare
Snare
驱动小牛
驱动小牛
  • 注册日期2002-01-31
  • 最后登录2002-08-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-03-04 16:42
系统运行级别不一样,你不可以调用vxd里的函数
我就是我,没什么可说的。
yiyiz
驱动小牛
驱动小牛
  • 注册日期2002-02-15
  • 最后登录2007-09-06
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望5点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-03-04 18:57
系统运行级别不一样,你不可以调用vxd里的函数
我忘了说我在之前已经切入零级了,再说出错分明是编译错误,我想编译器不会管你是不是在零级吧

 :P :P :P
流氓兔
驱动老牛
驱动老牛
  • 注册日期2001-06-27
  • 最后登录2005-02-28
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-03-04 20:15
yiyiz
那是汇编的头文件,VC应为*.h
DDK中有VMM。H的头文件你找一下。
我想你找到也没用!!!
你还是在你的ASM{...}加入:
INT 20
DB XXXXXXXX ;SEVER ID
不知道ID,用SOFTICE的VCALL _MapPhysToLinear
查看ID号!!!
_MapPhysToLinear的使用方发可查看DDK文档。
 

 :)
我是流氓!!!我怕谁!!! 不!!应该是我是老流氓!!!我怕谁!!![img]http://202.98.116.70:888/cgi-bin/newmov/bbs/attachment.cgi?forum=4&topic=25473&postno=1&type=.jpg[/img]
yiyiz
驱动小牛
驱动小牛
  • 注册日期2002-02-15
  • 最后登录2007-09-06
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望5点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-03-05 08:43

我早就试过了,但是不能解决如下问题:
我用的是
INT 20H
db 00h,01h,00h,6ch
但是编译器提示如下:
C:\\PROGRAM FILES\\MICROSOFT VISUAL STUDIO\\MyProjects\\FirstRing0\\Ring0.cpp(52) : error C2400: inline assembler syntax error in \'opcode\'; found \'constant\'
我该怎么办?
flyfox
驱动中牛
驱动中牛
  • 注册日期2001-04-05
  • 最后登录2012-08-03
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望22点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-03-05 09:34

我早就试过了,但是不能解决如下问题:
我用的是
INT 20H
db 00h,01h,00h,6ch

INT 改成小写,试试!
一剑西来,天外飞仙
yiyiz
驱动小牛
驱动小牛
  • 注册日期2002-02-15
  • 最后登录2007-09-06
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望5点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-03-05 11:00
我大写小写都试过了,编译错误毫无区别.
fracker
驱动太牛
驱动太牛
  • 注册日期2001-06-28
  • 最后登录2021-03-30
  • 粉丝0
  • 关注0
  • 积分219分
  • 威望81点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分1分
  • 社区居民
7楼#
发布于:2002-03-05 12:11
那改成 __asm {
          db 0cdh, 020h;
          db 00h,01h,00h,6ch;
       }呢?
这样应该没有问题吧?
        

          
flyfox
驱动中牛
驱动中牛
  • 注册日期2001-04-05
  • 最后登录2012-08-03
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望22点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-03-05 12:56
这样行么?
int 20h;nop;nop;nop;nop;
编译后,用UEDIT修改成00h,01h,00h,6ch
一剑西来,天外飞仙
yiyiz
驱动小牛
驱动小牛
  • 注册日期2002-02-15
  • 最后登录2007-09-06
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望5点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-03-05 14:07
这样行么?
int 20h;nop;nop;nop;nop;
编译后,用UEDIT修改成00h,01h,00h,6ch
 

谢谢flyfox:
可以解决编译问题,但总觉得有点旁门左道,所以允许我留10分给正道人士.
流氓兔
驱动老牛
驱动老牛
  • 注册日期2001-06-27
  • 最后登录2005-02-28
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-03-05 21:33
对不起我搞错了SOFTICE _MapPhysToLinear得到的是涵数首址TRW2000才是ID。
用SOFTICE得到的值CALL好了!
__asm
{
push edi
mov edi,XXXXXXXX ;softice得到的值
...     ;压参数
call edi
...   ;还原堆
我是流氓!!!我怕谁!!! 不!!应该是我是老流氓!!!我怕谁!!![img]http://202.98.116.70:888/cgi-bin/newmov/bbs/attachment.cgi?forum=4&topic=25473&postno=1&type=.jpg[/img]
chimian
驱动牛犊
驱动牛犊
  • 注册日期2002-02-10
  • 最后登录2002-04-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-03-06 21:23
\"killhs\" , 您这样调用是可行的. 不过, 在使用这种\"直接调用内存地址\"的方法前, 最好先检测一下操作系统版本. 不同操作系统, 内存中的情形不一定相同.
biszale
驱动牛犊
驱动牛犊
  • 注册日期2002-03-06
  • 最后登录2008-08-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望10点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-03-07 10:30
这个问题我以前也碰到过

我用 \"_emit\"来解决,具体的使用可参考MSDN。

#define mm_get_v _asm _emit 0x01  _asm _emit 0x00 _asm _emit 0x00 _asm _emit 0x00

_asm
{
int 20h
vmm_get_v
///////////vmm_get_cur_handle
}
yiyiz
驱动小牛
驱动小牛
  • 注册日期2002-02-15
  • 最后登录2007-09-06
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望5点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2002-03-07 12:34
楼上的朋友,到用户留言去取你该得的10分。
flyfox
驱动中牛
驱动中牛
  • 注册日期2001-04-05
  • 最后登录2012-08-03
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望22点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2002-03-07 16:26
这个问题我以前也碰到过

我用 \"_emit\"来解决,具体的使用可参考MSDN。

#define mm_get_v _asm _emit 0x01  _asm _emit 0x00 _asm _emit 0x00 _asm _emit 0x00

_asm
{
int 20h
vmm_get_v
///////////vmm_get_cur_handle
}

高!我又学了一招!
一剑西来,天外飞仙
游客

返回顶部