zgyknight
驱动牛犊
驱动牛犊
  • 注册日期2010-02-07
  • 最后登录2011-08-06
  • 粉丝0
  • 关注0
  • 积分12分
  • 威望91点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2705回复:1

为什么相同的标识符两次取地址 结果不同呢?

楼主#
更多 发布于:2010-12-06 13:32
有如下声明:

#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这个数字

为什么?
这个人很勤快 什么都没有留下
znsoft
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2023-10-25
  • 粉丝300
  • 关注6
  • 积分910分
  • 威望14796点
  • 贡献值7点
  • 好评度2410点
  • 原创分5分
  • 专家分100分
  • 社区居民
  • 最爱沙发
  • 社区明星
沙发#
发布于:2010-12-07 07:53
KeServiceDescriptorTable 这个你直接访问内核导出的全局量即可。
http://www.zndev.com 免费源码交换网 ----------------------------- 软件创造价值,驱动提供力量! 淡泊以明志,宁静以致远。 ---------------------------------- 勤用搜索,多查资料,先搜再问。
游客

返回顶部