global readtsc:function global readmsr:function global writemsr:function global enable_syscall:function global disable_syscall:function global setdr0:function global setdr1:function global setdr2:function global setdr3:function global nextrip:function setdr0: mov rax, dr0 mov dr0, rdi ret setdr1: mov rax, dr1 mov dr1, rdi ret setdr2: mov rax, dr2 mov dr2, rdi ret setdr3: mov rax, dr3 mov dr3, rdi ret nextrip: pop rax push rax ret readtsc: rdtsc shl rdx, 32 or rax, rdx ret writemsr: ; rdi is msr, rsi is value to write mov ecx, edi ; edx is high order bits, eax is low order bits to write mov eax, esi shr rsi, 32 mov edx, esi wrmsr ret readmsr: mov ecx, edi rdmsr shl rdx, 32 or rax, rdx %define EFER 0xc0000080 enable_syscall: mov ecx, EFER rdmsr or eax, 0x1 wrmsr ret disable_syscall: mov ecx, EFER rdmsr and eax, DWORD ~0x1 wrmsr ret