最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語(yǔ)言怎么獲得進(jìn)程的PE文件信息

 更新時(shí)間:2016年01月02日 12:54:31   投稿:hebedich  
這篇文章主要介紹了C語(yǔ)言怎么獲得進(jìn)程的PE文件信息的相關(guān)代碼,需要的朋友可以參考下

一、打印Sections信息。下面的程序打印出Windows_Graphics_Programming 1.1中第三個(gè)程序“Hello World Version 3:Create a Full-Screen Window"生成的可執(zhí)行文件的Sections結(jié)構(gòu)字節(jié)的信息

#include<stdio.h>
#include<windows.h>

char *strPath="C:/c1_hwv3/Debug/c1_hwv3.exe";

int main()
{
  IMAGE_DOS_HEADER myDosHeader;
  LONG e_lfanew;
  FILE *pFile;
  pFile=fopen(strPath,"rb+");

  fread(&myDosHeader,sizeof(IMAGE_DOS_HEADER),1,pFile);
  e_lfanew=myDosHeader.e_lfanew;

  IMAGE_FILE_HEADER myFileHeader;
  int nSectionCount;

  fseek(pFile,(e_lfanew+sizeof(DWORD)),SEEK_SET);
  fread(&myFileHeader,sizeof(IMAGE_FILE_HEADER),1,pFile);
  nSectionCount=myFileHeader.NumberOfSections;

  IMAGE_SECTION_HEADER *pmySectionHeader=
    (IMAGE_SECTION_HEADER *)calloc(nSectionCount,sizeof(IMAGE_SECTION_HEADER));
  fseek(pFile,(e_lfanew+sizeof(IMAGE_NT_HEADERS)),SEEK_SET);
  fread(pmySectionHeader,sizeof(IMAGE_SECTION_HEADER),nSectionCount,pFile);

  for(int i=0;i<nSectionCount;i++,pmySectionHeader++)
  {
    printf("Name: %s\n", pmySectionHeader->Name);
    printf("union_PhysicalAddress: %08x\n", pmySectionHeader->Misc.PhysicalAddress);
    printf("union_VirtualSize: %04x\n", pmySectionHeader->Misc.VirtualSize);
    printf("VirtualAddress: %08x\n", pmySectionHeader->VirtualAddress);
    printf("SizeOfRawData: %08x\n", pmySectionHeader->SizeOfRawData);
    printf("PointerToRawData: %04x\n", pmySectionHeader->PointerToRawData);
    printf("PointerToRelocations: %04x\n", pmySectionHeader->PointerToRelocations);
    printf("PointerToLinenumbers: %04x\n", pmySectionHeader->PointerToLinenumbers);
    printf("NumberOfRelocations: %04x\n", pmySectionHeader->NumberOfRelocations);
    printf("NumberOfLinenumbers: %04x\n", pmySectionHeader->NumberOfLinenumbers);
    printf("Charateristics: %04x\n", pmySectionHeader->Characteristics);
  }
//  pmySectionHeader-=m_nSectionCount;

  if(pmySectionHeader!=NULL)
  {
    free(pmySectionHeader);
    pmySectionHeader=NULL;
  }

  fclose(pFile);
  return 0;
}

運(yùn)行程序打印出如下信息

Name: .text

union_PhysicalAddress: 00022350

union_VirtualSize: 22350

VirtualAddress: 00001000

SizeOfRawData: 00023000

PointerToRawData: 1000

PointerToRelocations: 0000

PointerToLinenumbers: 0000

NumberOfRelocations: 0000

NumberOfLinenumbers: 0000

Charateristics: 60000020

Name: .rdata

union_PhysicalAddress: 00001615

union_VirtualSize: 1615

VirtualAddress: 00024000

SizeOfRawData: 00002000

PointerToRawData: 24000

PointerToRelocations: 0000

PointerToLinenumbers: 0000

NumberOfRelocations: 0000

NumberOfLinenumbers: 0000

Charateristics: 40000040

Name: .data

union_PhysicalAddress: 00005650

union_VirtualSize: 5650

VirtualAddress: 00026000

SizeOfRawData: 00004000

PointerToRawData: 26000

PointerToRelocations: 0000

PointerToLinenumbers: 0000

NumberOfRelocations: 0000

NumberOfLinenumbers: 0000

Charateristics: c0000040

Name: .idata

union_PhysicalAddress: 00000b23

union_VirtualSize: 0b23

VirtualAddress: 0002c000

SizeOfRawData: 00001000

PointerToRawData: 2a000

PointerToRelocations: 0000

PointerToLinenumbers: 0000

NumberOfRelocations: 0000

NumberOfLinenumbers: 0000

Charateristics: c0000040

Name: .reloc

union_PhysicalAddress: 00000f00

union_VirtualSize: 0f00

VirtualAddress: 0002d000

SizeOfRawData: 00001000

PointerToRawData: 2b000

PointerToRelocations: 0000

PointerToLinenumbers: 0000

NumberOfRelocations: 0000

NumberOfLinenumbers: 0000

Charateristics: 42000040

pe文件結(jié)構(gòu)圖:

時(shí)間,時(shí)間,會(huì)給我答案 time will give me the answer

再給大家分享一則

#include <windows.h>
#include <stdio.h>
#define MAX_SECTION_NUM  16
#define MAX_IMPDESC_NUM  64
 
HANDLE hHeap;
PIMAGE_DOS_HEADER pDosHeader;
PCHAR  pDosStub;
DWORD  dwDosStubSize;
DWORD  dwDosStubOffset;
PIMAGE_NT_HEADERS      pNtHeaders;
PIMAGE_FILE_HEADER     pFileHeader;
PIMAGE_OPTIONAL_HEADER32  pOptHeader;
PIMAGE_SECTION_HEADER  pSecHeaders;
PIMAGE_SECTION_HEADER  pSecHeader[MAX_SECTION_NUM];
WORD wSecNum;
PBYTE pSecData[MAX_SECTION_NUM];
DWORD dwSecSize[MAX_SECTION_NUM];
DWORD dwFileSize;
 
void OutputPEInMem(HANDLE hd)
{
  // 請(qǐng)?jiān)谶@里填入你的代碼
  DWORD             dwBase;
  dwBase = (DWORD)hd;
  pDosHeader = (PIMAGE_DOS_HEADER)dwBase;
  pNtHeaders = (PIMAGE_NT_HEADERS)(dwBase + pDosHeader->e_lfanew);
  pOptHeader = &(pNtHeaders->OptionalHeader);
  pFileHeader = &(pNtHeaders->FileHeader);
  printf("Address Of Entry Point: 0x%08x\n", pOptHeader->AddressOfEntryPoint);
  printf("ImageBase: 0x%08x\n", pOptHeader->ImageBase);
  printf("Number Of Sections: %d\n", pFileHeader->NumberOfSections);
  printf("Size Of Image: 0x%04x\n", pOptHeader->SizeOfImage);
  return;
}
 
int main(int argc, char *argv[])
{
  DWORD pid = 0;
  pid=atoi(argv[1]);
  HANDLE hd=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);
   
  LPCSTR lpszFileName = "hello.exe";
  LPCSTR lpszInjFileName = "hello_inj0.exe";
 
   
  OutputPEInMem(hd);
  hHeap = GetProcessHeap();
 
  if (! CopyPEFileToMem(lpszFileName)) {
    return 1;
  }
  return 0;
}

相關(guān)文章

  • C++實(shí)現(xiàn)LeetCode(140.拆分詞句之二)

    C++實(shí)現(xiàn)LeetCode(140.拆分詞句之二)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(140.拆分詞句之二),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++容器適配與棧的實(shí)現(xiàn)及dequeque和優(yōu)先級(jí)詳解

    C++容器適配與棧的實(shí)現(xiàn)及dequeque和優(yōu)先級(jí)詳解

    這篇文章主要介紹了C++容器適配與棧的實(shí)現(xiàn)及dequeque和優(yōu)先級(jí),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2022-10-10
  • C語(yǔ)言中g(shù)etopt()函數(shù)和select()函數(shù)的使用方法

    C語(yǔ)言中g(shù)etopt()函數(shù)和select()函數(shù)的使用方法

    這篇文章主要介紹了C語(yǔ)言中g(shù)etopt()函數(shù)和select()函數(shù)的使用方法,是C語(yǔ)言入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-09-09
  • C/C++實(shí)現(xiàn)高并發(fā)http服務(wù)器的代碼示例

    C/C++實(shí)現(xiàn)高并發(fā)http服務(wù)器的代碼示例

    這篇文章簡(jiǎn)單給大家介紹了C/C++實(shí)現(xiàn)高并發(fā)http服務(wù)器的代碼示例,文章通過(guò)代碼和圖文介紹的非常詳細(xì),感興趣的同學(xué)可以參考閱讀
    2023-07-07
  • C語(yǔ)言廣播的使用詳解

    C語(yǔ)言廣播的使用詳解

    顧名思義可以把自己的數(shù)據(jù)發(fā)送給在特定范圍內(nèi)的所有人;我們網(wǎng)絡(luò)編程中的廣播一般是通過(guò)特定的廣播地址把自己的數(shù)據(jù)發(fā)送給局域網(wǎng)內(nèi)當(dāng)前在線的客戶端
    2022-05-05
  • 桶排序算法的理解及C語(yǔ)言版代碼示例

    桶排序算法的理解及C語(yǔ)言版代碼示例

    桶排序算法顧名思義,就是把要排序的元素分桶排序后合并結(jié)果,這里我們就來(lái)看一下桶排序算法的理解及C語(yǔ)言版代碼示例:
    2016-07-07
  • C++?Qt開(kāi)發(fā)之使用QUdpSocket實(shí)現(xiàn)UDP網(wǎng)絡(luò)通信

    C++?Qt開(kāi)發(fā)之使用QUdpSocket實(shí)現(xiàn)UDP網(wǎng)絡(luò)通信

    Qt 是一個(gè)跨平臺(tái)C++圖形界面開(kāi)發(fā)庫(kù),利用Qt可以快速開(kāi)發(fā)跨平臺(tái)窗體應(yīng)用程序,本文主要介紹如何運(yùn)用QUdpSocket組件實(shí)現(xiàn)基于UDP的網(wǎng)絡(luò)通信功能,需要的可以參考下
    2024-03-03
  • C++ Qt開(kāi)發(fā)之LineEdit單行輸入組件的用法詳解

    C++ Qt開(kāi)發(fā)之LineEdit單行輸入組件的用法詳解

    Qt 是一個(gè)跨平臺(tái)C++圖形界面開(kāi)發(fā)庫(kù),利用Qt可以快速開(kāi)發(fā)跨平臺(tái)窗體應(yīng)用程序,在Qt中我們可以通過(guò)拖拽的方式將不同組件放到指定的位置,實(shí)現(xiàn)圖形化開(kāi)發(fā)極大的方便了開(kāi)發(fā)效率,本章將重點(diǎn)介紹LineEdit單行輸入框組件的常用方法及靈活運(yùn)用
    2023-12-12
  • C語(yǔ)言基本概念宏定義中的#和##教程

    C語(yǔ)言基本概念宏定義中的#和##教程

    這篇文章主要為大家介紹了C語(yǔ)言基本概念宏定義中的#和##教程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • C語(yǔ)言練習(xí)之掃雷小游戲

    C語(yǔ)言練習(xí)之掃雷小游戲

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言練習(xí)之掃雷小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05

最新評(píng)論

绥德县| 昌黎县| 高密市| 南皮县| 拉孜县| 西盟| 广宗县| 门源| 邳州市| 金门县| 来宾市| 九龙城区| 广东省| 鹤庆县| 宜兰市| 磴口县| 纳雍县| 隆子县| 封丘县| 贵阳市| 通许县| 罗田县| 龙山县| 余庆县| 甘南县| 汉川市| 香港 | 海城市| 天台县| 广水市| 苏尼特左旗| 沈丘县| 苗栗县| 象山县| 朔州市| 惠东县| 正镶白旗| 龙州县| 玛沁县| 博客| 集贤县|