-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsectionheader.cpp
More file actions
122 lines (97 loc) · 4.1 KB
/
sectionheader.cpp
File metadata and controls
122 lines (97 loc) · 4.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#include "sectionheader.h"
#include"subordinate_function.h"
sec_header::sec_header(int f)
{
IMAGE_FILE_HEADER fileheader;
file_descriptor=f;
_lseek(file_descriptor,OffFileHeader,SEEK_SET);
_read(f,&fileheader,sizeof(fileheader));
NumberOfSection=fileheader.NumberOfSections;
_lseek(f,OffSecHeader,SEEK_SET);
_read(f,&secHeader,sizeof(secHeader));
}
QString sec_header::show_header_in_window(){
_lseek(file_descriptor,OffSecHeader+static_cast<long>(sizeof(secHeader)),SEEK_SET);
int temp=NumberOfSection;
QString information;
addQString(information,"\n","--------------------SECTION HEADER INFO-----------------","\n");
while(temp!=0)
{
addQString(information,"Name: ",secHeader.Name,"\n");
addQString(information,"Virtual address: ",secHeader.VirtualAddress,"\n");
addQString(information,"Virtual Size: ",secHeader.Misc.VirtualSize,"\n");
addQString(information,"Size Of Raw Data: ",secHeader.SizeOfRawData,"\n");
addQString(information,"Pointer To Raw Data: ",secHeader.PointerToRawData,"\n");
addQString(information,"Pointer To Relocation: ",secHeader.PointerToRelocations,"\n");
addQString(information,"Pointer To Line Number: ",secHeader.PointerToLinenumbers,"\n");
addQString(information,"Number Of Line No: ",secHeader.NumberOfLinenumbers,"\n");
addQString(information,"Number Of Relocation: ",secHeader.NumberOfRelocations,"\n");
addQString(information,"Characteristics: ",secHeader.Characteristics,"\n");
temp--;
addQString(information,"\n","--------------------","\n");
_read(file_descriptor,&secHeader,sizeof(secHeader));
}
return information;
}
void sec_header::Show_Sec_in_ViewTable(QStandardItemModel* model){
_lseek(file_descriptor,OffSecHeader+static_cast<long>(sizeof(secHeader)),SEEK_SET);
int temp=NumberOfSection;
QString information;
int i=0;
while(temp!=0){
Show_in_ViewTable(model,i,Unsigned_Char_To_QString(secHeader.Name),Number_x16_ToQstring(secHeader.VirtualAddress),Number_x16_ToQstring(secHeader.Misc.VirtualSize),Number_x16_ToQstring(secHeader.PointerToRawData),Number_x16_ToQstring(secHeader.SizeOfRawData),Number_x16_ToQstring(secHeader.Characteristics));
temp--;
++i;
_read(file_descriptor,&secHeader,sizeof(secHeader));
}
}
void sec_header::RVA_Get_Need_Section(DWORD RVA){
_lseek(file_descriptor,OffSecHeader+static_cast<long>(sizeof(secHeader)),SEEK_SET);
bool detecte=false;
int temp=NumberOfSection;
while(NumberOfSection!=0&&!detecte){
temp--;
if(secHeader.VirtualAddress<=RVA&&RVA<secHeader.VirtualAddress+secHeader.SizeOfRawData){
detecte=true;
}
else
_read(file_descriptor,&secHeader,sizeof(secHeader));
}
}
void sec_header::File_Offset_Get_Need_Section(int File_Offset){
_lseek(file_descriptor,OffSecHeader+static_cast<long>(sizeof(secHeader)),SEEK_SET);
DWORD FileOffset=secHeader.PointerToRawData;
bool detecte=false;
int temp=NumberOfSection;
while(temp>0&&!detecte){
temp--;
if(static_cast<int>(FileOffset)<=File_Offset&&File_Offset<(static_cast<int>(FileOffset+secHeader.SizeOfRawData))){
detecte=true;
}
else{
_read(file_descriptor,&secHeader,sizeof(secHeader));
FileOffset=secHeader.PointerToRawData;
}
}
}
void sec_header::Get_Last_Section(){
int temp=NumberOfSection;
_lseek(file_descriptor,OffSecHeader+static_cast<long>(static_cast<unsigned int>(temp-1)*sizeof(secHeader)),SEEK_SET);
_read(file_descriptor,&secHeader,sizeof(secHeader));
}
void sec_header::Get_Enough_Size_Section(int Size){
_lseek(file_descriptor,OffSecHeader+static_cast<long>(sizeof(secHeader)),SEEK_SET);
DWORD LeftSize=secHeader.SizeOfRawData-secHeader.Misc.VirtualSize;
bool detecte=false;
int temp=NumberOfSection;
while(temp>0&&!detecte){
temp--;
if(static_cast<int>(LeftSize)>Size){
detecte=true;
}
else{
_read(file_descriptor,&secHeader,sizeof(secHeader));
LeftSize=secHeader.SizeOfRawData-secHeader.Misc.VirtualSize;
}
}
}