|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
[Asm]Disassemblare
Perche un .exe in asm con questo sorgente:
Codice:
;Beep.asm - by b0nu$, 1997
.286c
.MODEL SMALL
INTERRUPT_NUM EQU 9 ;Interrupt da intercettare
.CODE
ORG 100H
FIRST: JMP LOAD_PROG ;Carico in memoria il prg.
OLD_KEYBOARD_INT DD ? ;Memorizza l'indirizzo al
;vecchio vettore di int.
PROG PROC
pusha ;salvo i registri
pushf
call OLD_KEYBOARD_INT ;chiamo la vecchia routine di int.
;QUI CI VA IL PROGRAMMA: In questo esempio ho deciso di emettere un BEEP ma
;si può fare qualunque cosa. Tranne che chiamare un interrupt del DOS!!
;--------------------------------------------------------------------------
in al,61h ;Per il BEEP programmo il Timer
test al,3
jne skippa
or al,3
out 61h,al
mov al,0B6h
out 43h,al
skippa: mov al,06h ;frequenza LSB
out 42h,al
mov al,01h ;frequenza MSB
out 42h,al
mov cx,0FFFFh
wait_loop:
loop wait_loop ;ciclo di attesa
in al,61h ;silenzio
and al,0FCh
out 061h,al
;--------------------------------------------------------------------------
EXIT:
popa
iret
PROG ENDP
LOAD_PROG PROC ;Procedura che carica in memoria il prg.
mov ah,35h
mov al,INTERRUPT_NUM
int 21h ;Prelevo il vecchio vettore
mov WORD PTR OLD_KEYBOARD_INT,bx
mov WORD PTR OLD_KEYBOARD_INT[2],es
mov al,INTERRUPT_NUM
mov ah,25h
lea dx,PROG
int 21h ;Imposto quello nuovo
mov dx,OFFSET LOAD_PROG ;in DX ci va l'ultimo byte del
;prg. + 1
int 27h ;Termina ma rimani in memoria
LOAD_PROG ENDP
END FIRST
Codice:
seg000:0100 ; seg000:0100 ; +-------------------------------------------------------------------------+ seg000:0100 ; ¦ This file is generated by The Interactive Disassembler (IDA) ¦ seg000:0100 ; ¦ Copyright (c) 2001 by DataRescue sa/nv, <[email protected]> ¦ seg000:0100 ; ¦ Licensed to: Roger Cross, 1 user, std, 7/2000 ¦ seg000:0100 ; +-------------------------------------------------------------------------+ seg000:0100 ; seg000:0100 ; File Name : C:\Documents and Settings\Luca\Desktop\Nuova cartella\BEEP.COM seg000:0100 ; Format : MS-DOS COM-file seg000:0100 ; Base Address: 1000h Range: 10100h-1014Fh Loaded length: 4Fh seg000:0100 seg000:0100 seg000:0100 ; --------------------------------------------------------------------------- seg000:0100 seg000:0100 seg000 segment byte public 'CODE' seg000:0100 assume cs:seg000 seg000:0100 org 100h seg000:0100 assume es:nothing, ss:nothing, ds:seg000 seg000:0100 seg000:0100 ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ seg000:0100 seg000:0100 seg000:0100 public start seg000:0100 start proc near seg000:0100 jmp short loc_0_131 seg000:0100 ; --------------------------------------------------------------------------- seg000:0102 db 90h ; É seg000:0103 word_0_103 dw 0 ; DATA XREF: start+37.w seg000:0105 word_0_105 dw 0 ; DATA XREF: start+3C.w seg000:0107 db 60h ; ` seg000:0108 db 9Ch ; £ seg000:0109 db 2Eh ; . seg000:010A db 0FFh ; seg000:010B db 1Eh ; seg000:010C db 3 ; seg000:010D db 1 ; seg000:010E db 0E4h ; õ seg000:010F db 61h ; a seg000:0110 db 0A8h ; ¿ seg000:0111 db 3 ; seg000:0112 db 75h ; u seg000:0113 db 8 ; seg000:0114 db 0Ch ; seg000:0115 db 3 ; seg000:0116 db 0E6h ; µ seg000:0117 db 61h ; a seg000:0118 db 0B0h ; ¦ seg000:0119 db 0B6h ;  seg000:011A db 0E6h ; µ seg000:011B db 43h ; C seg000:011C db 0B0h ; ¦ seg000:011D db 6 ; seg000:011E db 0E6h ; µ seg000:011F db 42h ; B seg000:0120 db 0B0h ; ¦ seg000:0121 db 1 ; seg000:0122 db 0E6h ; µ seg000:0123 db 42h ; B seg000:0124 db 0B9h ; ¦ seg000:0125 db 0FFh ; seg000:0126 db 0FFh ; seg000:0127 db 0E2h ; Ô seg000:0128 db 0FEh ; ¦ seg000:0129 db 0E4h ; õ seg000:012A db 61h ; a seg000:012B db 24h ; $ seg000:012C db 0FCh ; ³ seg000:012D db 0E6h ; µ seg000:012E db 61h ; a seg000:012F db 61h ; a seg000:0130 db 0CFh ; ¤ seg000:0131 ; --------------------------------------------------------------------------- seg000:0131 seg000:0131 loc_0_131: ; CODE XREF: start.j seg000:0131 mov ah, 35h seg000:0133 mov al, 9 seg000:0135 int 21h ; DOS - 2+ - GET INTERRUPT VECTOR seg000:0135 ; AL = interrupt number seg000:0135 ; Return: ES:BX = value of interrupt vector seg000:0137 mov cs:word_0_103, bx seg000:013C mov cs:word_0_105, es seg000:0141 mov al, 9 seg000:0143 mov ah, 25h seg000:0145 mov dx, 107h seg000:0148 int 21h ; DOS - SET INTERRUPT VECTOR seg000:0148 ; AL = interrupt number seg000:0148 ; DS:DX = new vector to be used for specified interrupt seg000:014A mov dx, 131h seg000:014D int 27h ; DOS - TERMINATE BUT STAY RESIDENT seg000:014D start endp ; CS = current program segment seg000:014D ; DX = last program byte + 1 seg000:014D seg000 ends seg000:014D seg000:014D seg000:014D end start P.S: ma Ida aggiunge i commenti da solo?
__________________
Gnu/Linux User
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:35.



















