#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
FILE *fp_in;
FILE *fp_out;
unsigned char buf;
unsigned long address;
unsigned long filesize;
int count = 0;
/* 引数チェック */
if (argc != 4)
{
printf("%s <入力ファイル名> <先頭からの位置(バイト数)> <出力ファイル名>\n", argv
[0]); return 1;
}
/* 入力ファイルを開く */
fp_in
= fopen(argv
[1], "rb"); if (fp_in == NULL)
{
return 1;
}
/* 出力ファイルを開く */
fp_out
= fopen(argv
[3], "w"); if (fp_out == NULL)
{
return 1;
}
/* ファイルサイズ取得 */
fseek(fp_in
, 0, SEEK_END
);
/* ファイル名とサイズ表示 */
printf("ファイル名: %s\n", argv
[1]); printf("ファイルの大きさ: %lu Byte\n", filesize
);
fprintf(fp_out
, "ファイル名: %s\n", argv
[1]); fprintf(fp_out
, "ファイルの大きさ: %lu Byte\n", filesize
);
/* 開始アドレス取得 */
/* 指定位置へ移動 */
if (fseek(fp_in
, address
, SEEK_SET
) != 0) {
return 1;
}
/* バイナリ表示 */
while (fread(&buf
, 1, 1, fp_in
) == 1) {
/* 8バイトごとにアドレス表示 */
if (count % 8 == 0)
{
if (count != 0)
{
}
fprintf(fp_out
, "%08lX: ", address
); }
/* 16進数表示 */
count++;
address++;
}
/* ファイルを閉じる */
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCmludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCnsKICAgIEZJTEUgKmZwX2luOwogICAgRklMRSAqZnBfb3V0OwoKICAgIHVuc2lnbmVkIGNoYXIgYnVmOwogICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzOwogICAgdW5zaWduZWQgbG9uZyBmaWxlc2l6ZTsKICAgIGludCBjb3VudCA9IDA7CgogICAgLyog5byV5pWw44OB44Kn44OD44KvICovCiAgICBpZiAoYXJnYyAhPSA0KQogICAgewogICAgICAgIHByaW50Zigi5L2/55So5pa55rOVOlxuIik7CiAgICAgICAgcHJpbnRmKCIlcyA85YWl5Yqb44OV44Kh44Kk44Or5ZCNPiA85YWI6aCt44GL44KJ44Gu5L2N572uKOODkOOCpOODiOaVsCk+IDzlh7rlipvjg5XjgqHjgqTjg6vlkI0+XG4iLCBhcmd2WzBdKTsKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICAvKiDlhaXlipvjg5XjgqHjgqTjg6vjgpLplovjgY8gKi8KICAgIGZwX2luID0gZm9wZW4oYXJndlsxXSwgInJiIik7CiAgICBpZiAoZnBfaW4gPT0gTlVMTCkKICAgIHsKICAgICAgICBwcmludGYoIuWFpeWKm+ODleOCoeOCpOODq+OCkumWi+OBkeOBvuOBm+OCk+OAglxuIik7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAgLyog5Ye65Yqb44OV44Kh44Kk44Or44KS6ZaL44GPICovCiAgICBmcF9vdXQgPSBmb3Blbihhcmd2WzNdLCAidyIpOwogICAgaWYgKGZwX291dCA9PSBOVUxMKQogICAgewogICAgICAgIHByaW50Zigi5Ye65Yqb44OV44Kh44Kk44Or44KS6ZaL44GR44G+44Gb44KT44CCXG4iKTsKICAgICAgICBmY2xvc2UoZnBfaW4pOwogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgIC8qIOODleOCoeOCpOODq+OCteOCpOOCuuWPluW+lyAqLwogICAgZnNlZWsoZnBfaW4sIDAsIFNFRUtfRU5EKTsKICAgIGZpbGVzaXplID0gZnRlbGwoZnBfaW4pOwogICAgcmV3aW5kKGZwX2luKTsKCiAgICAvKiDjg5XjgqHjgqTjg6vlkI3jgajjgrXjgqTjgrrooajnpLogKi8KICAgIHByaW50Zigi44OV44Kh44Kk44Or5ZCNOiAlc1xuIiwgYXJndlsxXSk7CiAgICBwcmludGYoIuODleOCoeOCpOODq+OBruWkp+OBjeOBlTogJWx1IEJ5dGVcbiIsIGZpbGVzaXplKTsKCiAgICBmcHJpbnRmKGZwX291dCwgIuODleOCoeOCpOODq+WQjTogJXNcbiIsIGFyZ3ZbMV0pOwogICAgZnByaW50ZihmcF9vdXQsICLjg5XjgqHjgqTjg6vjga7lpKfjgY3jgZU6ICVsdSBCeXRlXG4iLCBmaWxlc2l6ZSk7CgogICAgLyog6ZaL5aeL44Ki44OJ44Os44K55Y+W5b6XICovCiAgICBhZGRyZXNzID0gYXRvbChhcmd2WzJdKTsKCiAgICAvKiDmjIflrprkvY3nva7jgbjnp7vli5UgKi8KICAgIGlmIChmc2VlayhmcF9pbiwgYWRkcmVzcywgU0VFS19TRVQpICE9IDApCiAgICB7CiAgICAgICAgcHJpbnRmKCLjgrfjg7zjgq/jgqjjg6njg7xcbiIpOwoKICAgICAgICBmY2xvc2UoZnBfaW4pOwogICAgICAgIGZjbG9zZShmcF9vdXQpOwoKICAgICAgICByZXR1cm4gMTsKICAgIH0KCiAgICAvKiDjg5DjgqTjg4rjg6rooajnpLogKi8KICAgIHdoaWxlIChmcmVhZCgmYnVmLCAxLCAxLCBmcF9pbikgPT0gMSkKICAgIHsKICAgICAgICAvKiA444OQ44Kk44OI44GU44Go44Gr44Ki44OJ44Os44K56KGo56S6ICovCiAgICAgICAgaWYgKGNvdW50ICUgOCA9PSAwKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKGNvdW50ICE9IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHByaW50ZigiXG4iKTsKICAgICAgICAgICAgICAgIGZwcmludGYoZnBfb3V0LCAiXG4iKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcHJpbnRmKCIlMDhsWDogIiwgYWRkcmVzcyk7CiAgICAgICAgICAgIGZwcmludGYoZnBfb3V0LCAiJTA4bFg6ICIsIGFkZHJlc3MpOwogICAgICAgIH0KCiAgICAgICAgLyogMTbpgLLmlbDooajnpLogKi8KICAgICAgICBwcmludGYoIiUwMlggIiwgYnVmKTsKICAgICAgICBmcHJpbnRmKGZwX291dCwgIiUwMlggIiwgYnVmKTsKCiAgICAgICAgY291bnQrKzsKICAgICAgICBhZGRyZXNzKys7CgogICAgfQoKICAgIHByaW50ZigiXG4iKTsKICAgIGZwcmludGYoZnBfb3V0LCAiXG4iKTsKCiAgICAvKiDjg5XjgqHjgqTjg6vjgpLplonjgZjjgosgKi8KICAgIGZjbG9zZShmcF9pbik7CiAgICBmY2xvc2UoZnBfb3V0KTsKCiAgICByZXR1cm4gMDsKfQo=