Autor Wątek: [4k intro] Quantum Core  (Przeczytany 3497 razy)

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Wrzesień 08, 2010, 00:43:42
Cytuj
Stripujesz też CRT runtime na bank.
E... że niby co stripuję? Stripowanie runtime jest prawie niewykonalne... jak się pisze całe intro w masmie. :D

Cytuj
Jeśli tak i masz globalne zmienne, to masz potencjalnie poważny problem na Win7. ;]
O ile sekcje BSS i DATA podchodzą pod globalne zmienne. ;)

A tak serio, to co tam z globalami w Win7 wykombinowali?

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline ConayR

  • Użytkownik

# Wrzesień 08, 2010, 01:09:15
E... że niby co stripuję? Stripowanie runtime jest prawie niewykonalne... jak się pisze całe intro w masmie. :D
A to ja przepraszam. :]

Cytuj
A tak serio, to co tam z globalami w Win7 wykombinowali?
Szczerze? Nie wiem, nie rozwiązywałem póki co problemu, zlokalizowałem go tylko wstępnie. Na XP w globalnych mam śmieci, które sobie mogę w main zainicjalizować a na Win7 intro rzuca AV kiedy w ogóle próbuję dotknąć zmiennej. Być może problem jest jeszcze głębiej, ale przechodzę przez kernel32!BaseProcessStart i trafiam do własnego kodu, więc niespecjalnie widzę co jeszcze mogłoby być problemem już w pierwszej linijce.

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Wrzesień 08, 2010, 01:20:14
Cytuj
Nie wiem, nie rozwiązywałem póki co problemu, zlokalizowałem go tylko wstępnie. Na XP w globalnych mam śmieci, które sobie mogę w main zainicjalizować a na Win7 intro rzuca AV kiedy w ogóle próbuję dotknąć zmiennej.
Bardzo dziwne zachowanie. W niezainicjalizowanych globalnych powinieneś mieć zera (sekcja BSS), a w zainicjalizowanych stałymi oczywiście owe stałe (sekcja DATA). Do obu powinien być dozwolony zapis.

Offline ConayR

  • Użytkownik

# Wrzesień 08, 2010, 01:25:26
Łączę wszystkie sekcje razem za pomocą #pragma comment(linker...), więc nie mam żadnych oczekiwań wobec zawartości zmiennych. Inicjalizowanie zmiennych globalnych i stałych wartościami nie ma IMO w ogóle prawa działać jeśli się używa VC++ i omija się CRT startup, bo to tam następuje przypisywanie wartości.

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Wrzesień 08, 2010, 01:54:20
Cytuj
Łączę wszystkie sekcje razem za pomocą #pragma comment(linker...), więc nie mam żadnych oczekiwań wobec zawartości zmiennych.
Używasz Crinklera? Jeżeli tak, to raczej tą pragmę oleje.

Cytuj
Inicjalizowanie zmiennych globalnych i stałych wartościami nie ma IMO w ogóle prawa działać jeśli się używa VC++ i omija się CRT startup, bo to tam następuje przypisywanie wartości.
W takim razie żadne z moich intr nie ma prawa w ogóle działać. ;)

CRT startup jedynie odpowiada za inicjalizację tych zmiennych, które wymagają konstruktora. Każdy plik .cpp generuje ukrytą funkcję odpalająca konstruktory i zapisuje jej adres w specjalnym segmencie, po którym przechodzi CRT odpalając te funkcje (to samo z destruktorami). Pozostałe globalne nie wymagają inicjalizacji przez CRT.
int moje_zero; // inicjalizowane na zero (sekcja BSS)
int moje_jeden = 1; // inicjalizowane na 1 (sekcja DATA)

Dodatkowo inicjalizacje zerem są całkowicie darmowe, jeżeli o 4k chodzi (powiększają tylko rozmiar sekcji BSS, która nie jest trzymana w exe), tylko z sekcją DATA trzeba uważać - tam siedzą zwykłe dane trzymane w exe, czyli zainicjalizowane globale, łańcuchy tekstowe, stałe zmiennoprzecinkowe, itp.

P.S. Jeżeli potrzebowałbyś pomocy w debugowaniu tego, wal śmiało na PM. :)

Offline ConayR

  • Użytkownik

# Wrzesień 08, 2010, 05:11:53
Cytuj
Łączę wszystkie sekcje razem za pomocą #pragma comment(linker...), więc nie mam żadnych oczekiwań wobec zawartości zmiennych.
Używasz Crinklera? Jeżeli tak, to raczej tą pragmę oleje.
Używam i pewnie masz rację. :)

Cytuj
CRT startup jedynie odpowiada za inicjalizację tych zmiennych, które wymagają konstruktora.
Duh, oczywiście, że tak. W takim razie muszę grzebać ponownie.

Cytuj
P.S. Jeżeli potrzebowałbyś pomocy w debugowaniu tego, wal śmiało na PM. :)
Sądzę, że sobie poradzę jak będę miał Win7 w rękach. Ale w razie czego zgłoszę się. :]

Offline agent_J

  • Użytkownik

# Wrzesień 08, 2010, 19:50:59
U mnie na Win 7 x64 też się wywala :( Może jakaś wersja unpacked (1920x1080) ?

Prawdziwi demoscenowcy nie używają Win7 8)

Tak, bo o jakości systemu decyduje możliwość wykorzystywania hacków jako normalnej funkcjonalności ...

Offline Reg

  • Administrator
    • Adam Sawicki - Home Page

# Wrzesień 08, 2010, 20:07:32
Na moim 64-bitowym Windows 7 też nie działa - ani wersja oryginalna, ani ta udostępniona przez sendspace.com/file/yzxmgm .

Offline K'Aviash

  • Użytkownik

# Wrzesień 08, 2010, 20:19:43
Na Windows 7 x86 wysypuje się.

Offline Kos

  • Użytkownik
    • kos.gd

# Wrzesień 08, 2010, 20:24:26
Krzyśku, pamiętam że odpalałem kiedyś albo Hydrę, albo poprzednie, i działało... mniej więcej :). Wersja spakowana Crinklerem wysypwała się (nie pamiętam, ale chyba w taki sam sposób), a wersja większa niż 4K, którą również wrzuciłeś do paczki (bodajże jako nieskompresowaną) działała.

Offline smajler

  • Użytkownik

# Wrzesień 08, 2010, 20:29:12
gf8400gs Mobile
2x2.2 amd turion
2gb ram
640x480 - 7-9fps
1280x800 - 1-2fps
zjada:D

na radeonie jakis 5400 mobile wywala blad cos z DX