基础问题求教,关于用地址取结构体数据

ybblack001 2015-12-04 11:21:07
请教如下面的结构体 注释是自己算的偏移 在XPx86下这么计算对吗?

typedef struct _SYSTEM_PROCESS_INFORMATION {
ULONG NextEntryOffset; //0x00
ULONG NumberOfThreads; //0x04
LARGE_INTEGER SpareLi1; //0x08
LARGE_INTEGER SpareLi2; //0x10
LARGE_INTEGER SpareLi3; //0x18
LARGE_INTEGER CreateTime; //0x20
LARGE_INTEGER UserTime; //0x28
LARGE_INTEGER KernelTime; //0x30
UNICODE_STRING ImageName; //0x38
……
}

如果对的话,下面两段是否等价呢? 其中 SystemInformation 就是 _SYSTEM_PROCESS_INFORMATION 结构体
PUNICODE_STRING pName = (PUNICODE_STRING)((DWORD)SystemInformation+ 0x38);
DbgPrint("%wZ/n",pName);


DbgPrint("%wZ/n",&(pCurrProcessInfo->ImageName));


我现在用下面的可以得到正确结果,但是用面的代码就不行
...全文
158 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ybblack001 2015-12-04
  • 打赏
  • 举报
回复
引用 2 楼 TheOne_jie 的回复:
LARGE_INTEGER为64位整数
typedef struct _SYSTEM_PROCESS_INFORMATION {
        ULONG NextEntryOffset;                   //0x00
        ULONG NumberOfThreads;                   //0x04
        LARGE_INTEGER SpareLi1;                  //0x08
        LARGE_INTEGER SpareLi2;                  //0x16
        LARGE_INTEGER SpareLi3;                  //0x24
        LARGE_INTEGER CreateTime;                //0x32
        LARGE_INTEGER UserTime;                  //0x40
        LARGE_INTEGER KernelTime;                //0x48
        UNICODE_STRING ImageName;                //0x56
               ……
}
可是将下面改成0x56依然不对 还是蓝屏
BurnellLiu 2015-12-04
  • 打赏
  • 举报
回复
LARGE_INTEGER为64位整数
typedef struct _SYSTEM_PROCESS_INFORMATION {
        ULONG NextEntryOffset;                   //0x00
        ULONG NumberOfThreads;                   //0x04
        LARGE_INTEGER SpareLi1;                  //0x08
        LARGE_INTEGER SpareLi2;                  //0x16
        LARGE_INTEGER SpareLi3;                  //0x24
        LARGE_INTEGER CreateTime;                //0x32
        LARGE_INTEGER UserTime;                  //0x40
        LARGE_INTEGER KernelTime;                //0x48
        UNICODE_STRING ImageName;                //0x56
               ……
}
赵4老师 2015-12-04
  • 打赏
  • 举报
回复
仅供参考:
#include <stdio.h>
#define field_offset(s,f) (int)(&(((struct s *)(0))->f))
struct AD  { int a; char b[13]; double c;};
#pragma pack(push)
#pragma pack(1)
struct A1  { int a; char b[13]; double c;};
#pragma pack(2)
struct A2  { int a; char b[13]; double c;};
#pragma pack(4)
struct A4  { int a; char b[13]; double c;};
#pragma pack(8)
struct A8  { int a; char b[13]; double c;};
#pragma pack(16)
struct A16 { int a; char b[13]; double c;};
#pragma pack(pop)
int main() {
    printf("AD.a %d\n",field_offset(AD,a));
    printf("AD.b %d\n",field_offset(AD,b));
    printf("AD.c %d\n",field_offset(AD,c));
    printf("\n");
    printf("A1.a %d\n",field_offset(A1,a));
    printf("A1.b %d\n",field_offset(A1,b));
    printf("A1.c %d\n",field_offset(A1,c));
    printf("\n");
    printf("A2.a %d\n",field_offset(A2,a));
    printf("A2.b %d\n",field_offset(A2,b));
    printf("A2.c %d\n",field_offset(A2,c));
    printf("\n");
    printf("A4.a %d\n",field_offset(A4,a));
    printf("A4.b %d\n",field_offset(A4,b));
    printf("A4.c %d\n",field_offset(A4,c));
    printf("\n");
    printf("A8.a %d\n",field_offset(A8,a));
    printf("A8.b %d\n",field_offset(A8,b));
    printf("A8.c %d\n",field_offset(A8,c));
    printf("\n");
    printf("A16.a %d\n",field_offset(A16,a));
    printf("A16.b %d\n",field_offset(A16,b));
    printf("A16.c %d\n",field_offset(A16,c));
    printf("\n");
    return 0;
}
//AD.a 0
//AD.b 4
//AD.c 24
//
//A1.a 0
//A1.b 4
//A1.c 17
//
//A2.a 0
//A2.b 4
//A2.c 18
//
//A4.a 0
//A4.b 4
//A4.c 20
//
//A8.a 0
//A8.b 4
//A8.c 24
//
//A16.a 0
//A16.b 4
//A16.c 24
//
//
ybblack001 2015-12-04
  • 打赏
  • 举报
回复
晕,自己解决了。 偏移是0x38没错

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧