欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

Masm中调用ZwOpenSection时应该注意的问题 (1千字)

Masm中调用ZwOpenSection时应该注意的问题 (1千字)

用Masm调用ZwOpenSection时应该注意的问题
由于自己用Masm写的代码一直不能成功调用ZwOpenSection,总是返回80000002H错误,于是这几天一直在用S-ice跟踪自己的代码,从入口参数上来看,Masm编译的和VC编译的没什么区别,可是调用的结果却总是一个不成功,一个成功,于是只好跟踪到ntdll.dll的内部,看看是如何出的错,发现有两个需要注意的地方:
进入ntdll.dll后,跟踪一段时间(F8+F10),会遇到如下语句:
804C15FC:  TEST    BL,03
此时D ebx,可以发现EBX是指向obj_attr结构的指针,联系上下,得出该指针地址必须作4字节的对齐
然后还有一处:

8049AEEE:  TEST    CL,01
此时D ecx,可以发现此时ecx是指向unicode字符串"\Device\PhysicalMemory",联系上下,得出该指针地址必须作2字节的对齐
于是在ReadBios.asm里头作如下修改:
EVEN                        ;EVEN伪指令,2字节对齐
szPhyMemW        db     05Ch,000h,064h,000h,065h,000h,076h,000h,069h,000h,063h,000h
            db     065h,000h,05Ch,000h,070h,000h,068h,000h,079h,000h,073h,000h,069h,000h,063h,000h
            db     061h,000h,06Ch,000h,06Dh,000h,065h,000h,06Dh,000h,06Fh,000h,072h,000h,079h,000h
            db     23 dup (0)
ALIGN  4                    ;ALIGN伪指令,4字节对齐
obj_name        UNICODE_STRING    < >
添加这两个伪指令后,程序运行完全正常,可以正常调用ZwOpenSection打开物理内存对象。
由于以前从来没有看到过这个tips,Google也没有搜索到,故写作此文,希望能给使用ASM的朋友一点帮助,由于MS C++的编译器在背后帮我们完成了数据对齐的操作,所以,使用VC的朋友估计很难发现这个地方的毛病。

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功