;------------------------------------------------------------------------- ; ; another way how to kill bpms ; ; ; ; ;------------------------------------------------------------------------- .586p .Model Flat extrn ExitProcess : PROC ;procedure to shut down a process extrn MessageBoxA : PROC ;procedure to show a MessageBox extrn CreateThread : PROC .Data caption db "DAEMON",0 text db "try to set a bpm @ MessageBoxA or ExitProcess!",0 thread_id dd ? syncron_1 dd ? syncron_2 dd ? .Code Main: push offset thread_id push 0 push 0 push offset second_thread push 0 push 0 call CreateThread no_1: cmp syncron_1,1 jnz no_1 push 00h push offset caption push offset text push 00h call MessageBoxA mov syncron_2,1 jmp $ second_thread: push edx sidt [esp-2] ; Interrupt table to stack pop edx add edx,5*8+4 ; Get interrupt vector mov ebx,[edx] mov bx,word ptr [edx-4] lea edi,handler mov [edx-4],di ror edi,16 mov [edx+2],di kill_em:int 5 mov syncron_1,1 cmp syncron_2,1 jnz kill_em mov [edx-4],bx ror ebx,16 mov [edx+2],bx call ExitProcess handler:mov eax,0400h mov dr7,eax ; store 0x400h in debug register7 iretd End Main ;End of code, Main is the entrypoint