コマンドラインでファイルパスを引数として受け取り、そのコピーを作成するCでプログラムを作成しようとしています。これが私の情報源です。Cでコピーされたファイルが動作しない
#include <stdio.h>
#include <stdlib.h>
int main(int args, char* argv[])
{
if (args != 2)
{
printf("Error: Wrong number of arguments.\n");
printf("Enter the path of the file to be copied as the only argument.\n");
system("PAUSE");
return 1;
}
FILE *fsource;
FILE *fshellcode;
if((fsource = fopen(argv[1],"rb")) == NULL)
{
printf("Error: Could not open source file. Either the path is wrong or the file is corrupted.\n");
system("PAUSE");
return 2;
}
if((fshellcode = fopen("shellcode.exe","wb")) == NULL)
{
printf("Error: Could not create shellcode.exe file.\n");
system("PAUSE");
return 3;
}
char c;
while ((c = fgetc(fsource) != EOF))
{
fputc(c,fshellcode);
}
fclose(fsource);
fclise(fshellcode;
return 0;
}
私はプログラムが正しくそれにソースexeファイルからのすべてのバイトshellcode.exeとコピーを作成し、引数として働いてexeファイルのパスを入力します。私は新しいexeファイルを実行しようとすると、私は次のエラーメッセージを取得考えた:どのように
The version of this file is not compatible with the version of Windows you're running.
をソースexeファイルは私の64ビット版のWindows 7システム上で正常に動作しているときに可能ということでしょうか?
'fclise(fshellcode;'は間違っています。 _true_コードを切り取り、貼り付けます。 – chux
ファイルにはデータとは別の属性があります。おそらく、特定の権限も必要になるでしょう。 – chux
'fgetc()'を使ってバイト単位でソースファイルを取得し、EOFをチェックすることは正しく動作しません。 fseek(fp、0、SEEK_SET)、fseek(fp、0、SEEK_END)次に、frees()、fwrite(fp、 )転送されたバイトの総数がbytesInFileに等しくなるまで。関数の戻り値を常にチェックしてエラーをキャッチしてください – user3629249