首页
社区
课程
招聘
[求助]关于动态获取API地址的疑惑
发表于: 2012-2-2 16:54 2979

[求助]关于动态获取API地址的疑惑

2012-2-2 16:54
2979
以下罗云彬老师《Win32汇编程序设计》第17章中动态获取API入口地址的代码(节选),这段代码是根据返回地址_dwKernelRet找到Kernel32.dll的文件头。
;**************************************************************
; 查找Kernel32.dll的基地址
;**************************************************************
mov        edi,_dwKernelRet
and        edi,0ffff0000h
.while        TRUE
        .if        word ptr [edi] == IMAGE_DOS_SIGNATURE
                mov        esi,edi
                add        esi,[esi + 003ch] ;指向PE文件头的指针地址
                .if        word ptr [esi] == IMAGE_NT_SIGNATURE
                        mov        @dwReturn,edi
                        .break
                .endif
        .endif
_PageError:
        sub        edi,010000h
        .break        .if edi < 70000000h
.endw
问题1:根据PE文件的知识,在内存中的节是按照页来对齐的(4KB),为什么这里要用0FFFF0000h来对齐,而不是0FFFFF000h来对齐?
问题2:同上,为什么是sub edi,010000h,这里不是01000h,因为4KB=1000H
问题3:为什么终止循环的条件是edi <70000000h?而不是小于其他数值呢?

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 434
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
pe文件被装入内存时按64k对齐(可用调试器查看)
这样做寻址更加方便 系统运行的更快

kernel32.dll系统重要dll 进程创建首批被映射
通常基址不会低于70000000h
2012-2-3 10:05
0
雪    币: 22
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
问题1: 用户态最高的 10000h 是禁止进入的,就好像用户态最低的10000h是null指针区
            《windows核心编程》有说
2012-2-3 10:33
0
雪    币: 166
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
感谢2楼的回答!
2012-2-3 14:49
0
游客
登录 | 注册 方可回帖
返回
//