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