Death code

3 sujets de 1 à 3 (sur un total de 3)

  • Mod

    Tcheko

      #5503

      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

      Gilloo

        #92604

        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.

        krabob

          #92605

          … 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

        Amiga Impact