首页
社区
课程
招聘
[原创]汇编写驱动——字符串的一些问题
发表于: 2011-3-24 17:24 7143

[原创]汇编写驱动——字符串的一些问题

2011-3-24 17:24
7143

刚开始学汇编写驱动时,最开始遇到的问题就是关于字符串的,因此和大家分享一下经验。
1.如何用汇编实现KdPrint  
    用C写驱动时,估计都比较喜欢用自定义的宏函数KdPrint来替代DbgPrint。用C的宏定义来很简单,但是用汇编的宏指令就要麻烦一点。
汇编版的KdPrint
KdPrint macro Format,ParamList:VARARG
   ifdef Release
      EXITM
   endif   
   FOR Param,<ParamList>
           push Param
   ENDM
   push Format
   call DbgPrint
endm
    这个宏函数其实可以改进一下,由于DbgPrint是C调用函数,我比较懒,不喜欢自己平衡堆栈,因此我有做了这样的改进。
KdPrintSafe macro Format,ParamList:VARARG
LOCAL Count

   ifdef Release
      EXITM
   endif   
   
   Count=0
   FOR Param,<ParamList>
           push Param
           Count=Count+1
   ENDM
   push Format
   call DbgPrint
   Count=(Count+1)*4
   add  esp,Count
endm

2.汇编如何使用宽字符的问题
    win32汇编中,我们比较习惯使用ASCII码,然而在驱动中避免不了使用Unicode。
   关于宽字符的问题,直接使用masm32/macro/ucmacro.asm里的两个宏,就可以了。但是驱动中,还有使用UNICODE_STRING的问题。

(以下引自KdmTut)
  UNICODE_STRING结构和里面的字符串数据,如果你不喜欢使用宏,那么可以用下面的常规方法:
   usz dw 'U', 'n', 'i', 'c', 'o', 'd', 'e', ' ', 's', 't', 'r', 'i', 'n', 'g', 0
    us UNICODE_STRING {sizeof usz - 2, sizeof usz, offset usz}
   但是我可不喜欢这么麻烦,所以我写了下面这些宏:COUNTED_UNICODE_STRING、$COUNTED_UNICODE_STRING、CCOUNTED_UNICODE_STRING和$CCOUNTED_UNICODE_STRING(定义在masm32\Macros\Strings.mac中)。

   
   有一点我要对KdmTut进行补充,类似usz dw 'U', 'n', 'i', 'c', 'o', 'd', 'e', ' ', 's', 't', 'r', 'i', 'n', 'g', 0这样的形式,还是有用的,因为这些宏还不支持中文。
  至于这些宏的用法,请看我的下一篇文章http://bbs.pediy.com/showthread.php?t=131332


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 7
支持
分享
最新回复 (8)
雪    币: 18
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
关注一个,呵呵呵呵呵呵
2011-3-24 21:42
0
雪    币: 216
活跃值: (144)
能力值: ( LV10,RANK:160 )
在线值:
发帖
回帖
粉丝
3
开始学习驱动的时候也有过这样的困惑,现在已经习惯了~
2011-3-24 22:50
0
雪    币: 437
活跃值: (110)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
4
学习了
2011-3-25 06:15
0
雪    币: 220
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
呵呵 慢慢会习惯的
2011-3-25 18:01
0
雪    币: 16
活跃值: (100)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
苍天啊,上帝啊,这个即然也加精

直接把 KmdTut - 内核模式驱动程序的汇编教程(指南)(Kernel Mode Driver development Tutorial for assembly language programmers)  全贴出来算了
2011-3-25 20:48
0
雪    币: 431
活跃值: (259)
能力值: ( LV9,RANK:230 )
在线值:
发帖
回帖
粉丝
7
第一,KmdTut若是完美无缺,我就不费力了
第二,凡是KmdTut的部分我都标记了,而且提出我的见解。本人的原创也占了相当的部分,比如本章的汇编版KdPrint。
第三,我和KmdTut不同在于,KmdTut是完全基于使用汇编角度写的教程,我的比较照顾到有C写驱动基础的人
第四,这篇只被评了“优秀”,而不是“精华”,鉴于这篇比较短,我认为是很恰当地。毕竟写这个方面文章的人很少,沾点便宜也无可厚非。
2011-3-26 20:55
0
雪    币: 349
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
支持楼主.....
2011-3-28 10:21
0
雪    币: 6976
活跃值: (1482)
能力值: ( LV11,RANK:180 )
在线值:
发帖
回帖
粉丝
9
楼主写的这个很不错哦, 我觉得目前国内关于用汇编写驱动的教程还是偏少... 应该多多出教程才对
2011-3-28 17:07
0
游客
登录 | 注册 方可回帖
返回
//