Page 1 sur 2

Traduction d'un code ASM

Publié : sam. 30/juil./2011 7:29
par DarkVader
Bonjour,

J'ai des soucis de traduction d'un code Asm dont la source est http://code.google.com/p/ostin/source/d ... utdown.asm
et dont l'objet est de reproduire un shutdown sans utiliser d'api windows.

Code : Tout sélectionner

Macro ShutDown
  
;;======================================================================================================================
;;///// shutdown.asm /////////////////////////////////////////////////////////////////////////////////////// GPLv2 /////
;;======================================================================================================================
;; (c) 2004-2008 KolibriOS team <http://kolibrios.org/>
;; (c) 2003 MenuetOS <http://menuetos.net/>
;;======================================================================================================================
;; This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public
;; License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later
;; version.
;;
;; This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
;;
;; You should have received a copy of the GNU General Public License along with this program. If not, see
;; <http://www.gnu.org/licenses/>.
;;======================================================================================================================

EnableASM
Define old_ints_h=0

    !align 4
;-----------------------------------------------------------------------------------------------------------------------
pr_mode_exit: ;/////////////////////////////////////////////////////////////////////////////////////////////////////////
;-----------------------------------------------------------------------------------------------------------------------
    ; setup stack
    !mov ax, [3000h]
    !mov ss, ax
    !mov esp, [ec00h]
    ; setup ds
    !push cs
    !pop ds
    
    !lidt [old_ints_h]
    ; remap IRQs
    !mov al, [11h]
    !out 20h, al
    !call l_rdelay
    !out a0h, al
    !call l_rdelay
    
    !mov al, 8h
    !out 21h, al
    !call l_rdelay
    !mov al, [70h]
    !out a1h, al
    !call l_rdelay
    
    !mov al, [04h]
    !out 21h, al
    !call l_rdelay
    !mov al, [2h]
    !out a1h, al
    !call l_rdelay
    
    !mov al, [1h]
    !out 21h, al
    !call l_rdelay
    !out a1h, al
    !call l_rdelay
    
    !mov al, [b8h]
    !out 21h, al
    !call l_rdelay
    !mov al, [bdh]
    !out a1h, al
    !sti

temp_3456:
    !xor ax, ax
    !mov es, ax
    !mov al, [es:BOOT_VRR]
    !cmp al, 1
    !jl .nbw
    !cmp al, 4
    !jle .nbw32

nbw:
    !in al, 60h
    !cmp al, 6
    !jae l_nbw
    !mov bl, al

nbw2:
    !in al, 60h
    !cmp al, bl
    !je l_nbw2
    !cmp al, 240 ; ax, 240
    !jne l_nbw31
    !mov al, bl
    !dec ax
    !jmp l_nbw32

nbw31:
    !add bl, 128
    !cmp al, bl
    !jne l_nbw
    !sub al, 129

nbw32:
    !dec ax
    !dec ax ; 2 = power off
    !jnz l_no_apm_off
    !call l_APM_PowerOff
    !jmp $

no_apm_off:
    !dec ax ; 3 = reboot
    !jnz l_restart_kernel ; 4 = restart kernel
    !push [40h]
    !pop ds
    !mov word[72h], 1234h
    !jmp f000h:fff0h

restart_kernel:
    !mov ax, [0003h] ; set text mode for screen
    !int 10h
    !jmp 4000h:0

;-----------------------------------------------------------------------------------------------------------------------
rdelay: ;///////////////////////////////////////////////////////////////////////////////////////////////////////////////
;-----------------------------------------------------------------------------------------------------------------------
    !ret

;-----------------------------------------------------------------------------------------------------------------------
APM_PowerOff: ;/////////////////////////////////////////////////////////////////////////////////////////////////////////
;-----------------------------------------------------------------------------------------------------------------------
    !mov ax, [5304h]
    !xor bx, bx
    !int 15h
    ;!!!!!!!!!!!!!!!!!!!!!!!!
    !mov ax, [5300h]
    !xor bx, bx
    !int 15h
    !push ax
    
    !mov ax, [5301h]
    !xor bx, bx
    !int 15h
    
    !mov ax, [5308h]
    !mov bx, 1
    !mov cx, bx
    !int 15h
    
    !mov ax, [530eh]
    !xor bx, bx
    !pop cx
    !int 15h

    !mov ax, [530dh]
    !mov bx, 1
    !mov cx, bx
    !int 15h
    
    !mov ax, [530fh]
    !mov bx, 1
    !mov cx, bx
    !int 15h
    
    !mov ax, [5307h]
    !mov bx, 1
    !mov cx, 3
    !int 15h
    ;!!!!!!!!!!!!!!!!!!!!!!!!
    !ret

;-----------------------------------------------------------------------------------------------------------------------
restart_kernel_4000: ;//////////////////////////////////////////////////////////////////////////////////////////////////
;-----------------------------------------------------------------------------------------------------------------------
    !cli
    
    !push ds
    !pop es
    !mov cx, [8000h]
    !push cx
    !push [7000h]
    !pop ds
    !xor si, si
    !xor di, di
    !rep movsw
    !pop cx
    !mov ds, cx
    !push [2000h]
    !pop es
    !rep movsw
    !push [9000h]
    !pop ds
    !push [3000h]
    !pop es
    !mov cx, [e000h / 2]
    !rep movsw
    
    !wbinvd ; write and invalidate cache

    !mov al, 00110100b
    !out 43h, al
    !jcxz $ + 2
    !mov al, [ffh]
    !out 40h, al
    !jcxz $ + 2
    !out 40h, al
    !jcxz $ + 2
    !sti

    ; We must read data from keyboard port,
    ; because there may be situation when previous keyboard interrupt is lost
    ; (due to return to real mode and IRQ reprogramming)
    ; and next interrupt will not be generated (as keyboard waits for handling)
    !in al, 60h
    
    ; bootloader interface
    !push [1000h]
    !pop ds
    !mov si, l_kernel_restart_bootblock
    !mov ax, 'KL'
    !jmp 1000h:0
    

DisableASM    

    
EndMacro
Merci de votre aide

Re: Traduction d'un code ASM

Publié : sam. 30/juil./2011 11:59
par Ar-S
Je ne peux pas t'aider en assembleur mais pourquoi ne pas utiliser un runprogram() avec "Shutdown.exe" ?
Paramètre "-s" : Met l'ordinateur hors tension
paramètre "-r" : Éteint et redémarre

Re: Traduction d'un code ASM

Publié : sam. 30/juil./2011 12:04
par djes
Sans regarder plus avant, je pense que tu dois être en ring 0 pour pouvoir faire ça.

Re: Traduction d'un code ASM

Publié : sam. 30/juil./2011 16:53
par graph100
et c'est possible d'être en ring 0 avec PB ? ou avec un prog sous window en général ?

Re: Traduction d'un code ASM

Publié : sam. 30/juil./2011 19:17
par Kwai chang caine
Et bien sur c'est encore moi qui vais me taper la honte et oser poser la question que tout le monde se pose :oops:

Re: Traduction d'un code ASM

Publié : sam. 30/juil./2011 19:54
par nico
Quand tu exécute un programme purebasic, celui-ci s'exécute en mode ring 3 ou userland si je ne dis pas de bêtise, pour avoir accès directement aux ressources systèmes, le ring 0 dit kernelland, il faut passer par un driver qui permet donc de modifier le comportement de window. Ce dernier mode est donc extrèmement dangereux, c'est pour cela que depuis vista, il faut que le driver soit signé pour être loadé même si il est toujours encore possible de passer outre.

Re: Traduction d'un code ASM

Publié : sam. 30/juil./2011 19:58
par djes
Je n'aurais pas mieux dit :)
Sinon faut demander à Chuck Norris.

Re: Traduction d'un code ASM

Publié : dim. 31/juil./2011 10:23
par graph100
encore heureux qu'on puisse encore passer outre ! manquerais plus qu'on ne puisse plus faire ce qu'on veut de notre propre machine ! Mais c'est sur que pour les boites qui ont un soucis de sécurité ....

@KKC : bah moi non plus j'en savais plus ou moins rien avant ce post ^^, mais je suis aller demander à mon google ;)

Re: Traduction d'un code ASM

Publié : dim. 31/juil./2011 10:26
par Backup
Kwai chang caine a écrit :Et bien sur c'est encore moi qui vais me taper la honte et oser poser la question que tout le monde se pose :oops:
tout le monde... faut pas exagérer ...

tout ceux qui ont manipuler un debuggeur (Softice) ont deja entendu parler du Ring x :wink:

ont ne viens pas tous du Visual Basic ... :lol:

Re: Traduction d'un code ASM

Publié : dim. 31/juil./2011 11:47
par G-Rom
Recherche du coté des interruption du bios. (IRQ)

Re: Traduction d'un code ASM

Publié : dim. 31/juil./2011 13:21
par DarkVader
G-Rom a écrit :Recherche du coté des interruption du bios. (IRQ)
Merci de ta réponse : tu as lu le code fourni ?

Mon problème n°1 c'est déjà de comprendre l'erreur générée :
«Garbage at the end of line» sur la ligne «DisableASM»
ainsi que les erreurs de syntaxe de la transcription.

Re: Traduction d'un code ASM

Publié : dim. 31/juil./2011 15:59
par Kwai chang caine
@NICO
Merci beaucoup de ton explication 8)
Un truc de dingue toutes ces choses que vous connaissez et que j'ai jamais entendu parler 8O
C'est vrai même en 5 ans de PB vous n'aviez encore jamais évoquer l'existence de ce RING qui et ma foi très intéressant (ou j'ai loupé le post) :roll:
Moi le seul que je connaisse c'est celui sur lequel je monte tous les jours pour combattre mon ignorance et essayer tant que faire se peut de progresser en prog :oops:
J'ai d'abord cru que cela ne concernait que LINUX....mais apparemment c'est WINDOWS...alors cela m’épate encore plus
Encore merci
@KKC : bah moi non plus j'en savais plus ou moins rien avant ce post ^^, mais je suis aller demander à mon google ;)
Et ben figure toi, que pour une fois, étant quand même lassé d’être toujours le petit a lunette boutonneux au fond de la classe, qui a jamais compris ce que disait la maitresse, je me suis dit la même chose que toi :D
J'ai sorti mon plus beau GOOGLE et j'ai tapé "RING 0" et même "Ring zero"...et ben rien qui parle de ça au premier abord :roll:
Alors "j'm'ai" fit, KCC il est l'heure de confirmer à nouveau, comme si besoin en était, ton état d'ignorance, et tes copains y vont drôlement bien t'expliquer, comme dab 8)
Ce dernier mode est donc extrèmement dangereux, c'est pour cela que depuis vista, il faut que le driver soit signé pour être loadé même si il est toujours encore possible de passer outre.
Je me doutais que ça parlait d'autorisation, mais encore une fois jamais entendu parlé
Alors on se demande pourquoi ces bouffons de redmond ont encore rajouté l'UAC :?
Si y'avait deja une sonnette (Ring) pour alerter et empêcher l’accès a nos machine, avait il encore besoin d'en rajouter une encore plus "pourite" :?
L'UAC contrôle même le nom de l'exe.....ouarffff ouarfff le même fichier si tu le nomme "Setup" ou "instal" et ben selon le réglage ça passe pas...
Quel con ce crosoft, c'est vrai que, nous tous, savons que le danger d'un EXE peut être dans son nom :lol: :twisted:
tout le monde... faut pas exagérer ...
tout ceux qui ont manipuler un debuggeur (Softice) ont déjà entendu parler du Ring x :wink:
ont ne viens pas tous du Visual Basic ... :lol:
Bon.... ça va monsieur j'sais tout :lol:
Et pour le Visual basic...tout le monde sait qu'on ne choisi pas ses parents :oops:

Re: Traduction d'un code ASM

Publié : dim. 31/juil./2011 17:20
par DarkVader
Kwai chang caine a écrit :.../...
Bon.... ça va monsieur j'sais tout :lol:
Et pour le Visual basic...tout le monde sait qu'on ne choisi pas ses parents :oops:
... et inversement. :cry:

Rassure-toi, celui qui croit savoir n'apprend plus.

Re: Traduction d'un code ASM

Publié : dim. 31/juil./2011 17:58
par Kwai chang caine
Merci DARKVADER :wink:
Dis donc, elle est petite de par le texte, mais grande de sens cette phrase 8)
J'adore ce genre de phrases qui veulent tout dire en peu de mots, je vais bien me la mettre de coté :D

Pour eviter que certains s'usent les doigts à taper sur leur clavier, je vais la faire moi-même ....... :roll:
Kcc a écrit :J'adore ce genre de phrases qui veulent tout dire en peu de mots :D
C'est pas comme KCC :lol:

Re: Traduction d'un code ASM

Publié : dim. 31/juil./2011 18:06
par Backup
DarkVader a écrit :Rassure-toi, celui qui croit savoir n'apprend plus.
J'adore ce genre de phrases qui veulent tout dire en peu de mots :D
et si ma tante en avait , on l'appellerai tonton ! :roll:

on peut en sortir beaucoup des trucs dans le genre .....

mais comme je l'ai déjà dis...
des gens beaux,riches,intelligents,et cultivés, ben... il y en a ! étonnant non ?

les phrases qui se veulent "d'esprit" sont les 3/4 du temps sorties de leur contexte d'origine
de leur auteurs
et servent au "simple" d'esprit a exprimer une intelligence, qu'il n'ont pas (Dobro)
... :lol:

(relis la bien, apprends la , tu pourra la replacer pour avoir l'air fin :lol: )