Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 29 gru 2024, o 07:28


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 7 maja 2017, o 08:19 
Offline
Użytkownik

Dołączył(a): 06 maja 2014
Posty: 415
Lokalizacja: Kraków
Pomógł: 26

Hej,
procedura obsługi przerwania standardowo wygląda tak, że na stosie odkładamy adres aktualnie wykonywanego adresu, potem przerwanie i na koniec powrót do odłożonego adresu, kontynuacja pracy programu.
Moje pytanie jest takie:
Czy jest jakiś sposób, żeby zmienić adres powrotu z przerwania (tzn. skoczyć do konkretnego, wybranego przeze mnie miejsca) ?
Myślę, że dałoby się to wykonać gdyby przy użyciu assemblera pościągać rejestry ze stosu, edytować ten adres powrotu i powrzucać na stos - ale czy da się łatwiej ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 maja 2017, o 08:31 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 2590
Pomógł: 128

Można (np. pobierajac ze stosu i odkładając na niego coś innego) - tylko po co? Można przez to sobie nieźle namieszać.

Sent from my Mi-4c using Tapatalk



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 maja 2017, o 08:56 
Offline
Użytkownik

Dołączył(a): 10 lip 2015
Posty: 334
Pomógł: 32

A jak myślisz, co by się stało, gdyby przerwanie wyskoczyło w trakcie np. mnożenia dwóch liczb o długości powiedzmy 2 bajtów a ty byś nagle skoczył do zupełnie innego miejsca?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 maja 2017, o 10:51 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 30 cze 2016
Posty: 247
Lokalizacja: Rybnik
Pomógł: 13

Tak, ale w assemblerze to najłatwiej będzie. Podam przykładowy kod
Składnia: [ Pobierz ] [ Ukryj ]
język asm
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
Situs != Situs



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 maja 2017, o 11:49 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1967
Lokalizacja: Lipsko
Pomógł: 125

Tylko zabawa stosem i to w asemblerze, bo tu trzeba mieć kontrole nad każdą komórką i adresem w pamięci. Robiłem tak dawno temu jeszcze na commodore podczas wymyślania różnych zabezpieczeń przed wścibskimi użytkownikami. Działało rewelacyjnie, a jak doszły do tego jeszcze timery i dynamiczne zmieniamy adres... W zasadzie program był prawie nie do złamania. Piszę "prawie", bo zazwyczaj wcześniej czy później ktoś pewnie obejście znajdzie :)

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 maja 2017, o 15:47 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 2590
Pomógł: 128

Robiło się tak za czasów 8-bitowców (ja mile wspominam czasy Z80) i robi sie to dzisiaj, ale tak jak wspomniał kolega SylwekK najczęściej z powodu zabezpieczeń lub ukrycia przed reverse engineeringiem i antywirusami - szukaj obfuscated code.
Myślę, że kolega raczej nie z tego powodu chciał sie tym posłużyć. Czekamy na więcej informacji.

Sent from my Mi-4c using Tapatalk



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 maja 2017, o 17:56 
Offline
Użytkownik

Dołączył(a): 06 maja 2014
Posty: 415
Lokalizacja: Kraków
Pomógł: 26

Dzięki za informacje - potwierdziło się, że tylko asemblerowa zabawa na stosie :)
Generalnie chodziło o to, że pętlę główną mam dość długą i chciałem, żeby przerwanie od timera (czy jakieś tam inne) powodowało skok do wybranej funkcji.

W taki razie zrobię to inaczej, nie będzie problemu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 5 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO