首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用位运算符的PE文件格式指针

使用位运算符的PE文件格式指针
EN

Stack Overflow用户
提问于 2012-11-25 05:12:48
回答 1查看 284关注 0票数 0

我想知道这些代码行背后的数学原理。处理指针。有人能用if语句中的+运算符和&位运算符向我演示一下数学吗?我就是不太明白。

代码语言:javascript
复制
 // check signatures -- must be a PE
    pDosHeader = (PIMAGE_DOS_HEADER)hMap;
    if(pDosHeader->e_magic != IMAGE_DOS_SIGNATURE) goto cleanup;

    pNtHeaders = (PIMAGE_NT_HEADERS)((DWORD)hMap + pDosHeader->e_lfanew);
    if(pNtHeaders->Signature != IMAGE_NT_SIGNATURE) goto cleanup;

// Not dll
 if (pNtHeaders->FileHeader.Characteristics & IMAGE_FILE_DLL
  && pNtHeaders->FileHeader.Characteristics & IMAGE_FILE_EXECUTABLE_IMAGE) goto cleanup;

    // get last section's header...
    pSectionHeader = (PIMAGE_SECTION_HEADER)((DWORD)hMap + pDosHeader->e_lfanew + sizeof(IMAGE_NT_HEADERS));
    pSection = pSectionHeader;
 pSection += (pNtHeaders->FileHeader.NumberOfSections - 1);
EN

回答 1

Stack Overflow用户

发布于 2012-11-25 05:31:02

+运算符只是一个算术加号。当与指针一起使用时,它现在变得更清楚为什么C和C++中的指针是类型化的-它不仅向地址添加字节,而且添加它所指向的任何类型的大小。

例如,如果我们有:

代码语言:javascript
复制
struct stuff x;
struct stuff *p = &x;    /* p now points at x */
p = p + 1;
/* the address at p has been incremented by the sizeof(struct stuff), 
    and is pointing at the next struct stuff in memeory */

用作二元运算符的&是按位AND,它携带在两个操作数中设置的位。例如:

代码语言:javascript
复制
unsigned int b = 99;      /* 99 is binary 01100011 */
unsigned int w = b & 6;   /*  6 is binary 00000110 */
/* w is now 2                 2 is binary 00000010 */

在您的示例代码中,它看起来是用来测试是否在结构成员中设置了位掩码IMAGE_FILE_DLL和IMAGE_FILE_EXECUTABLE_IMAGE。

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

https://stackoverflow.com/questions/13545666

复制
相关文章

相似问题

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