Dnia 29-08-2006 o godz. 14:36 Henio Paszczak napisał(a): > cześć. > Mam pytanie które nie dotyczy konkretne debiana ale > ogólnie porgramowania pod linuxem. > w Swoich programach w assemblerze (as) chciaiłbym > skorzystać z jednej ze sztuczek to znaczy zmieniania > kodu programu podczas jego działania, nie wiem czy to > jest możliwe. Aby sprecyzowac o co mi chodzi > zamieszcze przyklad: > > 1 movb $57,.+n # .- adres wykonywanej instrukcji > # n ilosc bajtow do $78 > 2 shufs $78,%xmm0,%xmm0. > > teraz procesor powinen widziec w lini 2 > > 2 shufs $57,%xmm0,%xmm0 > > niestety zawsze przy takich próbach otrzymuje błąd > ochrony pamięci .. czego należało by się spodziewać . > Czy jest jaiś sposób aby to ominąć ? > > Pozdrawiam > Lukas
Hmm. nie znam sie na asm za bardzo (koduję w C/C++), ale nasuwa mi się pewne rozwiązanie. Może spróbuj przechowywać w jakiejś zmiennej (w pamięci RAM, a nie w rejestrze procesora) adres do jednej funkcji (części kodu, która się normalnie wykonuje) a w innej zmiennej adres do innej funkcji (części kodu, która ma być podstawiona zamiast tej domyślnej). Potem jeśli w pewnym momencie programu chcesz żeby wykonała się inna funkcja niż domyślna, wystarczy że podmienisz adresy w wywołaniu funkcji. Używam terminu "funkcja" ale mam na myśli dowolny kawałek kodu. Mniej więcej wyglądało by to tak: ... wskaznik_do_funkcji_domyslnej: <kod funkcji domyslnej> ret ... wskaznik_do_funkcji_zastepczej: <kod funkcji zastepczej> ret ... zmienna_przechowujaca_do_funkcji = wskaznik_do_funkcji_domyslnej (<-to jako definicja globalnej zmiennej) ... potem w kodzie programu, w miejscu gdzie wywolujesz funkcję: call zmienna_przechowujaca_do_funkcji a jesli chcesz zmenic wywoływaną funkcję (np. po wciśnięciu jakiegoś klawisza) to piszesz: zmienna_przechowujaca_do_funkcji = wskaznik_do_funkcji_zastepczej gdy chcesz wrócić do domyślnej funkcji: zmienna_przechowujaca_do_funkcji = wskaznik_do_funkcji_domyslnej Mniej więcej tak się to rozwiązuje w C/C++ - używa się tam po prostu wskaźników do funkcji (które są definiowanym przez programistę typem zmiennej), a jeśli idzie to zrobić w języku wysokiego poziomu to znaczy że w asm na pewno. Tylko nie mam pojęcia czy jest to realizowane w przedstawiony przeze mnie sposób;) Tomek ---------------------------------------------------- Weekendowe trunkowanie czyli przepisy na drinki i nalewki - Kliknij: http://klik.wp.pl/?adr=http%3A%2F%2Fadv.reklama.wp.pl%2Fas%2Fk23.html&sid=859 -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]