cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

decode_msr.py (843B)


      1#!/usr/bin/env python
      2# add symbolic names to read_msr / write_msr in trace
      3# decode_msr msr-index.h < trace
      4import sys
      5import re
      6
      7msrs = dict()
      8
      9with open(sys.argv[1] if len(sys.argv) > 1 else "msr-index.h", "r") as f:
     10	for j in f:
     11		m = re.match(r'#define (MSR_\w+)\s+(0x[0-9a-fA-F]+)', j)
     12		if m:
     13			msrs[int(m.group(2), 16)] = m.group(1)
     14
     15extra_ranges = (
     16	( "MSR_LASTBRANCH_%d_FROM_IP", 0x680, 0x69F ),
     17	( "MSR_LASTBRANCH_%d_TO_IP", 0x6C0, 0x6DF ),
     18	( "LBR_INFO_%d", 0xdc0, 0xddf ),
     19)
     20
     21for j in sys.stdin:
     22	m = re.search(r'(read|write)_msr:\s+([0-9a-f]+)', j)
     23	if m:
     24		r = None
     25		num = int(m.group(2), 16)
     26		if num in msrs:
     27			r = msrs[num]
     28		else:
     29			for er in extra_ranges:
     30				if er[1] <= num <= er[2]:
     31					r = er[0] % (num - er[1],)
     32					break
     33		if r:
     34			j = j.replace(" " + m.group(2), " " + r + "(" + m.group(2) + ")")
     35	print j,
     36
     37