我怎样才能从一个串联的二进制文件中分割出一个二进制文件
How can I carve out one binary file from a concatenated binary
基本上,我在 Linux 上使用 "cat" 命令组合两个二进制文件。
我希望能够使用 C 再次将它们分开
这是我目前得到的代码
int main(int argc, char *argv[]) {
// Getting this file
FILE *localFile = fopen(argv[0], "rb");
// Naming a new file to save our carved binary
FILE *newFile = fopen(argv[1], "wb+");
// Moving the cursor to the offset: 19672 which is the size of this file
fseek(localFile, 19672, SEEK_SET);
// Copying to the new file
char ch;
while ( ( ch = fgetc(localFile) ) != EOF ) {
fputc(ch, newFile);
}
}
假设您已经知道第二个文件的起始位置。您可以按以下步骤进行。 (这是最低限度的)
#include <stdio.h>
#include <unistd.h>
int main()
{
FILE* f1 = fopen("f1.bin", "r");
FILE* f2 = fopen("f2.bin", "w");
long file1_size = 1;
lseek(fileno(f1), file1_size, SEEK_SET);
char fbuf[100];
int rd_status;
for( ; ; ) {
rd_status = read(fileno(f1), fbuf, sizeof(fbuf));
if (rd_status <= 0)
break;
write(fileno(f2), fbuf, rd_status);
}
fclose(f1);
fclose(f2);
return 0;
}
输入文件 -- f1.bin
1F 2A
输出文件 -- f2.bin
2A
请根据您的示例修改文件名和文件大小。
基本上,我在 Linux 上使用 "cat" 命令组合两个二进制文件。 我希望能够使用 C 再次将它们分开 这是我目前得到的代码
int main(int argc, char *argv[]) {
// Getting this file
FILE *localFile = fopen(argv[0], "rb");
// Naming a new file to save our carved binary
FILE *newFile = fopen(argv[1], "wb+");
// Moving the cursor to the offset: 19672 which is the size of this file
fseek(localFile, 19672, SEEK_SET);
// Copying to the new file
char ch;
while ( ( ch = fgetc(localFile) ) != EOF ) {
fputc(ch, newFile);
}
}
假设您已经知道第二个文件的起始位置。您可以按以下步骤进行。 (这是最低限度的)
#include <stdio.h>
#include <unistd.h>
int main()
{
FILE* f1 = fopen("f1.bin", "r");
FILE* f2 = fopen("f2.bin", "w");
long file1_size = 1;
lseek(fileno(f1), file1_size, SEEK_SET);
char fbuf[100];
int rd_status;
for( ; ; ) {
rd_status = read(fileno(f1), fbuf, sizeof(fbuf));
if (rd_status <= 0)
break;
write(fileno(f2), fbuf, rd_status);
}
fclose(f1);
fclose(f2);
return 0;
}
输入文件 -- f1.bin
1F 2A
输出文件 -- f2.bin
2A
请根据您的示例修改文件名和文件大小。