Cita de: marax en 10 Mayo 2020, 12:26 PM
Aunque sigo con una pregunta: ¿deben todos los ISR salvar el valor de los registros que utiliza?
"A typical ISR structure is shown below
<save the registers used in the ISR>
sti ; enable further interrupts
...
<ISR body>
...
<restore the saved registers>
iret ; return to the interrupted program"
https://link.springer.com/chapter/10.1007/0-387-27155-4_15
Cita de: marax en 10 Mayo 2020, 12:26 PMEsto lo lei varias veces pero no logro entender precisamente a lo que te refieres.
Que yo sepa el hook antes de la instruccion cli llama al ISR que estaba originalmente en 09h y al servicio 01h del ISR de la interrupcion 16h:
Código (ASM) [Seleccionar]
PUSHF ;empuja EFLAGS en la pila
CALL CS :_oldISR
MOV AH,01H
PUSHF ;empuja EFLAGS en la pila
CALL CS:_chkISR
Cita de: marax en 10 Mayo 2020, 12:26 PM¿Cual libro?
The Rootkit Arsenal Escape and Evasion in the Dark Corners of the System de Bill Blunden (2009), HookTSR es un ejemplo que viene en el segundo capitulo (no se quien habra copiado a quien ya que no diste la fuente de tu fragmento).
Cita de: marax en 10 Mayo 2020, 12:26 PMEsta bien... te refieres con simular a mantener la integridad de la entrada inmediatamente anterior de la cadena de ejecucion de las interrupciones (en la pila), ¿no?.
Para poder llamar al ISR hace falta poner EFLAGS en la pila ya que igual que el hook de ISR debe terminar con IRET y esa instruccion asume que EFLAGS fue empujado en la pila. Por cierto hace falta ejecutar CLI en el hook justamente por haber llamado a los otros ISRs que ejecutaron STI, el hook es llamado con las interrupciones ya deshabilitadas como se explica en el enlace de arriba (15.1 Interrupt Processing in the Real Mode).