Traduction d'un code ASM

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
DarkVader
Messages : 95
Inscription : mer. 11/juil./2007 10:56

Traduction d'un code ASM

Message 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
Dernière modification par DarkVader le dim. 31/juil./2011 8:45, modifié 1 fois.
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Traduction d'un code ASM

Message 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
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Traduction d'un code ASM

Message par djes »

Sans regarder plus avant, je pense que tu dois être en ring 0 pour pouvoir faire ça.
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Traduction d'un code ASM

Message par graph100 »

et c'est possible d'être en ring 0 avec PB ? ou avec un prog sous window en général ?
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Traduction d'un code ASM

Message 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:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Traduction d'un code ASM

Message 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.
Dernière modification par nico le sam. 30/juil./2011 20:03, modifié 1 fois.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Traduction d'un code ASM

Message par djes »

Je n'aurais pas mieux dit :)
Sinon faut demander à Chuck Norris.
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Traduction d'un code ASM

Message 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 ;)
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Traduction d'un code ASM

Message 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:
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Traduction d'un code ASM

Message par G-Rom »

Recherche du coté des interruption du bios. (IRQ)
Avatar de l’utilisateur
DarkVader
Messages : 95
Inscription : mer. 11/juil./2007 10:56

Re: Traduction d'un code ASM

Message 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.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Traduction d'un code ASM

Message 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:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
DarkVader
Messages : 95
Inscription : mer. 11/juil./2007 10:56

Re: Traduction d'un code ASM

Message 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.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Traduction d'un code ASM

Message 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:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Traduction d'un code ASM

Message 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: )
Répondre