Source code for vtrace.archs.amd64
"""
Amd64 Support Module
"""
# Copyright (C) 2007 Invisigoth - See LICENSE file for details
import struct
import envi.archs.amd64 as e_amd64
import vtrace.archs.i386 as vt_i386
[docs]class Amd64Mixin(
e_amd64.Amd64Module,
e_amd64.Amd64RegisterContext,
vt_i386.i386WatchMixin):
"""
Do what we need to for the lucious amd64
"""
def __init__(self):
e_amd64.Amd64Module.__init__(self)
e_amd64.Amd64RegisterContext.__init__(self)
vt_i386.i386WatchMixin.__init__(self)
self.setMeta('Architecture','amd64')
[docs] def archGetStackTrace(self):
self.requireAttached()
current = 0
sanity = 1000
frames = []
rbp = self.getRegisterByName("rbp")
rip = self.getRegisterByName("rip")
frames.append((rip,rbp))
while rbp != 0 and current < sanity:
try:
rbp,rip = self.readMemoryFormat(rbp, "<QQ")
except:
break
frames.append((rip,rbp))
current += 1
return frames