Death code
3 sujets de 1 à 3 (sur un total de 3)
-
Mod
Salut,
J’ai lu un article sur les death code dont l’objet est de mettre toutes les adresses mémoires à zéro ainsi que le code qui assure cela.
N’ayant plus de machine en route pour tester et sur winuae, ça explose, voici le fruit de mes recherches pour mettre à zéro toute la mémoire :
NB : prévu pour 68000 seulement. Pas de prise en compte des caches, MMU et tout le toutim…
Start
; Tout le monde dehors. On ferme!
; Vire dma + interruptions = yapluklecpuquibouge.
move.w #$7fff, $dff096
move.w #$7fff, $dff09a
move.w #$7fff, $dff09c
; nettoyage A0
suba.l a0,a0
; boucle de nettoyage. Je nettoie en pré décrément 0 soit $FFFF FFFC, première adresse nettoyée.
; clr.l -(a0) -> $42a0
; bra.s -4(pc) -> $60FC
; Je m’installe à l’adresse 0…
move.l #42a060fc,$0
; Je saute à l’adresse 0. En avant John. Nettoie!
jmp $0
Logiquement quand j’arrive à l’adresse $4, le coup suivant, je m’efface…
Est ce que cela fonctionne?
Je me demande ce qui se passe une fois le code effacé à l’adresse $0. Je suppose que le cpu effectue bêtement des ori.b #$0,d0 jusqu’à buter sur une adresse qui lève un bus error…
Encore du code inutile Mais c’est pour le coup de dire que c’est possible de faire un death code sur Amiga…
Source : Death code
Oui cela peut fonctionner en théorie sur un 68000, mais il faudrait être en mode superviseur et effectuer un reset (la commande assembleur) quand on touche aux addresses 0 et 4.
$0 => SP (la pile en mode superviseur)
$4 => jump code (le code a exécuter)
Or dans l’Amiga il existe une bascule spéciale matérielle qui met en place la ROM dans l’espace d’adressage du 680×0 au démarrage.
Donc le bout de code que tu as mis ne sera jamais exécuté… vu que c’est le code de la ROM qui prend le dessus.
Peut-être que sur un vrai A1000, c’est possible de faire ce genre d’exploit.
… a partir des 68030 (20 ?) les adresses 0,4 et suivantes peuvent être déplacé (même en fast, certains patch font ça pour accélérer le systeme) par le registre VBR (vector base register) qui décale ces adresses. Donc pas de reset en 0 avec un VBR déplacé: donc pas oublier de remettre le VBR a zéro si besoin…
Déjà si on essai d’écrire sur une adresse qui existe pas ->plantage. Donc, commencer a ecrire des adresses non conventionelle c’est pas top, ya des fonctions systemes pour récuperer les plages memoires valides, dans exec je pense
Ya d’autre joyeusetées, certaines adresses chip sont en lecture seule (copper,…), essayer d’écrire dessus avec le CPU fait planter direct. *Ne pas* ecrire n’importe quoi (des zero) sur les adresses copper ( $DFF000-$DFF200 ) , ça régle le signal vidéo, yen a qui ont pété leurs moniteurs à l’époque il parait.
3 sujets de 1 à 3 (sur un total de 3)
- Vous devez être connecté pour répondre à ce sujet.
› Forums › AmigaOS, MorphOS et AROS › Développement › Death code