gpt4 book ai didi

windows - PE/COFF 符号类型字段

转载 作者:可可西里 更新时间:2023-11-01 09:20:27 26 4
gpt4 key购买 nike

Microsoft 的 PE/COFF 文档提到符号表中的类型字段:

“最高有效字节指定该符号是指向 LSB 中指定的基类型的指针、函数返回还是数组。Microsoft 工具仅使用此字段来指示该符号是否为函数,因此类型字段的唯一两个结果值是 0x0 和 0x20。”

但是,文档和 winnt.h 都指定 IMAGE_SYM_DTYPE_FUNCTION = 2,而不是 0x20。即使这被认为是 MSB 的值,也会给出整个字段的值 0x200,而不是 0x20。

我错过了什么?

最佳答案

检查 winnt.h 中的以下几行:

// type packing constants

#define N_BTMASK 0x000F
#define N_TMASK 0x0030
#define N_TMASK1 0x00C0
#define N_TMASK2 0x00F0
#define N_BTSHFT 4
#define N_TSHIFT 2
// MACROS

// Basic Type of x
#define BTYPE(x) ((x) & N_BTMASK)

// Is x a pointer?
#ifndef ISPTR
#define ISPTR(x) (((x) & N_TMASK) == (IMAGE_SYM_DTYPE_POINTER << N_BTSHFT))
#endif

// Is x a function?
#ifndef ISFCN
#define ISFCN(x) (((x) & N_TMASK) == (IMAGE_SYM_DTYPE_FUNCTION << N_BTSHFT))
#endif

所以官方的 MSB、LSB 描述似乎是错误的——它们不是字节而是半字节。所以 0x20 将是​​一个函数 (MS nibble = 2) 返回基类型 IMAGE_SYM_TYPE_NULL (LS nibble = 0)。

关于windows - PE/COFF 符号类型字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21506442/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com