阅读:1956回复:15
WDM驱动程序中添加汇编模块
我用98DDK 编制一个win98/2k的驱动程序
我已经有了大块的汇编模块,请哪位不吝赐教,怎样进行编译。 谢谢了。 :) |
|
最新喜欢:![]() |
沙发#
发布于:2002-02-26 17:01
再详细一点
汇编程序编译出的OBJ文件,怎样Link到 .sys文件中? |
|
板凳#
发布于:2002-02-27 10:51
在Project setting->Link->Object/Library module里加上obj文件的文件名应该以了。
|
|
|
地板#
发布于:2002-02-27 11:35
谢谢archim!
我编译的是设备驱动程序(wdm)。 98DDK 中的build 怎样用才能将obj文件编译到sys文件中。 |
|
地下室#
发布于:2002-02-27 12:33
修改source文件
|
|
|
5楼#
发布于:2002-02-27 12:43
能告知怎样修改吗?
|
|
6楼#
发布于:2002-02-27 16:04
能告知怎样修改吗? 在sources文件里加入如下: i386_SOURCES= yourasm1.asm \\ yourasm2.asm ............. 然后,在当前目录下建立一个文件夹,其名为:i386,将所有的asm文件放入此文件夹下(这些文件应该是加入到sources里面的i386_SOURCES后的一些文件)。 |
|
7楼#
发布于:2002-02-27 17:50
我按你所述,好象myfile.asm根本未编译成myfile.obj
在编译中出现 error LNK2001: unresolved external symbol _InitProcArg@0 (InitProcArg是汇编程序中的功能调用) 该怎么办? |
|
8楼#
发布于:2002-02-28 10:13
我这么做已经用在好几个driver里了,从没有出现你所说的编译问题,生成的.obj文件在objchk(objfre)\\i386目录下,你能给出你的sources文件吗?如果.obj文件没被生成,你就能看到一条错误信息:NMAKE : U1073: don\'t know how to make \'objchk\\i386\\addproc.obj\'(addproc.obj 是我的asm文件遍译的.obj文件)。根据你的出错信息,你的.obj已经遍译成功(如果obj文件编译不成功,不会继续给你提示),出错在你的asm文件与调用的c文件。
根据我的经验,错在你的调用规则,如果你的asm定义为stdcall调用,那么你的在调用此asm的function时,你的调用规则应为stdcall,wdm的调用规则为stdcall. .386 .model flat,stdcall .code initProc proc a:dword,b:dword ............ ret 8 initProc endp end 这是我的asm文件的一个proc的头尾 |
|
9楼#
发布于:2002-02-28 11:51
感谢Dazzy!
我的source文件: TARGETNAME=Test TARGETTYPE=DRIVER DRIVERTYPE=WDM TARGETPATH=OBJ INCLUDES=$(BASEDIR)\\inc; SOURCES=init.cpp \\ dispatch.cpp \\ pnp.cpp \\ Test.rc i386_SOURCE=hdtest.asm NTTARGETFILES=PostBuildSteps hdtest.asm内容 .586p .387 .model flat, stdcall option casemap :none .data InitProcArgRetnFlag dd 0 .code InitProcArg proc near ...... InitProcArg endp END dispatch.cpp中调用该函数 ... InitProcArg(); ... 执行build后,我查遍了整个路径,未发现hetest.obj 编译过程未出现错误信息,但一调用就出现 error LNK2001: unresolved external symbol _InitProcArg@0 顺便问一下,用masm编译出的obj文件,能直接使用吗? 麻烦再帮我看看吧 |
|
10楼#
发布于:2002-02-28 12:34
感谢Dazzy! 兄弟,看清楚点,是i386_SOURCES=hdtest.asm,而不是i386_SOURCE=hdtest.asm |
|
11楼#
发布于:2002-02-28 13:03
确实是看错了!
我已解决问题! 感谢!感谢! |
|
12楼#
发布于:2002-02-28 13:06
Dazzy 怎么给分?
|
|
13楼#
发布于:2002-02-28 13:22
Dazzy 怎么给分? 你启的第一个贴子下面的给分按钮即是! |
|
14楼#
发布于:2002-02-28 13:39
新问题
我在wdm的汇编程序中申请了一块内存 1.该内存在pageble memory or non-pageble memory,若在pageble memory,有无办法使其位于non-pageble memory? 2.该内存怎样能被app读写? 3.我试过了论坛的关于共享内存的例子,我在使用MmGetPhysicalAddress函数时,老出现Link错误(我已将MmGetPhysicalAddress的声明从ntddk.h搬到自己的头文件中,我用的是论坛提供的例程),请指点迷津。 |
|
15楼#
发布于:2002-02-28 15:26
新问题 1.没试过,不知道! 2.论坛有大量的代码。 3.MmGetPhysicalAddress在link时lib为ntoskrnl.lib 你的sources文件加入一行: TARGETLIBS=$(BASEDIR)\\libchk\\$(CPU)\\ntoskrnl.lib |
|