首页
社区
课程
招聘
驱动中内联汇编
发表于: 2009-12-4 20:41 3288

驱动中内联汇编

2009-12-4 20:41
3288
如果在驱动中这样写一句话
__ASM jl      NtOpenProcess + 0x19
编译的时候就会提示
illegal short forward reference with offset
然后我改成这样
__ASM jl      offset NtOpenProcess + 0x19
还是照样提示,这样的问题要如何解决啊
注:我使用的是DDK

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

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 163
活跃值: (103)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
2
给点提示........给点提示......
2009-12-4 21:32
0
雪    币: 445
活跃值: (52)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
直接用寄存器跳转不就是了,这么麻烦~
2009-12-5 12:04
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
分页,看长跳还是短跳,你自己拿个PE来反汇编下,占的字节都不同,短跳占2个,长的站满5个,我不知道是为什么,但是就是这样做的
2009-12-5 13:43
0
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
lea eax,ntopenprocess
add eax,19
jl eax
2009-12-5 19:19
0
雪    币: 724
活跃值: (81)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
如果我没理解错, NtOpenProcess并不你驱动中实现的函数,而导入的系统函数, 此时NtOpenProcess是一个指针,而不是一个地址标签(label), jl 后面只能接地址标签。你的问题可以如下解决:
     __asm {
        ......
        jl onl
        ......
onl:
        mov eax,NtOpenProcess
        add eax,0x19
        jmp eax
    }
    这个方法有一个前提:eax对于NtOpenProcess+0x19处的代码来说是无用的,否则,你需要另选一个寄存器,如果找不到合适的,则需要使用全局变量,倒更简单一些:
2009-12-5 21:53
0
游客
登录 | 注册 方可回帖
返回
//