mirror of
https://github.com/ioacademy-jikim/debugging
synced 2025-06-10 09:26:15 +00:00
62 lines
925 B
C
62 lines
925 B
C
|
|
#include <stdio.h>
|
|
|
|
typedef unsigned long long int ULong;
|
|
|
|
ULong do_clc ( void )
|
|
{
|
|
ULong res;
|
|
__asm__ __volatile__(
|
|
"pushq $0x8d5\n\t" /* OSZACP */
|
|
"popfq\n\t"
|
|
"clc\n\t"
|
|
"pushfq\n\t"
|
|
"popq %0"
|
|
: "=r"(res)
|
|
:
|
|
: "memory", "cc"
|
|
);
|
|
return res;
|
|
}
|
|
|
|
ULong do_stc ( void )
|
|
{
|
|
ULong res;
|
|
__asm__ __volatile__(
|
|
"pushq $0x0\n\t"
|
|
"popfq\n\t"
|
|
"stc\n\t"
|
|
"pushfq\n\t"
|
|
"popq %0"
|
|
: "=r"(res)
|
|
:
|
|
: "memory", "cc"
|
|
);
|
|
return res;
|
|
}
|
|
|
|
ULong do_cmc ( void )
|
|
{
|
|
ULong res;
|
|
__asm__ __volatile__(
|
|
"pushq $0x0\n\t"
|
|
"popfq\n\t"
|
|
"stc\n\t"
|
|
"cmc\n\t"
|
|
"pushfq\n\t"
|
|
"popq %0"
|
|
: "=r"(res)
|
|
:
|
|
: "memory", "cc"
|
|
);
|
|
return res;
|
|
}
|
|
|
|
int main ( void )
|
|
{
|
|
printf("clc: 0x%016llx\n", 0x8d5 & do_clc());
|
|
printf("stc: 0x%016llx\n", 0x8d5 & do_stc());
|
|
printf("cmc: 0x%016llx\n", 0x8d5 & do_cmc());
|
|
return 0;
|
|
}
|