0
我想知道這些代碼行背後的數學。處理指針。在if語句中,有人能夠通過與+運算符和&位運算符的數學來引導我嗎?我不明白這一點。使用按位運算符的PE文件格式指針
// 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);
雅,我在說明書注意到這些值:0000 0000 0000 0000 0000 0000 0000 0010(IMAGE_FILE_EXECUTABLE_IMAGE) 0000 0000 0000 0000 0010 0000 0000 0000(IMAGE_FILE_DLL) ------------ ---------------------------- –
+1和邊欄,當執行指針差異時,情況正好相反(並且很少提及) 。如果兩個相同類型的指針有差別(減),即'size_t n =(p-q);'其中p和q是兩個相同類型的指針,結果是它們之間的*類型對象*的數量;不是*字節數*(除非類型*是* char或unsigned char,那麼)。有時這可能會非常方便。 – WhozCraig
@WhozCraig:好點。 – cdarke