首页
社区
课程
招聘
[求助][求助]关于内核中的绝对跳转及编译后的函数
发表于: 2010-2-16 21:22 4231

[求助][求助]关于内核中的绝对跳转及编译后的函数

2010-2-16 21:22
4231
我想HOOK FindWindow,但是没有成功
My_FindWindow proc hwndParent:HANDLE , hwndChildAfter:HANDLE ,lpszClass:PWSTR , lpszWindow:PWSTR , dwType:DWORD
       
push 0bf8b128ch ;NtUserFindWindowEx
ret

My_FindWindow endp

编译后成了下面的样子:
push    offset win32k!NtUserFindWindowEx (bf8b128c)
leave
ret 14h
我想问两个问题,上面的代码为什么编译后会加上leave?
另外,能否直接用Jmp 0bf8b128ch 跳过去,但是怎么才能直接编译"Jmp 0bf8b128ch"?
想做个宏来处理:
MJMP macro Address
db 0e9h ,%(Address-$)
endm
但是没有成功,请指点下,谢谢了

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 97
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
用 retn 或者 MOV   JMP

硬编码会很难看的
2010-2-17 03:13
0
雪    币: 253
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
LEAVE指令只是恢复ESP和EBP寄存器之前存储的值,一般在函数的末尾添加!
如果使用硬编码的话,使用的平台就是固定的,如xp,2000不能通用!
2010-2-17 09:04
0
雪    币: 101
活跃值: (144)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
谢谢各位的回答,
MJMP macro Address
db 0e9h
dd %(Address-$)
endm
这个可以用,但是:dd %($-Address)就不行了,有没有宏方面的资料让我参考一下?
2010-2-17 09:18
0
雪    币: 419
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
My_FindWindow:

这样就不会出现你说的指令
2010-2-17 13:43
0
雪    币: 101
活跃值: (144)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
已解决,实在没有办法,我只好写byte,自己构建JMP.
2010-2-17 14:23
0
游客
登录 | 注册 方可回帖
返回
//