亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? exedump.c

?? Windows 95 系統程式設計大奧秘書籍源碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
//==================================
// PEDUMP - Matt Pietrek 1995
// FILE: EXEDUMP.C
//==================================

#include <windows.h>
#include <stdio.h>
#pragma hdrstop
#include "common.h"
#include "extrnvar.h"

void DumpExeDebugDirectory(DWORD base, PIMAGE_NT_HEADERS pNTHeader)
{
    PIMAGE_DEBUG_DIRECTORY debugDir;
    PIMAGE_SECTION_HEADER header;
    DWORD offsetInto_rdata;
    DWORD va_debug_dir;
    DWORD size;
    
    // This line was so long that we had to break it up
    va_debug_dir = pNTHeader->OptionalHeader.
                        DataDirectory[IMAGE_DIRECTORY_ENTRY_DEBUG].
                        VirtualAddress;
    if ( va_debug_dir == 0 )
        return;

    // If we found a .debug section, and the debug directory is at the
    // beginning of this section, it looks like a Borland file
    header = GetSectionHeader(".debug", pNTHeader);
    if ( header && (header->VirtualAddress == va_debug_dir) )
    {
        debugDir = (PIMAGE_DEBUG_DIRECTORY)(header->PointerToRawData+base);
        size = pNTHeader->OptionalHeader.
                DataDirectory[IMAGE_DIRECTORY_ENTRY_DEBUG].Size *
                sizeof(IMAGE_DEBUG_DIRECTORY);
    }
    else    // Look for microsoft debug directory in the .rdata section
    {
        header = GetSectionHeader(".rdata", pNTHeader);
        if ( !header )
            return;

        size = pNTHeader->OptionalHeader.
                        DataDirectory[IMAGE_DIRECTORY_ENTRY_DEBUG].Size;
    
        offsetInto_rdata = va_debug_dir - header->VirtualAddress;
        debugDir = MakePtr(PIMAGE_DEBUG_DIRECTORY, base,
                            header->PointerToRawData + offsetInto_rdata);
    }

    DumpDebugDirectory( debugDir, size, base );
}

// Function prototype (necessary because two functions recurse)
void DumpResourceDirectory
(
    PIMAGE_RESOURCE_DIRECTORY resDir, DWORD resourceBase,
    DWORD level, DWORD resourceType
);

// The predefined resource types
char *SzResourceTypes[] = {
"???_0", "CURSOR", "BITMAP", "ICON", "MENU", "DIALOG", "STRING", "FONTDIR",
"FONT", "ACCELERATORS", "RCDATA", "MESSAGETABLE", "GROUP_CURSOR",
"???_13", "GROUP_ICON", "???_15", "VERSION"
};

// Get an ASCII string representing a resource type
void GetResourceTypeName(DWORD type, PSTR buffer, UINT cBytes)
{
    if ( type <= 16 )
        strncpy(buffer, SzResourceTypes[type], cBytes);
    else
        sprintf(buffer, "%X", type);
}

//
// If a resource entry has a string name (rather than an ID), go find
// the string and convert it from unicode to ascii.
//
void GetResourceNameFromId
(
    DWORD id, DWORD resourceBase, PSTR buffer, UINT cBytes
)
{
    PIMAGE_RESOURCE_DIR_STRING_U prdsu;

    // If it's a regular ID, just format it.
    if ( !(id & IMAGE_RESOURCE_NAME_IS_STRING) )
    {
        sprintf(buffer, "%X", id);
        return;
    }
    
    id &= 0x7FFFFFFF;
    prdsu = (PIMAGE_RESOURCE_DIR_STRING_U)(resourceBase + id);

    // prdsu->Length is the number of unicode characters
    WideCharToMultiByte(CP_ACP, 0, prdsu->NameString, prdsu->Length,
                        buffer, cBytes, 0, 0);
    buffer[ min(cBytes-1,prdsu->Length) ] = 0;  // Null terminate it!!!
}

//
// Dump the information about one resource directory entry.  If the
// entry is for a subdirectory, call the directory dumping routine
// instead of printing information in this routine.
//
void DumpResourceEntry
(
    PIMAGE_RESOURCE_DIRECTORY_ENTRY resDirEntry,
    DWORD resourceBase,
    DWORD level
)
{
    UINT i;
    char nameBuffer[128];
    PIMAGE_RESOURCE_DATA_ENTRY pResDataEntry;
    
    if ( resDirEntry->OffsetToData & IMAGE_RESOURCE_DATA_IS_DIRECTORY )
    {
        DumpResourceDirectory( (PIMAGE_RESOURCE_DIRECTORY)
            ((resDirEntry->OffsetToData & 0x7FFFFFFF) + resourceBase),
            resourceBase, level, resDirEntry->Name);
        return;
    }

    // Spit out the spacing for the level indentation
    for ( i=0; i < level; i++ )
        printf("    ");

    if ( resDirEntry->Name & IMAGE_RESOURCE_NAME_IS_STRING )
    {
        GetResourceNameFromId(resDirEntry->Name, resourceBase, nameBuffer,
                              sizeof(nameBuffer));
        printf("Name: %s  DataEntryOffs: %08X\n",
            nameBuffer, resDirEntry->OffsetToData);
    }
    else
    {
        printf("ID: %08X  DataEntryOffs: %08X\n",
                resDirEntry->Name, resDirEntry->OffsetToData);
    }
    
    // the resDirEntry->OffsetToData is a pointer to an
    // IMAGE_RESOURCE_DATA_ENTRY.  Go dump out that information.  First,
    // spit out the proper indentation
    for ( i=0; i < level; i++ )
        printf("    ");
    
    pResDataEntry = (PIMAGE_RESOURCE_DATA_ENTRY)
                    (resourceBase + resDirEntry->OffsetToData);
    printf("Offset: %05X  Size: %05X  CodePage: %X\n",
            pResDataEntry->OffsetToData, pResDataEntry->Size,
            pResDataEntry->CodePage);
}

//
// Dump the information about one resource directory.
//
void DumpResourceDirectory
(
    PIMAGE_RESOURCE_DIRECTORY resDir,
    DWORD resourceBase,
    DWORD level,
    DWORD resourceType
)
{
    PIMAGE_RESOURCE_DIRECTORY_ENTRY resDirEntry;
    char szType[64];
    UINT i;

    // Spit out the spacing for the level indentation
    for ( i=0; i < level; i++ )
        printf("    ");

    // Level 1 resources are the resource types
    if ( level == 1 && !(resourceType & IMAGE_RESOURCE_NAME_IS_STRING) )
    {
        GetResourceTypeName( resourceType, szType, sizeof(szType) );
    }
    else    // Just print out the regular id or name
    {
        GetResourceNameFromId( resourceType, resourceBase, szType,
                               sizeof(szType) );
    }
    
    printf(
        "ResDir (%s) Named:%02X ID:%02X TimeDate:%08X Vers:%u.%02u Char:%X\n",
        szType, resDir->NumberOfNamedEntries, resDir->NumberOfIdEntries,
        resDir->TimeDateStamp, resDir->MajorVersion,
        resDir->MinorVersion,resDir->Characteristics);

    resDirEntry = (PIMAGE_RESOURCE_DIRECTORY_ENTRY)(resDir+1);
    
    for ( i=0; i < resDir->NumberOfNamedEntries; i++, resDirEntry++ )
        DumpResourceEntry(resDirEntry, resourceBase, level+1);

    for ( i=0; i < resDir->NumberOfIdEntries; i++, resDirEntry++ )
        DumpResourceEntry(resDirEntry, resourceBase, level+1);
}

//
// Top level routine called to dump out the entire resource hierarchy
//
void DumpResourceSection(DWORD base, PIMAGE_NT_HEADERS pNTHeader)
{
    PIMAGE_RESOURCE_DIRECTORY resDir;
    
    resDir = GetSectionPtr(".rsrc", pNTHeader, (DWORD)base);
    if ( !resDir )
        return;
    
    printf("Resources\n");
    DumpResourceDirectory(resDir, (DWORD)resDir, 0, 0);
}

//
// Dump the imports table (the .idata section) of a PE file
//
void DumpImportsSection(DWORD base, PIMAGE_NT_HEADERS pNTHeader)
{
    PIMAGE_IMPORT_DESCRIPTOR importDesc;
    PIMAGE_SECTION_HEADER pSection;
    PIMAGE_THUNK_DATA thunk, thunkIAT=0;
    PIMAGE_IMPORT_BY_NAME pOrdinalName;
    DWORD importsStartRVA;
    INT delta = -1;

    // Look up where the imports section is (normally in the .idata section)
    // but not necessarily so.  Therefore, grab the RVA from the data dir.
    importsStartRVA = pNTHeader->OptionalHeader.DataDirectory
                            [IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress;
    if ( !importsStartRVA )
        return;

    // Get the IMAGE_SECTION_HEADER that contains the imports.  This is
    // usually the .idata section, but doesn't have to be.
    pSection = GetEnclosingSectionHeader( importsStartRVA, pNTHeader );
    if ( !pSection )
        return;

    delta = (INT)(pSection->VirtualAddress-pSection->PointerToRawData);
    
    importDesc = (PIMAGE_IMPORT_DESCRIPTOR) (importsStartRVA - delta + base);
            
    printf("Imports Table:\n");
    
    while ( 1 )
    {
        // See if we've reached an empty IMAGE_IMPORT_DESCRIPTOR
        if ( (importDesc->TimeDateStamp==0 ) && (importDesc->Name==0) )
            break;
        
        printf("  %s\n", (PBYTE)(importDesc->Name) - delta + base);

        printf("  Hint/Name Table: %08X\n", importDesc->Characteristics);
        printf("  TimeDateStamp:   %08X\n", importDesc->TimeDateStamp);
        printf("  ForwarderChain:  %08X\n", importDesc->ForwarderChain);
        printf("  First thunk RVA: %08X\n", importDesc->FirstThunk);
    
        thunk = (PIMAGE_THUNK_DATA)importDesc->Characteristics;
        thunkIAT = (PIMAGE_THUNK_DATA)importDesc->FirstThunk;

        if ( thunk == 0 )   // No Characteristics field?
        {
            // Yes! Gotta have a non-zero FirstThunk field then.
            thunk = thunkIAT;
            
            if ( thunk == 0 )   // No FirstThunk field?  Ooops!!!
                return;
        }
        
        // Adjust the pointer to point where the tables are in the
        // mem mapped file.
        thunk = (PIMAGE_THUNK_DATA)( (PBYTE)thunk - delta + base);
        thunkIAT = (PIMAGE_THUNK_DATA)( (PBYTE)thunkIAT - delta + base);
    
        printf("  Ordn  Name\n");
        
        while ( 1 ) // Loop forever (or until we break out)
        {
            if ( thunk->u1.AddressOfData == 0 )
                break;

            if ( thunk->u1.Ordinal & IMAGE_ORDINAL_FLAG )
            {
                printf( "  %4u", IMAGE_ORDINAL(thunk->u1.Ordinal) );
            }
            else
            {
                pOrdinalName = thunk->u1.AddressOfData;
                pOrdinalName = (PIMAGE_IMPORT_BY_NAME)
                                ((PBYTE)pOrdinalName - delta + base);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线视频一区二区三| 日韩一卡二卡三卡四卡| 5858s免费视频成人| 国产女人18毛片水真多成人如厕| 婷婷亚洲久悠悠色悠在线播放| 国产露脸91国语对白| 欧美日韩高清不卡| 亚洲欧美另类小说视频| 国产一区二区三区精品视频| 欧美日韩极品在线观看一区| 亚洲人妖av一区二区| 国产成人av资源| 日韩精品影音先锋| 亚洲成人黄色小说| 色老综合老女人久久久| 国产精品色哟哟| 国产精品一区一区| 久久久不卡网国产精品一区| 看国产成人h片视频| 精品视频一区 二区 三区| 国产精品免费aⅴ片在线观看| 麻豆91精品91久久久的内涵| 欧美三级中文字| 亚洲午夜免费电影| 91久久精品一区二区三| 亚洲三级小视频| 成人av在线资源网站| 久久女同性恋中文字幕| 国产一区二区精品在线观看| 欧美刺激午夜性久久久久久久| 天天爽夜夜爽夜夜爽精品视频 | 一级日本不卡的影视| 成人免费观看视频| 国产精品不卡视频| 99久久精品国产网站| 中文字幕一区二区三区不卡在线| av中文字幕一区| 亚洲美女区一区| 日本道色综合久久| 五月天一区二区三区| 日韩欧美亚洲国产另类| 国产精品一区二区你懂的| 欧美国产1区2区| 91视频在线观看| 午夜欧美在线一二页| 日韩一区二区在线观看视频播放 | 一区2区3区在线看| 在线不卡免费欧美| 狠狠狠色丁香婷婷综合激情 | 欧美大片在线观看| 韩国三级在线一区| 国产精品久久看| 色综合久久久网| 奇米影视一区二区三区小说| 久久综合色8888| av爱爱亚洲一区| 爽爽淫人综合网网站| 精品日韩成人av| av在线播放成人| 日韩激情av在线| 国产精品素人一区二区| 欧美性xxxxxxxx| 韩国三级电影一区二区| 亚洲视频香蕉人妖| 欧美电影精品一区二区| 99精品欧美一区二区三区综合在线| 亚洲曰韩产成在线| 精品国产污网站| a在线欧美一区| 美女高潮久久久| 综合av第一页| 精品少妇一区二区三区日产乱码 | 色爱区综合激月婷婷| 免费成人在线网站| 成人欧美一区二区三区1314| 欧美高清激情brazzers| 粉嫩一区二区三区在线看| 亚洲成人久久影院| 中文字幕在线一区免费| 日韩一区二区免费在线观看| 北条麻妃国产九九精品视频| 婷婷丁香久久五月婷婷| 亚洲免费电影在线| 久久伊99综合婷婷久久伊| 欧美视频自拍偷拍| 99视频超级精品| 国产自产高清不卡| 日韩和欧美一区二区三区| 国产精品妹子av| 精品国产一区二区三区四区四| 色婷婷国产精品| 成人激情黄色小说| 久久精品久久综合| 五月综合激情婷婷六月色窝| 亚洲欧洲在线观看av| 久久麻豆一区二区| 精品国产99国产精品| 欧美日韩www| 欧美性生活一区| 在线精品视频免费播放| 成人av资源在线| 懂色av一区二区夜夜嗨| 激情综合网激情| 免费欧美日韩国产三级电影| 亚洲一二三专区| 亚洲精品欧美专区| 亚洲另类一区二区| 亚洲免费视频中文字幕| 亚洲日本乱码在线观看| 自拍偷在线精品自拍偷无码专区| 中文一区在线播放| 国产目拍亚洲精品99久久精品| 日韩三级视频在线观看| 日韩一区二区三区在线| 91精品国产综合久久福利| 欧美日本一区二区在线观看| 欧美性生交片4| 欧美日韩美女一区二区| 欧美精品久久久久久久多人混战 | 91福利视频久久久久| 在线观看日韩av先锋影音电影院| 色婷婷综合久久久中文字幕| 色偷偷88欧美精品久久久| 91国偷自产一区二区使用方法| 色一情一乱一乱一91av| 欧亚洲嫩模精品一区三区| 欧美三级电影网| 欧美一级夜夜爽| 久久久亚洲午夜电影| 国产精品国产三级国产普通话三级 | 国产一区高清在线| 国产精品一二三在| 本田岬高潮一区二区三区| 欧洲精品一区二区三区在线观看| 在线观看国产91| 欧美一级二级三级乱码| 久久综合久色欧美综合狠狠| 国产精品毛片a∨一区二区三区| 伊人夜夜躁av伊人久久| 五月婷婷久久综合| 国产69精品一区二区亚洲孕妇| 91欧美一区二区| 欧美精品久久久久久久多人混战 | 色婷婷综合在线| 91精品国产综合久久久久| 久久久精品日韩欧美| 亚洲精品久久久蜜桃| 另类调教123区| 91久久免费观看| 久久综合资源网| 亚洲一区在线观看免费观看电影高清 | 精品久久久久久久久久久久久久久 | 另类小说综合欧美亚洲| 成人激情开心网| 欧美一区二区人人喊爽| 中文字幕在线一区| 日韩制服丝袜av| 成人精品免费视频| 欧美日韩一区不卡| 国产精品久久久久天堂| 日产国产高清一区二区三区 | 看片的网站亚洲| 91麻豆精品秘密| 久久久久久久久99精品| 亚洲国产精品人人做人人爽| 成人在线一区二区三区| 日韩欧美国产一区二区三区| 国产精品久久久久久妇女6080 | 日韩精彩视频在线观看| 91啪在线观看| 国产欧美综合色| 麻豆91在线播放免费| 欧美日韩国产成人在线免费| 中文字幕巨乱亚洲| 久久爱www久久做| 色婷婷av一区二区三区gif| 国产人久久人人人人爽| 麻豆91免费观看| 337p亚洲精品色噜噜狠狠| 成人欧美一区二区三区白人| 国产精品中文字幕日韩精品| 欧美精品三级日韩久久| 亚洲高清不卡在线观看| 日本电影欧美片| 亚洲色图制服诱惑| 成人18视频在线播放| 久久精品综合网| 国产激情视频一区二区在线观看 | 国产高清久久久久| 欧美成人艳星乳罩| 久久国产夜色精品鲁鲁99| 69av一区二区三区| 香蕉加勒比综合久久| 欧美日韩精品电影| 天天色图综合网| 日韩亚洲欧美成人一区| 蜜臀a∨国产成人精品| 欧美一区二区三区在线视频| 日韩成人免费在线| 日韩免费视频一区二区|