こうこく
作 ▸

Cで開始アドレスと終了アドレスを指定してバイナリ切り出してみる

#C

※ど習作です。バイナリに埋め込まれてたPNG画像をどうしても見たくて、せっかくなのでCやってみました。

binext.c
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
	char *endptr;
	long startaddr, endaddr, size;
	FILE *fp;
	unsigned char buf[100000];

	if (argc != 5) {
		printf("パラメータの数がおかしいです。");
		exit(1);
	}

	startaddr = strtol(argv[3], &endptr, 16);
	endaddr = strtol(argv[4], &endptr, 16);
	size = endaddr - startaddr + 1;
	if (size <= 0) {
		printf("取得対象アドレスの指定がおかしいです。");
		exit(1);
	}

	if((fp = fopen(argv[1], "rb")) == NULL) {
		printf("入力ファイルが見つかりませんでした。");
		exit(1);
	}
	fseek(fp, startaddr, SEEK_SET);
	fread(buf, 1, size, fp);
	fclose(fp);

	fp = fopen(argv[2], "wb");
	fwrite(buf, 1, size, fp);
	fclose(fp);

	return 0;
}

パラメータは「バイナリファイルのパス」「出力ファイル名」「開始アドレス (16進数)」「終了アドレス (16進数)」です。以下のように使います。

binext "path\to\binary.dat" "output.png" 1481DBCD 14828990
この記事に何かあればこちらまで (非公開)