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