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;
}