LES INTERRUPTIONS SANS LES INT

Utilisateur anonyme - 7 févr. 2012 à 19:32
Guilou34 Messages postés 142 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 29 janvier 2016 - 22 févr. 2012 à 23:04
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/54049-les-interruptions-sans-les-int

Guilou34 Messages postés 142 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 29 janvier 2016 1
22 févr. 2012 à 23:04
Salut
Non seulement on ne gagne rien à faire un appel direct dans la table des interruptions, mais malheusement on perd au contraire énormément de temps.
En plus ton code est erroné, il faut exécuter:
Pushf ; sauve le registre d'état car un programme d'interruption se termine toujours par un Iret qui le restitue.
Il faut ensuite construire le call far 0000:nint*4 (nint étant le numéro de l'interruption) par exemple comme ceci:
mov ax,nint
shl ax,1
shl ax,1 ; certains processeurs refusent shl ax,2
mov cs:valeur,ax ; par défaut mov utilise ds
db 0cdh ;opcode de call far
dw,0 ;segment 0
valeur: db ?
...
Or tout cela l'instruction int n le réalise en quelques dizaines de coups d'horloge.
En fait un opcode sert d’adresse dans une mémoire dont chaque mot est fait de plusieurs dizaines de bits. Ce mot est présenté à une circuiterie qui exécute un microprogramme pouvant réaliser plusieurs actions simultanément par exemple sauver l’ip+5 (adresse de retour) sur la pile et en même temps multiplier ax par 4
Amicalement
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
13 févr. 2012 à 03:23
Pour ce qui est de la GDT, le livre IA32/64 de chez Intel devrait faire l'affaire.

Pour ce qui est du reverse engeneering du code réel, j'avais mis un source:
http://www.asmfr.com/codes/V86-HOOK-BIOS-DOS_35523.aspx
qui permettait de tracer le code bios en mode protégé.

@++
Utilisateur anonyme
11 févr. 2012 à 21:43
Bonjour patatalo :)

Tout-a-d'abord je fais ce contournement pour deux raisons :

Primo comme tu peux le voir à cette adresse http://www.iutc3.unicaen.fr/~fougep/assembleur/les_chapitres_du_cours/interruptions.html ( Ctrl-F: Déroulement d'une interruption logicielle)

qu'avant que la fonction, image de l'interruption, ne se déroule, il y a toutes une batterie d'instruction (Sauvegarde du CCR ...).

Et le call {segment:offset} que je réalise permet d'outrepasser ces instructions.

Et deuxio, je l'ai fait pour savoir comment marche une fonction, en connaissant l'adresse d'une interruption, je pourrais ainsi faire du reverse engenniring :) et de même encourager les personnes à le faire, comme par exemple comment marche les interruptions vesa ^^ .

Et je suis entièrement d'accord que les call à la fonction ne marche pas en mode 32 et 64 bits.

Bref voilà les raisons qui m'ont poussé à faire naitre ce topic :)

Et sinon est-ce que tu as un bon site qui traite de la GDT, car j'ai mis un code qui fait passer mon kernel en 64 bits et que je ne comprends pas et pour info il marche ^^ mais pour le poster j'ai besoin de commenter ce bout de code .

A++
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
11 févr. 2012 à 21:04
salut,

Ca sert a quoi concretement, vu qu'il est evident qu'un simple call n'emulera jamais le systeme des interruptions (surtout en mode protégé) ?


@++
Utilisateur anonyme
10 févr. 2012 à 21:05
Bonjour ManChesTer,
Tout à d'abord merci de m'avoir si bien noté ma source ^^
Et je voudrais savoir si tu as réussi à faire un call à l'adresse de la fonction appelée par int 10h.
Et aussi si tu as tenté de faire du reverse engineering à l'endroit des fonctions ^^

A++

(\___/)
(='.'=)
(")_(")

This is Bunny. Copy and paste bunny into...
...your signature to help him gain world domination
cs_ManChesTer Messages postés 374 Date d'inscription vendredi 20 octobre 2000 Statut Modérateur Dernière intervention 15 janvier 2021
10 févr. 2012 à 20:16
Salut a tous,

L'idt est en effet bio dépendant cependant, si je me rapelle bien, il y a un moyen fiable de trouver son adresse de départ, il existe 2 types d'adressage d'apels le 1 consiste a empiler les données puis faire le call, mais pour certaines int, il faut aussi transmetre des données via certains registres. J'ai beaucoups "joué" avec ces techniques avant la sortie des pentium. Si ca interesse du monde, je peux regarder dans mes archives comment on trouve l'adresse de l'idt et quels sont les parametres des int standads et récapituler tout ca dans une table.

Bon Coding....

ManChesTer.
Utilisateur anonyme
7 févr. 2012 à 19:32
Bonjour à tous
alors voila j'aimerais simplement savoir si vous avez réussi, surtout en ce qui concerne l'int 10h, car j'ai eu beau faire un call mais cela n'a pas marcher. Et avant de finir, une petite précision que j'ai omis de mettre dans la source, c'est que chaque BIOS à ces propre adresse pour chaque interruption appelée ^^

A+ :)
Rejoignez-nous