Re: Automodyfikacja kodu programu

Autor: Jaroslaw Lis (lis_at_ict.pwr.wroc.pl)
Data: Sat 26 Apr 1997 - 17:52:11 MET DST


On 26 Apr 1997 08:09:39 GMT, "Bogdan Gajewski"

>Cos w stylu:
> mov ax,77
> mov adres+1,ax
>adres jmp E4xx (oryg. xx=00)
>Interesuje mnie jak ten kod bedzie wykonany przez ruzne procesory.
>Zalaczam program ktury wykonuje samomodyfikujacy sie kod
>dla ruznej odleglosci kodu modyfikujacego od kodu
>modyfikowanego (0d 0 do 9 ).

To uwazaj:
8086 mial kolejki 4 slowa [dwubajtowe] - czyli na pewno wiecej
       niz 8 bajtow na przod nie zapamietal.
8088 mial 6 bajtow.

286 - ?
386 - 16 bajtow

>Program uruchomilem na K5 -wtedy kod jest zawsze zmieniany
>oraz na intel286 -kod jest zmieniany dla odleglosci >=6.
>Czy mogli byscie sprawdzic jak zachowaja sie inne procesory.

Tak w ogole, to jest jeszcze wazna metoda testowania, i multum innych
warunkow:
1) kolejka sie laduje w miare potrzeby lub wolnego dostepu do pamieci.
   wiec zalezy to mocno od poprzednio wykonywanych operacji.
2) kolejka jest czyszczona przy skokach. Jesli wiec skoczysz do
    instrukcji mov ax,77, to kolejka jest wyczyszczona, i
    niekoniecznie zdazy sie zaladowac zanim nastepny rozkaz sie
    wykona.
3) powyzszze nie zawsze dotyczy Pentiumow, ktore maja 'branch
    prediction', a w ogole wykonuja do kilku rozkazow jednoczesnie
    [na roznych etapach], i jeszcze sa delikatne zaleznosci miedzy
    instrukcjami.
4) sa rozne interakcje na poziomie rozlozenia programu pomiedzy bajty,
   slowa, linie cache, slowa pamieci... trzeba sprawdzac program
   przesuwajac go kolejno o 1 bajt.
5) przerwania niwecza caly efekt.

Sugeruje glowny test programu zrobic jakos tak:

        cli ;wylacz przerwania
        lea di,adres+1
        mov byte ptr di,77
        mov cl,77
        mov AX,30000
        mov bx,3
        div bx ;najdluzej wykonywana instrukcja :-)
        div bx ;zeby kolejka miala czas sie zaladowac
        div bx
        div bx
        div bx
        div bx
        div bx
        div bx ;moze jeszcze troche
        div bx ;tak ze 40 bajtow od zerowania [di]
        mov byte ptr [di],al ;po tych dzieleniach to al=0 :-)
        nop
        nop
adres mov al,77
;a teraz ile wynosi al -77?

>Wiem ze troche przeginam p. wysylajac bin na te liste ale
>zrudlo zajelo by 10X wiecej miejsca,a 300b mozna sciagnac
>w pare sekund wiec darujcie sobie uwagi w stylu:
>("ale palant" ,"powiesic go" ,"polbox do gazu")

ale palant. Mysli ze uruchomie podejrzany program na komputerze :-).



To archiwum zostało wygenerowane przez hypermail 2.1.7 : Tue 18 May 2004 - 16:03:49 MET DST