C語言遍歷匯入表匯出表

2021-08-21 06:16:38 字數 2796 閱讀 3898

// 同時遍歷pe檔案的匯入表、匯出表的函式名

#include#include#pragma warning(disable : 4996)

dword rva_2_raw(char *buf, dword rva, dword raw, bool flag);

dword import(char *buf);

dword export(char *buf);

void main()

fseek(fp, 0, seek_end); // 設定檔案流指標指向pe檔案的結尾處

pefilesize = ftell(fp); // 得到檔案流指標當前位置相對於檔案頭部的偏移位元組數,即獲取到了pe檔案大小(位元組)

char *buf = new char[pefilesize]; // 新建乙個陣列指標buf,指向乙個以pe檔案位元組數作為大小的陣列

memset(buf, 0, pefilesize); // buf指標指向記憶體中陣列的開始位置

// 在這裡用0初始化一塊pefilesize大小的記憶體,即為陣列分配記憶體

fseek(fp, 0, seek_set); // 將檔案流指標指向pe檔案頭部

fread(buf, 1, pefilesize, fp); // 從給定輸入流fp中讀取pefilesize大小個資料項儲存到buf字元陣列中,每項大小為1位元組

// 這樣將pe檔案讀入記憶體實際上就讓buf指向了pe檔案的基位址imagebase

fclose(fp);

import(buf); // 這個buf在接下來的操作中將一直指向檔案的首位址,也就是imagebase檔案基址

export(buf);

delete buf;

}// 檔案已經讀取到記憶體中了

dword rva_2_raw(char *buf, dword rva, dword raw, bool flag) // rva為匯入表或匯出表的rva;flag為1,rva轉偏移,為0反過來——事實上此程式只用到了1

for (; i < sectionnumber;i++) // 有多少節區就迴圈幾次,從第乙個節區表開始操作,如果pe檔案有n個節,那麼區塊表就是由n個image_section_header組成的陣列

}} else

for (; i < sectionnumber; i++)

}} return imp_exp_fa;

}// 匯入表一般包含dll和普通api兩部分,因此要分別考慮

// 3.若開啟檔案成功,則獲取檔案的大小

dword dwfilesize = getfilesize(hfile, null);

// 4.申請記憶體空間,用於存放檔案資料

byte * filebuffer = new byte[dwfilesize];

// 5.讀取檔案內容

dword dwreadfile = 0;

readfile(hfile, filebuffer, dwfilesize, &dwreadfile, null);

// 6.判斷這個檔案是不是乙個有效的pe檔案

// 6.1 先檢查dos頭中的mz標記,判斷e_magic欄位是否為0x5a4d,或者是image_dos_signature

dword dwfileaddr = (dword)filebuffer;

auto dosheader = (pimage_dos_header)dwfileaddr;

if (dosheader->e_magic != image_dos_signature)

// 6.2 若都通過的話再獲取nt頭所在的位置,並判斷e_lfanew欄位是否為0x00004550,

// 或者是image_nt_signature

auto ntheader = (pimage_nt_headers)(dwfileaddr + dosheader->e_lfanew);

if (ntheader->signature != image_nt_signature)

// 7.若上述都通過,則為乙個有效的pe檔案

messagebox(null, text("這是乙個有效pe檔案"), text("提示"), mb_ok);

delete filebuffer;

closehandle(hfile);

// 8.結束程式

return 0;

}

1、va、rva、raw、foa、fa 是什麼鬼?2、匯入函式中幾個重要結構3、pe檔案結構圖,乙個帶偏移量、乙個不帶,都要看

c 中匯入 匯出Excel表

c 匯入 匯出excel 新建乙個專案,新增web引用 這個web服務就只是返回dataset資料而已 要使用excel,需加的命名空間 using microsoft.office.interop.excel using system.reflection using system.io 需新增引...

表的匯入,匯出

if exists select from dbo.sysobjects where id object id n dbo librarycheck and objectproperty id,n isusertable 1 drop table librarycheck select into l...

Oracle 匯入匯出表

下面介紹的是匯入匯出的例項,向匯入匯出看例項基本上就可以完成,因為匯入匯出很簡單。資料匯出 1 將資料庫test完全匯出,使用者名稱system 密碼manager 匯出到d daochu.dmp中 exp system manager orcl 127.0.0.1 file d daochu.dm...