首页
社区
课程
招聘
[求助]为什么同样的服务描述表地址输出的数值不同呢
发表于: 2010-12-6 11:34 3860

[求助]为什么同样的服务描述表地址输出的数值不同呢

2010-12-6 11:34
3860
有如下声明:

#include "ntddk.h"

#pragma pack(1)
typedef struct ServiceDescriptorEntry
{
    unsigned int *ServiceTableBase;
    unsigned int *ServiceCounterTableBase; //Used only in checked build
    unsigned int NumberOfServices;
    unsigned char *ParamTableBase;
} SSDTEntry;
__declspec(dllimport)  SSDTEntry KeServiceDescriptorTable;

#pragma pack()


然后我在入口函数里面打印数值

    ULONG pointer = 0 ;
    __asm int 3
    DbgPrint("KeServiceDescriptorTable:%x\r\n",KeServiceDescriptorTable);
        __asm
        {
                pushad
                   mov  eax , KeServiceDescriptorTable
                   mov  pointer,eax
                popad
        }
       DbgPrint("second:%x\r\n",pointer);


output:

KeServiceDescriptorTable:80505450
second:8055d700

补充一下: 8055d700这个地址里面保存的是80505450这个数字

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

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 161
活跃值: (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
gog
2
好像是指针和值没分清楚
2010-12-6 11:45
0
雪    币: 275
活跃值: (55)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
DbgPrint("KeServiceDescriptorTable:%x\r\n",KeServiceDescriptorTable);
这种格式化输出都是打印出变量的值的;
而用汇编把该变量的地址传入pointer,所以打印出的是地址……
2010-12-6 11:53
0
雪    币: 2
活跃值: (199)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
mov  eax , KeServiceDescriptorTable

这个是赋值(值传递)吧

lea eax,KeServiceDescriptorTable

这个才是取他的地址(排除lea也可以实现mov功能的情况)

不过这个KeServiceDescriptorTable不是个简单变量啊。。。

难道编译器还可以自动识别什么的么?
2010-12-6 12:34
0
游客
登录 | 注册 方可回帖
返回
//