Advertisement
Guest User

Untitled

a guest
Dec 19th, 2018
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.27 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <sys/stat.h>
  3. #include <string.h>
  4.  
  5. int main(int argc, char *argv[])
  6. {
  7.     int val;
  8.     // Otwieramy nasz plik wykonywalny
  9.     FILE *fmain = fopen(argv[0],"rb");
  10.  
  11.     // Tworzymy tymczasowy plik
  12.     char tmpname[strlen(argv[0])+5];
  13.     strcpy(tmpname,argv[0]);
  14.     strcat(tmpname,".tmp");
  15.     FILE *ftmp = fopen(tmpname,"wb+");
  16.     chmod(tmpname,0777);
  17.  
  18.     // Kopiujemy bajt po bajcie
  19.     int ch;
  20.     while ((ch = fgetc(fmain)) != EOF) fputc(ch, ftmp);
  21.  
  22.     // Tutaj można zmodyfikować ftmp
  23.     fseek(ftmp,-sizeof(int),SEEK_END);
  24.     int x = getw(ftmp);
  25.     if (x == 0x55665566) {
  26.         fseek(ftmp,-sizeof(int)*2,SEEK_END);
  27.         val = getw(ftmp);
  28.         val++;
  29.  
  30.         fseek(ftmp,-sizeof(int)*2,SEEK_END);
  31.  
  32.         putw(val, ftmp);
  33.  
  34.     } else {
  35.         putw(1, ftmp);
  36.         putw(0x55665566, ftmp);
  37.         val = 1;
  38.     }
  39.  
  40.     printf("Liczba uruchomień: %d\n", val);
  41.  
  42.     // Zamykamy i podmieniamy
  43.     fclose(fmain);
  44.     fclose(ftmp);
  45.     rename(tmpname,argv[0]);
  46.  
  47.     return 0;
  48. }
  49.  
  50. // // Ustawia pozycję na jeden int przed końcem pliku
  51. // fseek(ftmp,-sizeof(int),SEEK_END);
  52. // // Odczytuje jeden int z pliku
  53. // int x = getw(ftmp);
  54. // // Zapisuje jeden int do pliku
  55. // putw(ftmp,x);
  56. // Uwaga: Nie polec
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement