Twoje PC  
Zarejestruj się na Twoje PC
TwojePC.pl | PC | Komputery, nowe technologie, recenzje, testy
M E N U
  0
 » Nowości
0
 » Archiwum
0
 » Recenzje / Testy
0
 » Board
0
 » Rejestracja
0
0
 
Szukaj @ TwojePC
 

w Newsach i na Boardzie
 
TwojePC.pl © 2001 - 2022
Poniedziałek 17 lutego 2003 
    

Wielka premiera - procesor "TwojePC G7"


Autor: shadow | 21:40
(14)
Mamy świadomość, że wiadomość ta może Was zaskoczyć - wszak nie informowaliśmy nikogo o prowadzonych przez nas badaniach. Badaniach? Tak. Bez zbędnego rozgłosu udało nam się zgromadzić grono fachowców światowej klasy. Elektroników, inżynierów, specjalistów od budowy układów scalonych. Wszystko to, by zrealizować najbardziej chyba śmiały projekt Europy Środkowej... W pocie czoła, kosztem wielu wyrzeczeń rodził się początek rewolucji. Tworzyliśmy produkt, który zmiażdżyć miał konkurencję. Dzisiaj, po wielu miesiącach starań, morderczej pracy, po setkach nieprzespanych nocy, mamy wyjątkową przyjemność zaprezentować owoc naszych wysiłków, szczytowe osiągnięcie polskiej myśli technicznej: procesor TwojePC G7.


Spokojnie, spokojnie - starczy dla wszystkich, zaś sam upgrade nie będzie Was nic kosztował. Jak to możliwe? No cóż, tego... Dobrze, przyznaję - to tylko żart. W każdym bądź razie - w pewnym stopniu. Ale zacznijmy od początku.

Był sobie Athlon

Prawdziwym bohaterem tego tekstu będą procesory firmy AMD. Dokładniej - układy określane przez producenta "siódmą generacją" (Duron, Athlon, Athlon XP itd.). Na warsztat weźmiemy zapisaną w procesorze jego nazwę - tak, dokładnie - nazwę. Okazuje się, że może ona zostać zmieniona.

Pewnego dnia siedziałem sobie przeglądając dokumentację układów Athlon - interesował mnie sposób rozpoznania różnych odmian poszczególnego modelu (tj. Thoroughbred A/B, Barton, etc.). Nie byłbym sobą, gdybym poprzestał na rozróżnieniu podstawowego numeru CPUID - musiałem zapoznać się ze wszystkimi szczegółami. Czytając dokument oznaczony przez AMD numerem 20734, na stronie 14 natknąłem się na następującą adnotację:
This name string must be programmed into the processor by the BIOS. See the document, Displaying and Programming the Processor Name String BIOS Application Note, order# 90056.

(Nazwa musi zostać zaprogromowana przez BIOS. Po więcej informacji zajrzyj do: Wyświetlanie i programowanie nazwy procesora, #90056)

Rzecz dotyczyła wartości zwracanych przez rozszerzoną instrukcję CPUID - mówiąc bardziej zrozumiałym językiem: tego, co programy pokroju SiSoft Sandry czy WCPUID wyświetlają jako nazwę procesora. Nazwa ta ma być PROGRAMOWANA. Ciekawe, prawda? Tylko jak to zrobić? Nie muszę chyba dodawać, że dokument 90056 jest średnio dostępny. Hmm, czas zaprząc Google do roboty.

Flaczki a'la IA32: Machine Specific Registers

Wkrótce okazało się, że informacje na ten temat udostępniane przez firmę AMD są - delikatnie mówiąc - skąpe. Co robić? Miałem pewne podejrzenia - warto byłoby zajrzeć do rejestrów MSR. MSR? Procesory x86 (począwszy od Pentium) udostępniają zestaw specyficznych rejestrów kontrolnych - zwanych Machine Specific Registers. Nie inaczej jest w układach AMD - - niestety, zestaw dostępnych MSR zależy od rodziny procesorów. Jako posiadacz K6-III miałem pewien problem - skąd zdobyć listę MSR Athlona? Hmm... Google jak zwykle stanął na wysokości zadania - wkrótce miałem przed oczami zawartość MSR procesora K7. Świetnie. Co my tam mamy?

Google jak zwykle stanął na wysokości zadania - wkrótce miałem przed oczami zawartość MSR procesora K7. Świetnie. Co my tam mamy?

numer dane
...
MSR: c0010030, 20444d41 6c687441
MSR: c0010031, 74286e6f 5020296d
MSR: c0010032, 65636f72 726f7373
...


Tak, niezbyt zrozumiałe? Dodajmy do tego wartości ASCII:

...
MSR: c0010030, 20444d41 6c687441 (" DMA" "lhtA")
MSR: c0010031, 74286e6f 5020296d ("t(no" "P )m")
MSR: c0010032, 65636f72 726f7373 ("ecor" "ross")
...
Moment, to przecież "AMD Athlon(tm) Processor". Czy ja już gdzieś tego nie widziałem? Hej, to przecież nasza nazwa :)

Wróćmy na chwilę do dokumentacji - mowa tam o łańcuchu 48 bajtów (jeśli nazwa ma być krótsza, powinna być zakończona zerem). Ten ma dokładnie 24 bajty, a zauważyliście zapewne, że MSR ma szerokość 64 bitów (8 bajtów). Stąd prosty wniosek - prawodopodbnie kolejne trzy rejestry zawierałyby końcówkę dłuższego napisu. Zobaczymy...

Gdyby tak coś zmienić...

Pięknie, ale póki co nie wiemy nawet, czy możliwy jest zapis do "podejrzanych" MSR. By to sprawdzić, musimy zapoznać się z metodą dostępu do nich - instrukcjami RDMSR (Read MSR) oraz WRMSR (Write MSR).

InstrukcjaKodWejścieWyjście
RDMSR0F 32ECX - numer MSREDX:EAX - dane
WRMSR0F 30ECX - numer MSR
EDX:EAX - dane
brak


Rozkazy te mogą być wykonywane tylko na zerowym (z perspektywy uprawnień najwyższym) poziomie ochrony - wyklucza to możliwość wykorzystania ich podczas pracy większości nowoczesnych systemów operacyjnych. Powinniśmy też wiedzieć, że zapis do złego MSR skończyć się może (chociaż nie musi) wygenerowaniem wyjątku General Protection Fault. Jeśli nie postaramy się o obsługę takiej sytuacji, komputer zawiesi się. Przy okazji oznaczałoby to koniec zabawy - przynajmniej w ten sposób :( OK, wystarczy gadania - pora sklecić fragment kodu, który spróbuje przeprogramować nazwę - tj. MSR 0xC0010030 - 0xC0010035.

32 bajty niepewności

Postanowiłem za docelowy system operacyjny wybrać Windows rodziny 9x. Powód jest banalny - możemy bez zbędnych kombinacji uruchomić podczas startu pliki .COM. DOS, dinozaury, prehistoria - te klimaty? Może, ale programy takie uruchamiane są jeszcze przed przejściem procesora w tryb chroniony - tym samym do woli możemy używać WRMSR, a o to przecież chodzi. Oto namestr.com:

1. 66B9300001C0 mov ecx, 0xc0010030
2. BB2001 mov bx, 0x120
3. 668B07 mov eax, [bx]
4. 80C304 add bl, 0x4
5. 668B17 mov edx, [bx]
6. 80C304 add bl, 0x4
7. 0F30 wrmsr
8. 41 inc cx
9. 80F936 cmp cl, 0x36
10. 7402 jz 0x1f (jz 12.)
11. EBEA jmp short 0x9 (jmp 3.)
12. C3 ret


W pierwszej linii ustalamy początkowy numer MSR - ładujemy go bezprośrednio do ECX, by "zadowolić" WRMSR. Rejestr BX wykorzystamy do adresowania łańcucha nazwy - jej początek znajduje się zaraz za kodem programu (offset 0x20). Dlaczego więc w kodzie mamy wartość 0x120? Wynika to ze specyfiki formatu .COM - program ładowany jest począwszy od adresu 0x100. Dodajmy do tego 0x20 - no właśnie :) Wracając do programu - linie 3-6 ładują 8 bajtów spod adresu określonego w BX do rejestrów EAX oraz EDX. Za każdym razem BX zwiększany jest o 4 - tyle przecież bajtów mieści się w EAX czy EDX. Linia 7 to sedno sprawy - zapis do MSR. Ciekawe, czy się powiedzie ;) No cóż, już wkrótce się dowiemy - w linii 8 zwiększamy rejestr CX (zarazem ECX) - przypominam: numer MSR dla WRMSR. Dziewiąty wiersz sprawdza, czy doszliśmy do 0xC0010036 - pierwszego rejestru poza domniemaną nazwą. Gdy okaże się to prawdą, program skończy się - w przeciwnym wypadku zostanie zapisany kolejny MSR (skok do linii 3). To wszystko, naprawdę. Pozostaje na koniec dokleić samą nazwę, przykładowo:

66b9 3000 01c0 bb20 0166 8b07 80c3 0466 f.0.... .f.....f
8b17 80c3 040f 3041 80f9 3674 02eb eac3 ......0A..6t....
5477 6f6a 6550 4320 4737 2028 456e 6769 TwojePC G7 (Engi
6e65 6572 696e 6720 5361 6d70 6c65 2c20 neering Sample,
7265 7669 7369 6f6e 2041 3029 00 revision A0).


Dopiszmy wywołanie namestr do AUTOEXEC.BAT. Pozostaje zresetować komputer, i mocno zacisnąć kciuki...

Hmm... Uruchamia się!

Tak, to zawsze coś :) Poczekajmy kilka chwil. Jest? Super. Na pierwszy ogień idzie WCPUID:


Noo.. Sukces :) WCPUID posłusznie podaje informację o G7. Sandra - jak widzieliście na początku tekstu - również wyświetla zmienione dane. Wygląda na to, że nasze przypuszczenia potwierdziły się - wiemy, jak zmieniać nazwę procesora. Wiąże się z tym pewna ciekawostka - tym razem nazwę procesora zmieniłem na odpowiadającą modelowi 2200+. Przyjrzyjmy się dokładniej wynikom z Sandry. Spójrzmy:


Zwróćcie uwagę na zaznaczoną linię - Model Number. Śmieszna sprawa - Sandra, gdy w nazwie odnajdzie liczbę z plusem, traktuje ją jako oznaczenie modelu (przy G7 numer był mniej więcej poprawny). Tym samym bardzo prosto można przekonać biedaczkę o istnieniu Athlona XP 4000+ ;)

Parę słów na koniec

Mamy co chcieliśmy - możemy dowolnie manipulować nazwą procesora. Pozostało jedynie przenieść namestr do postaci akceptowanej przez inne systemy operacyjne, jak choćby Windows NT (celowo nie wspominam nawet Linuksa - mając dostęp do źródeł nie takie rzeczy możemy zmieniać ;). Chętnie zobaczę Wasze rozwiązania - miłej zabawy :)

Chciałem podziękować Michałowi i Andrzejowi za możliwość przetestowania kodu.

Autor: shadow

 

    
K O M E N T A R Z E
    

  1. ot dociekliwa bestia! (autor: vaneck | data: 17/02/03 | godz.: 20:41)
    Podziwiam za pomysł. "Ładne, ale czy ma jakieś praktyczne zastosowanie?" - jak powiedziała młodziutka królewna na pierwszej... itd.

  2. hmm (autor: Duckman | data: 17/02/03 | godz.: 20:42)
    Dobre :))) hehe tylko gdzie testy :)? wpisz 9000+ i do dziela :)

  3. Może niedługo będzie można kupić (autor: Paweł27 | data: 17/02/03 | godz.: 21:04)
    w jakimś sklepiku Athlona 1700+ jako Athlona 2800+. Ktoś może zrobić niezłą kasiurę (jak to mówi KIEPSKI) na tym pomyśle???

  4. hehe fajniusi (autor: Thadeus | data: 17/02/03 | godz.: 21:17)
    a jak sie zdaje w okienkiu wlasicwosci mozna zmienic info w rejestrze sam kiedys tak zrobilem za czasow amdk62 :) i mialem wlasny procesor :)

    Hmm a nie zauwazylisce ze mozna dalej oszukwac w pseudobenchmarkach typu 3Dsmark - degradujemy sobie Athlona 2200+ mocno podkreconego do poziomu durona 700 i zadziwiwmay swiat wynikiem :)


  5. hmm... (autor: h-doc | data: 17/02/03 | godz.: 22:50)
    a da się tak na Celeronach?

  6. poza tym (autor: h-doc | data: 17/02/03 | godz.: 22:52)
    to miłe, że jeszcze ludzie dziobią coś w asemblerze. Od czasu wymarcia komodorków to już rzadkość! Na szczęście asembler x86 nie należy do najtrudniejszych i można się pobawić. Jeśli macie jakieś fajne progsy w asm to rzućcie!

  7. Pawel (autor: Chrisu | data: 17/02/03 | godz.: 23:06)
    BIOS i tak prawdę Ci powie przy starcie, bo o ile zrozumiałem to jest do 1-ego restsrtu.

    h-doc
    Poprosiłem kumpla żeby napisał programik (ja dawno asmem się nie bawiłem i wole nie ryzykować ;) ). Jak pójdzie na AMD poproszę aby pobawił się z Intelem :)


  8. niezły przekręt (autor: GULIwer | data: 18/02/03 | godz.: 00:48)
    lepszy niz Duron XP1200+ zintegrowany z ECSem :) Juz sie boje zakupów w hipermarkecie jeszcze te mody wprowadzą w bios sprzedawanych kompów i niezłe jaja zaplombuja kompa i brr, wole nie myślec, dobrze że sam se składam blaszaka :)

  9. A mialem nadzieje..... (autor: Gary | data: 18/02/03 | godz.: 02:50)
    A juz mialem nadzieje ze na rynek procesorow wejdzie TwojePC. Hehehe stanowilibyscie pewnie niezla konkurencje dla intela i amd..... hehe :-)

  10. male wyjasnienie (autor: _shadow_ | data: 18/02/03 | godz.: 08:35)
    Niestety, ta sztuczka nie zadziala na procesorach Intela - co prawda nowsze implementuja rozszerzone CPUID, ale zestaw oferowanych MSR jest inny. Gdyby zas ktos chcial robic przekrety modyfikujac BIOS, moglby po prostu zmienic napisy, bez samej nazwy.

  11. ;))) Fajne ;))) (autor: NimnuL-Redakcja | data: 18/02/03 | godz.: 08:55)
    początkowo myslalem, ze PowerMac wypuscil nowego proca TwojePC ;)
    hehe ;)


  12. shadow (autor: Chrisu | data: 18/02/03 | godz.: 13:30)
    ale mi chrapkę zrobiłeś, a tu nic z tego ;)

  13. Chrisu (autor: _shadow_ | data: 18/02/03 | godz.: 13:39)
    tez bym taki CPU chcial, K6-3 troche sie wysluzyl :)

  14. ot i problem, (autor: Ponczo | data: 18/02/03 | godz.: 22:46)
    mi się udało zmienić nazwę z Durona na Pentium4, modifikująć odlowienio BIOS :-)

    
D O D A J   K O M E N T A R Z
    

Aby dodawać komentarze, należy się wpierw zarejestrować, ewentualnie jeśli posiadasz już swoje konto, należy się zalogować.