All pastes #20896 Raw Edit

moo.asm

public text v1 · immutable
#20896 ·published 2005-08-23 19:46 UTC
rendered paste body
section .data
        msg db "signal caught",0xA
        len equ $ - msg ;len now equals length of msg
section .text

global _start ;C equiv: main()
_start:
        mov ecx, 255
        push ecx
        st:
                ; int signal(int signal, signalhandler_t sighandlr) ;
                pop ebx       ; C equivilant:
                mov eax, 48   ; for(i = 0;i < 255; i++) {
                mov ecx, func ;    signal(i, &func);
                int 0x80      ; }
                dec ebx
                push ebx
        jnz st

        ; The waiting loop ;
        rpt:
        jmp rpt

; void exit(void) ;
;mov eax, 1 ;
;xor ebx, ebx ;  This just exits cleanly
;int 0x80

; the function called when a signal is caught ;
func:
        ; int write(int fd, char *buf, int size) ;
        mov eax, 4   ;
        mov ebx, 1   ; This just writes "signal caught"
        mov ecx, msg ;  C equiv: write(stdout, msg, sizeof(msg))
        mov edx, len ;
        int 0x80
        pop ebx ; clean my stack
        push 255 ; put 255 back on
jmp st ; Go back and reset all signals and start over again