私はファイルの各バイトを読むために関数fgetc
を使用して、printf
でそれを書きます。fgetcはファイルを読み取っている間にバイトを逃します
時々、fgetc
は、結果を16進エディタと比較すると、いくつかのバイトが欠落していることに気付きました。例えば
、最初の間違いは、118番目のバイトの周りに開始され、他の多くのミスがランダムに...
誰かが今までにこれを経験しましたか?
これはコード(Windowsの場合)
char main(int argc, char* argv[]) {
FILE* fdIn;
FILE* fdOut;
long size = 0;
long i = 0;
char c = 0;
if (argc == 3) {
if ((fdIn = fopen(argv[1], "rt")) == NULL) {
printf("FAIL\n");
return 0;
}
if ((fdOut = fopen(argv[2], "w+")) == NULL) {
printf("FAIL\n");
return 0;
}
fseek(fdIn, 0L, SEEK_END);
size = ftell(fdIn);
fseek(fdIn, 0L, 0);
fprintf(fdOut, "unsigned char shellcode[%ld] = {", size);
while (i < size) {
c = fgetc(fdIn);
if (!(i % 16))
fprintf(fdOut, "\n\t");
fprintf(fdOut, "0x%02X", (unsigned char)c);
if (i != size - 1)
fprintf(fdOut, ", ");
i++;
}
fprintf(fdOut, "\n};\n");
fclose(fdIn);
fclose(fdOut);
printf("SUCCESS");
system("PAUSE");
}
return 0;
}
バイナリモードでファイルを開きます。 – chux
あなたのコード、テストデータ、期待される結果、実際の結果を教えてください。 – NineBerry
WIndowsで作業していますか?行方不明の文字はCR( '\ r'、' \ 012')ですか?あるいは^ Z( '\ 032')?テキストモードまたはバイナリモードでファイルを開いたのですか? –