首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PE/COFF符号类型字段

PE/COFF符号类型字段
EN

Stack Overflow用户
提问于 2014-02-02 02:48:39
回答 1查看 314关注 0票数 3

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

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

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

我遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-02 06:15:36

查看winnt.h以获得以下行:

代码语言:javascript
复制
// 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 = 2),返回IMAGE_SYM_TYPE_NULL的基类型(LS nibble = 0)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21506442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档