# -*- Mode: Python -*-

import struct

# see <machine/reg.h>

regs = (
    'fs', 'es', 'ds', 'edi', 'esi', 'ebp', 'isp', 'ebx', 'edx', 'ecx',
    'eax', 'trapno', 'err', 'eip', 'cs', 'eflags', 'esp', 'ss', 'gs',
    )

struct_format = '@' + ('I' * len(regs))
struct_size = struct.calcsize (struct_format)

def read_regs (pid):
    import os
    fd = os.open ('/proc/%s/regs' % pid, os.O_RDONLY)
    data = os.read (fd, struct_size)
    reg_values = struct.unpack (struct_format, data)
    d = {}
    for i in range (len (regs)):
        d[regs[i]] = reg_values[i]
    return d

if __name__ == '__main__':
    import pprint
    for k,v in read_regs ('curproc').items():
        print '%8s %08x' % (k, v)
