首页
社区
课程
招聘
[旧帖] [求助]在线性地址空间中搜索API,关于页面对齐问题 0.00雪花
发表于: 2009-7-15 18:58 3553

[旧帖] [求助]在线性地址空间中搜索API,关于页面对齐问题 0.00雪花

2009-7-15 18:58
3553
一个页面是4k,就是0x1000;
我觉得应该是把最后12位和0与就可以了。
比如0x12345678,与后就变成0x12345000;
比如0xfffff000 & address
但是罗云彬老大那书上讲的是 0xffff0000 & address,
却是最后16位与。到底哪出问题了?我理解错了还是哪里出问题了?

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

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 254
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
上网搜了下,都是用and ,ax 0f000的,

楼主有没眼花?
2009-7-15 21:55
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
; 查找 Kernel32.dll 的基地址

;********************************************************************

                    mov     edi,_dwKernelRet

                    and     edi,0ffff0000h

                    .while  TRUE

                            .if     word ptr [edi] == IMAGE_DOS_SIGNATURE

                                    mov     esi,edi

                                    add     esi,[esi+003ch]

                                    .if word ptr [esi] == IMAGE_NT_SIGNATURE

                                            mov     @dwReturn,edi

                                            .break

                                    .endif

                            .endif

                            _PageError:

                            sub     edi,010000h

            .               break   .if edi < 070000000h

                    .endw

                    pop     fs:[0]

                    add     esp,0ch

                    popad

                    mov     eax,@dwReturn

                    ret

_GetKernelBase  endp

这是罗老大书上的例子
2009-7-15 22:17
0
雪    币: 254
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
搜索下google嘛,我刚刚搜索了,
原来是windows加载dll是64k对齐的
2009-7-15 22:42
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
哪本书上有讲的?我怎么一点印像也没有?我记得节表里全是按4k对齐的。
2009-7-16 20:20
0
雪    币: 254
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
节表是,不过dll加载的基址不是。。

病毒专题里面也有,你找下吧
2009-7-16 23:23
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
文件中的_GetKernelBase子程序的参数是主程序从堆栈中得到的返回地址,程序首先设置一个SEH异常处理子程序,以免在搜寻内存的过程中访问到无效的页面后出错;接下来将参数中传递过来的目标地址按页对齐(与0ffff0000h进行and操作);然后以每次一个页的间隔在内存中寻找DOS MZ文件头标识和PE文件头标识,如果找到的话,表示这个页的起始地址就是Kernel32.dll模块的基址。

罗老大再版的书不知道改了这些问题了没。
这些话误导了我,现在明白了。谢谢楼上。
2009-7-17 10:06
0
游客
登录 | 注册 方可回帖
返回
//