파일의 각 바이트를 읽으려면 fgetc
함수를 사용하고 printf
으로 씁니다.fgetc가 파일을 읽는 동안 바이트를 놓치지 않습니다.
가끔은 fgetc
이 16 진수 편집기와 결과를 비교할 때 몇 바이트를 놓친 것으로 나타났습니다. 예를 들어
는 첫 번째 실수는 118 바이트 주위에 시작하고, 무작위로 다른 많은 실수는 ...
누군가가 이제까지 이것을 경험?
이
코드 (윈도우) 바이너리 모드에서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')? 텍스트 모드 또는 바이너리 모드로 파일을 열었습니까? –