#include #include #define RFLAGS_REGISTER_GET(y) \ { \ asm volatile \ ( \ " pushfq \n" \ " pop %0 \n" \ \ : "=m" (* y) \ ); \ }; #define RFLAGS_REGISTER_SET(x) \ { \ asm volatile \ ( \ " push %0 \n" \ " popfq \n" \ \ : \ : "r" (* x) \ ); \ }; struct storage { uint8_t* c; }; int function(struct storage* s) { s->c = calloc (sizeof(uint8_t), 8); free (s->c); }; int main() { struct storage s; uint64_t rflags; RFLAGS_REGISTER_GET(&rflags); rflags ^= 0x0000000000040000; RFLAGS_REGISTER_SET(&rflags); // function(&s); s.c = calloc (sizeof(uint8_t), 8); free (s.c); RFLAGS_REGISTER_GET(&rflags); rflags ^= 0x0000000000040000; RFLAGS_REGISTER_SET(&rflags); }