On 05-12-07 20:19, ninjaboy wrote:
Ehm... int3 works for me too, the TF doesn't work. pushf xor %rax, %rax pop %rax orq $0x100, %rax pushq %rax popf the trap released here doesn't exec my handler.
Ah, I just skipped reading the bit with the fucks and the sucks. But, well, works for me again:
$ ./sigtrap trap = 1 trap = 3 $ Rene.
/* gcc -W -Wall -o sigtrap sigtrap.c */ #include <stdlib.h> #include <stdio.h> #include <signal.h> #include <sys/io.h> volatile sig_atomic_t trap; void sigtrap(int signum __attribute__((unused))) { trap++; } int main(void) { struct sigaction sa; sa.sa_handler = sigtrap; sigemptyset(&sa.sa_mask); sa.sa_flags = 0; if (sigaction(SIGTRAP, &sa, NULL) < 0) { perror("could not install handler"); return EXIT_FAILURE; } asm( "int3"); printf("trap = %d\n", (int)trap); asm( "pushf \n\t" "orl $0x100, (%esp) \n\t" "popf "); asm( "nop"); asm( "nop"); printf("trap = %d\n", (int)trap); return EXIT_SUCCESS; }