1. 程式人生 > >Windows原理常見面試題

Windows原理常見面試題

Windows原理

IMAGE_OPTIONAL_HEADER結構如下:

typedef struct _IMAGE_OPTIONAL_HEADER  
{  
    //   
    // Standard fields.     
    //   
    WORD    Magic;              // 標誌字, ROM 映像(0107h),普通可執行文件(010Bh)   
    BYTE    MajorLinkerVersion;     // 鏈接程序的主版本號   
    BYTE    MinorLinkerVersion;     // 鏈接程序的次版本號   
    DWORD   SizeOfCode;         // 所有含代碼的節的總大小   
    DWORD   SizeOfInitializedData;          // 所有含已初始化數據的節的總大小   
    DWORD   SizeOfUninitializedData;        // 所有含未初始化數據的節的大小   
    DWORD   AddressOfEntryPoint;        // 程序執行入口RVA   
    DWORD   BaseOfCode;         // 代碼的區塊的起始RVA   
    DWORD   BaseOfData;         // 數據的區塊的起始RVA   
    //   
    // NT additional fields.    以下是屬於NT結構增加的領域。   
    //   
    DWORD   ImageBase;          // 程序的首選裝載地址   
    DWORD   SectionAlignment;       // 內存中的區塊的對齊大小   
    DWORD   FileAlignment;          // 文件中的區塊的對齊大小   
    WORD    MajorOperatingSystemVersion;    // 要求操作系統最低版本號的主版本號   
    WORD    MinorOperatingSystemVersion;    // 要求操作系統最低版本號的副版本號   
    WORD    MajorImageVersion;      // 可運行於操作系統的主版本號   
    WORD    MinorImageVersion;      // 可運行於操作系統的次版本號   
    WORD    MajorSubsystemVersion;      // 要求最低子系統版本的主版本號   
    WORD    MinorSubsystemVersion;      // 要求最低子系統版本的次版本號   
    DWORD   Win32VersionValue;      // 莫須有字段,不被病毒利用的話一般為0   
    DWORD   SizeOfImage;            // 映像裝入內存後的總尺寸   
    DWORD   SizeOfHeaders;          // 所有頭+ 區塊表的尺寸大小   
    DWORD   CheckSum;           // 映像的校檢和   
    WORD    Subsystem;          // 可執行文件期望的子系統   
    WORD    DllCharacteristics;     // DllMain()函數何時被調用,默認為0   
    DWORD   SizeOfStackReserve;     // 初始化時的棧大小   
    DWORD   SizeOfStackCommit;      // 初始化時實際提交的棧大小   
    DWORD   SizeOfHeapReserve;      // 初始化時保留的堆大小   
    DWORD   SizeOfHeapCommit;       // 初始化時實際提交的堆大小   
    DWORD   LoaderFlags;            // 與調試有關,默認為0    
    DWORD   NumberOfRvaAndSizes;        // 下邊數據目錄的項數,這個字段自Windows NT 發布以來        // 一直是16   
    IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];  
    // 數據目錄表   
} IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;  

1.擴展頭中的ImageBase是做什麽用的?
答:默認加載基址(如果沒有加載到這個地址,會發生重定位)

2.擴展頭中的AddressOfEntryPoint是做什麽用的?
答:程序開始執行的相對虛擬地址(RVA),也叫OEP,Orginal Entry Point,源入口點

3.擴展頭的大小是固定的嗎?為何NT頭要存儲擴展頭的大小?
答:擴展頭的大小是不確定的,

Windows原理常見面試題