Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

C/C++ Zapis zmiennej do pliku *.exe

ussooo 06 Sty 2005 17:38 4165 8
  • #1 06 Sty 2005 17:38
    ussooo
    Poziom 9  

    W jaki sposób zrealizowac w C/C++ zapis/odczyt zmiennej w programie do własnego piliku *.exe np. przechowującej ilość jego uruchomień.

    Znalazłem sposób ale on jest napisany w Delphi:
    http://community.borland.com/article/0,1410,27979,00.html

    ---
    Pozdrawiam

    0 8
  • #2 06 Sty 2005 18:28
    Bielsky
    Poziom 20  

    Zapuściłem takie wyszukiwanie w googlach:
    c++ "variables in exe"
    pokazało się coś takiego:
    http://www.programmersheaven.com/zone24/cat31/4202.htm
    Nie wiem na ile się przyda, ale widzę, że jest tam procedura w c.
    Napisz, czy Ci się coś udało zrobić, też ciekawi mnie ten problem.
    Jeżeli będę miał w weekend troochę czasu- przestudiuję ten tekst z borlanda.

    0
  • #3 08 Sty 2005 15:13
    ussooo
    Poziom 9  

    Spróbowałem skompilować ten program na Borland C++ Bilder 6 oraz na Dev C++ 4.9.9.0 i mi się to nie udało :(

    Borland C++ (va_start(datalist, keep_attribs);):

    Code:
    [C++ Warning] dos.h(272): W8058 Cannot create pre-compiled header: code in header
    
    [C++ Error] execs.c(133): E2451 Undefined symbol 'keep_attribs'
    [C++ Error] execs.c(133): E2109 Not an allowed type
    [C++ Warning] execs.c(139): W8065 Call to function 'FP_OFF' with no prototype
    [C++ Warning] execs.c(142): W8065 Call to function 'FP_SEG' with no prototype
    [C++ Error] execs.c(142): E2451 Undefined symbol '_psp'
    [C++ Warning] execs.c(142): W8065 Call to function 'FP_OFF' with no prototype
    [C++ Warning] execs.c(146): W8012 Comparing signed and unsigned values
    [C++ Warning] execs.c(146): W8012 Comparing signed and unsigned values


    Dev C++ (#include "exemod.h"):
    Code:
    31 C:\Documents and Settings\Administrator\Pulpit\EXEMOD\main.c In file included from main.c 
    
    49 C:\Documents and Settings\Administrator\Pulpit\EXEMOD\exemod.h stray '\32' in program
    31 C:\Documents and Settings\Administrator\Pulpit\EXEMOD\main.c In file included from main.c
    55 C:\Documents and Settings\Administrator\Pulpit\EXEMOD\exemod.h:49 [Warning] no newline at end of file
     C:\Documents and Settings\Administrator\Pulpit\EXEMOD\main.c In function `exemodify':
    88 C:\Documents and Settings\Administrator\Pulpit\EXEMOD\main.c `MAXPATH' undeclared (first use in this function)
    itd....


    Z kompilacji w Dev C++ już zrezygnowałem (zbyt dużo błędów do przetrawienia). Czy moge jakoś te symbole z kórymi sobie Borland nie radzi w jakiś sposób zamienic na odpowiedniki z Borlanda??

    ---
    Pozdrawiam

    0
  • #4 08 Sty 2005 17:11
    elektryk
    Poziom 42  

    W przypadku systemu windows NIE JEST to możliwe, gdyż każdy plik EXE jeśli znajduje się w pamięci ma zablokowane prawo do zapisywania w tym pliku. Można to zrobić taką sztuczką, że program uruchamia inny program, sam siebie zakańcza a ten drugi program zmienia zawartośc tego pierwszego pliku. Pod systemem DOS jest to możliwe.

    0
  • #5 09 Sty 2005 13:50
    kult
    Poziom 16  

    wykorzystaj do tego drugi plik, po uruchomieniu programu, bedzie sprawdzal on czy plik istnieje, jesli nie to bedzie sie wylaczal, a jesli istnieje to bedzie sprawdzal dane.

    0
  • #6 10 Sty 2005 11:00
    Gavian
    Poziom 14  

    Do plików exe można zapisywać dane wystarczy zmienić charakterystyke sekcji z danymi. Najczesciej jest to sekcja .text Wystarczy ustawić 31 bit pola Characteristic. Można to zrobić w dowolnym programie do modyfikacji plików PE. Zapewne bedziesz musiał to zrobić bo kompilatory ustawiaja ten bit na 0.

    Pozdrawiam

    0
  • #7 10 Sty 2005 14:30
    elektryk
    Poziom 42  

    Gavian napisał:
    Do plików exe można zapisywać dane wystarczy zmienić charakterystyke sekcji z danymi. Najczesciej jest to sekcja .text Wystarczy ustawić 31 bit pola Characteristic.
    Sekcja .text jest to najczęsciej sekcja kodu programu i bardzo jest wskazane żeby nie było ustawiony bit umożliwiąjący zapis. Jak się go ustawi to na 100% można modyfikować kod programu załadowanego do pamięci (to działa, osobiście sprawdzone), ale wątpie czy by dało się w ten sposób zapisywać dane do pliku (nie sprawdzałem, wiem tyle ze te bity oznaczają atrybuty sekcji w obszarze pamięci).

    0
  • #8 10 Sty 2005 14:47
    Mart.ini
    Poziom 10  

    O moj Boże... ludzie o czym wy gadacie.... o ile dobrze pamietam to nie ma nic prostszego
    kiedyś znaczy sie dawno dawno temu pisałem programiki opd dosem....
    były to zwykłe exe-ki tylko 16bitowe.Doc zego zmierzam.... by zapisać dane do pliku exe wystarczyło go otworzyć(robiłem to w PASCALU!!!) przesunąć wskaźnik na koniec i zapisać swoje maksymalnie 64k danych. i działało.... nawet na pckurierze gdzies w archiwach powinno cos byc.
    Także każdy exec ma w nagłówku zapisane ile danych ma byc odczytanych i niezależnie czy coś dodasz nie wpłynie to na uruchamianie programu. także wydaje mi sie że w app 32bitowych nie ma różnicy ....
    może sie myle... ale raczej wątpie

    0
  • #9 10 Sty 2005 16:04
    elektryk
    Poziom 42  

    Mart.ini napisał:
    Także każdy exec ma w nagłówku zapisane ile danych ma byc odczytanych i niezależnie czy coś dodasz nie wpłynie to na uruchamianie programu. także wydaje mi się że w app 32bitowych nie ma różnicy ....
    Aha, w ten sposób są robione np selfextractory, że dodatkowe dane dołączone do pliku są poza obszarem przeznaczonym dla pliku wykonywalnego. Nawet można się pokusić o znalezienie ofsetu dla jakies stałej w programie i wpisywaniu wartości pod ten ofset, niestety nie da sie tego zrobić automatycznie, tylko trzeba robić ręcznie.

    0