Path: blob/master/tools/context/cpuid-key.c
19715 views
/*1* outputs a cpuid key for use in context keyed payload encoding.2*3* Author: Dimitris Glynos <dimitris at census-labs.com>4*/567#include <stdio.h>89int main()10{11unsigned long eax;1213asm (14"xorl %%esi, %%esi;" /* esi is key store, zero it out */15"xorl %%edi, %%edi;" /* edi is loop iterator, ditto */16"cpuid_loop: movl %%edi, %%eax;" /* iterator is first arg17to cpuid */18"xorl %%ecx, %%ecx;" /* ecx is also used as arg to cpuid but19we'll use it always as zero */20"cpuid;"21"xorl %%eax, %%esi;"22"cmpl %%esi, %%eax;" /* first time round esi = eax */23/* not very safe heh? */24"jne not_first_time;"25"leal 0x1(%%eax, 1), %%edi;" /* first time round ... */26"not_first_time: xorl %%ebx, %%esi;"27"xorl %%ecx, %%esi;"28"xorl %%edx, %%esi;"29"subl $1, %%edi;"30"jne cpuid_loop;"31"movl %%esi, %%eax;"32: "=a" (eax)33);3435printf("%#.8lx\n", eax);36return 0;37}383940