FILEBUFFER TO IMAGEBUFFER

Posted zhangzixu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FILEBUFFER TO IMAGEBUFFER相关的知识,希望对你有一定的参考价值。

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include <bits/stdc++.h>
 3 #include <windows.h>
 4 #include <winnt.h>
 5 #define FILE_PATH1 "*************"
 6 #define FILE_PATH2 "*************"
 7 using namespace std;
 8 
 9 int main(void) {
10     int size, j;
11     FILE* p1 = fopen(FILE_PATH1, "rb");
12     //把硬盘里的内容读到内存里
13     fseek(p1, 0, SEEK_END);
14     size = ftell(p1);
15     rewind(p1);
16     char* buffer = (char*)malloc(size);
17     fread(buffer, 1, size, p1);
18     //cout << size << endl;
19 
20     PIMAGE_DOS_HEADER PDOS = (PIMAGE_DOS_HEADER)buffer;
21     //得到NT头
22     PIMAGE_NT_HEADERS32 PNT = (PIMAGE_NT_HEADERS32)((char*)PDOS + PDOS->e_lfanew);
23     //printf("%p
", PNT->Signature);
24     //得到FILE头
25     PIMAGE_FILE_HEADER PFILE = (PIMAGE_FILE_HEADER)((char*)PNT + sizeof(PNT->Signature));
26     //得到OPTIONAL头
27     PIMAGE_OPTIONAL_HEADER32 POPTIONAL = (PIMAGE_OPTIONAL_HEADER32)((char*)PFILE + sizeof(IMAGE_FILE_HEADER));
28 
29     FILE* p2 = fopen(FILE_PATH2, "wb");
30     
31     //将头和节表写入文件中
32     fwrite(buffer, 1, POPTIONAL->SizeOfHeaders, p2); 
33     //将内存补齐对好
34     j = 0;
35     while ((POPTIONAL->SizeOfHeaders + j) % POPTIONAL->SectionAlignment != 0) {
36         fprintf(p2, "%c", 0x00);
37         j++;
38     }
39 
40     //fwrite(PDOS, 1, POPTIONAL->SizeOfHeaders, p2);
41     fclose(p2);
42     p2 = fopen(FILE_PATH2, "ab");
43     //获得节表
44     PIMAGE_SECTION_HEADER PSECTION = (PIMAGE_SECTION_HEADER)((char*)POPTIONAL + PFILE->SizeOfOptionalHeader);
45     //printf("%p
", buffer + PSECTION->PointerToRawData);
46     for (int i = 0; i < PFILE->NumberOfSections; i++) {    
47         
48         //fflush(p2);
49         //写入节区的内容
50         //fwrite((char*)buffer +(int) PSECTION->PointerToRawData, 1, PSECTION->SizeOfRawData, p2);
51         //fwrite(buffer + PSECTION->PointerToRawData, 1, PSECTION->SizeOfRawData, p2);
52         //for (j = 0; j < 2; j++) printf("%p
", * (buffer + PSECTION->PointerToRawData + j));
53         //for (j = 0; j < PSECTION->SizeOfRawData; j++) fprintf(p2, "%x", * (buffer + PSECTION->PointerToRawData + j));
54 
55         for (j = 0; j < PSECTION->SizeOfRawData; j++) fwrite(buffer + PSECTION->PointerToRawData + j, 1, 1, p2);
56         //cout << j << endl;
57 
58 
59         //printf("%p    %p
", buffer + PSECTION->PointerToRawData, PSECTION->PointerToRawData);
60         //内存对齐
61         j = 0;
62         while ((PSECTION->VirtualAddress + PSECTION->SizeOfRawData + j) % POPTIONAL->SectionAlignment != 0) {
63             fprintf(p2, "%c", 0x00);
64             j++;
65         }
66         //cout << i << endl;
67         //指向下一个节表
68         if (i < PFILE->NumberOfSections - 1) {
69             PSECTION = (PIMAGE_SECTION_HEADER)((char*)PSECTION + 0x28);
70         }
71     }
72 
73     return 0;
74 }

 

以上是关于FILEBUFFER TO IMAGEBUFFER的主要内容,如果未能解决你的问题,请参考以下文章

是否有 JMagick 和 ImageBuffer/ImageIO for Java 的替代品来调整/裁剪图像?

如何在 nodejs 中使用 fs 模块将图像写入特定目录?

Discord.js 使用来自其他消息的附件来更新嵌入中的图像

C# 视频流操作

从相机 prosilica 中保存 Mat 图像

在 try 块中抛出异常后,catch 块不会立即执行