zoukankan      html  css  js  c++  java
  • 代码片:ListImports

    列举PE文件的导入函数信息,功能与格式和 dumpbin /imports一模一样。

    不说空话,直接看代码:

     1 void ListImports(DWORD dbase)
     2 {
     3     char szMsgImport[]="
      %s
    	%8X  Import Address Table
    	%8X  Import Name Table
    	%8x  time date stamp
    	%8x  Index of first forwarder reference
    
    ";
     4     char szMsg2[]="      %8X  %s
    ";
     5     char szMsg3[]="      %8X
    ";
     6     PIMAGE_DOS_HEADER dos=(PIMAGE_DOS_HEADER)dbase;
     7     PIMAGE_NT_HEADERS nt=(PIMAGE_NT_HEADERS)(dbase+dos->e_lfanew);
     8     DWORD va=(DWORD)nt->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress;
     9     if (!va)
    10     {
    11         printf("
    No imports
    
    ");
    12         return;
    13     }
    14     PIMAGE_IMPORT_DESCRIPTOR iid=(PIMAGE_IMPORT_DESCRIPTOR)RvaToPtr(dbase,va);
    15     printf("Section contains the following imports:
    ");
    16     DWORD imagebase=nt->OptionalHeader.ImageBase;
    17     while(iid->OriginalFirstThunk || iid->FirstThunk || iid->Name || iid->TimeDateStamp || iid->ForwarderChain)
    18     {        
    19         printf(szMsgImport,RvaToPtr(dbase,iid->Name),iid->FirstThunk+imagebase,iid->OriginalFirstThunk+imagebase,iid->TimeDateStamp,iid->ForwarderChain);
    20         
    21         if (iid->OriginalFirstThunk)
    22             va=iid->OriginalFirstThunk;
    23         else
    24             va=iid->FirstThunk;
    25         PDWORD pva=(PDWORD)RvaToPtr(dbase,va);
    26         while (*pva)
    27         {
    28             if (*pva & IMAGE_ORDINAL_FLAG32)
    29             {
    30                 DWORD dd=(*pva) & 0x0ffff;
    31                 printf(szMsg3,dd);
    32             }
    33             PIMAGE_IMPORT_BY_NAME piibn=NULL;
    34             piibn=(PIMAGE_IMPORT_BY_NAME)RvaToPtr(dbase,*pva);
    35             printf(szMsg2,piibn->Hint,piibn->Name);
    36             pva++;
    37         }
    38         iid++;
    39     }
    40 }
    /***********************************************

    看书看原版,原汁原味。

    不会英文?没关系,硬着头皮看下去慢慢熟练,才会有真正收获。

    没有原书,也要网上找PDF来看。

    网上的原版资料多了去了,下载东西也到原始下载点去看看。

    你会知其所以然,呵呵。

    ***********************************************/

  • 相关阅读:
    类 2020年8月19
    随便一写,明天改正
    os模块 2020年8月16
    time 模块 2020年8月16
    collections模块 2020年8月16
    正则跟re模块内容2020年8月16日
    【C++设计模式二】C++工厂模式
    【C++设计模式一】C++简单工厂模式
    【01-springmvc快速入门、组件解析】
    03-【Spring 的 AOP】
  • 原文地址:https://www.cnblogs.com/dpblue/p/4816135.html
Copyright © 2011-2022 走看看