ネームスペース Onikiri::EmulatorUtility


構成

class  CommonConverter
class  CommonEmulator
class  CommonOpInfo
class  DelayUnlinker
class  ElfReader
class  EmuMemAccess
class  ExtraOpEmuStateWrapper
class  ExtraOpInfoWrapper
class  FDConv
class  HeapAllocator
class  Linux64Loader
class  Linux64SyscallConv
class  LoaderIF
class  MemorySystem
class  OpEmulationState
class  PageTable
struct  PageTableEntry
struct  PhysicalMemoryPage
class  ProcessCreateParam
class  ProcessState
struct  signed_type
class  SyscallConstConvBitwise
class  SyscallConstConvEnum
class  SyscallConstConvIF
class  SyscallConvIF
class  TargetBuffer
class  TLB
struct  unsigned_type
class  VirtualMemory
class  VirtualSystem

ネームスペース

namespace  ELF
namespace  ELF64
namespace  Operation

型定義

typedef POSIX::posix_struct_stat HostStat
typedef u32 VIRTUAL_MEMORY_ATTR_TYPE

関数

template<typename T>
signed_type< T >::type cast_to_signed (T x)
template<typename T>
unsigned_type< T >::type cast_to_unsigned (T x)
template<typename T>
ExtractBits (T value, int begin, int len, bool sext=false)
std::string StrCpyToHost (MemorySystem *mem, u64 targetAddr)
u64 TargetStrlen (MemorySystem *mem, u64 targetAddr)


型定義

typedef POSIX::posix_struct_stat Onikiri::EmulatorUtility::HostStat

VirtualSystem.h39 行で定義されています。

typedef u32 Onikiri::EmulatorUtility::VIRTUAL_MEMORY_ATTR_TYPE

VirtualMemory.h45 行で定義されています。


関数

template<typename T>
signed_type<T>::type Onikiri::EmulatorUtility::cast_to_signed ( x  )  [inline]

Math.h106 行で定義されています。

参照元 Onikiri::EmulatorUtility::Operation::BranchRelCond()Onikiri::EmulatorUtility::Operation::BranchRelUncond()Onikiri::EmulatorUtility::Operation::AShiftR< Type, TSrc1, TSrc2, count_mask >::operator()()Onikiri::EmulatorUtility::Operation::IntNeg< Type, TSrc1 >::operator()()Onikiri::EmulatorUtility::Operation::IntCondGreaterEqualSigned< Type, ArgType >::operator()()Onikiri::EmulatorUtility::Operation::IntCondGreaterSigned< Type, ArgType >::operator()()Onikiri::EmulatorUtility::Operation::IntCondLessEqualSigned< Type, ArgType >::operator()()Onikiri::EmulatorUtility::Operation::IntCondLessSigned< Type, ArgType >::operator()()Onikiri::AlphaLinux::Operation::AlphaCvtQT< TSrc1 >::operator()()Onikiri::AlphaLinux::Operation::AlphaSextw< TSrc1 >::operator()()Onikiri::AlphaLinux::Operation::AlphaSextb< TSrc1 >::operator()()Onikiri::AlphaLinux::Operation::AlphaLdah< TSrc1, TSrc2 >::operator()()Onikiri::AlphaLinux::Operation::AlphaAddrUnaligned< TSrc1, TSrc2 >::operator()()Onikiri::AlphaLinux::Operation::AlphaAddr< TSrc1, TSrc2 >::operator()()Onikiri::PPC64Linux::Operation::PPC64BranchRelCond()Onikiri::PPC64Linux::Operation::PPC64BranchRelUncond()Onikiri::PPC64Linux::Operation::PPC64SetF()Onikiri::PPC64Linux::Operation::PPC64SetSextF()Onikiri::EmulatorUtility::Operation::SetSext().

00107 {
00108     return static_cast< typename signed_type<T>::type > (x);
00109 }

Here is the caller graph for this function:

template<typename T>
unsigned_type<T>::type Onikiri::EmulatorUtility::cast_to_unsigned ( x  )  [inline]

Math.h99 行で定義されています。

参照元 Onikiri::EmulatorUtility::Operation::LShiftL< Type, TSrc1, TSrc2, count_mask >::operator()()Onikiri::EmulatorUtility::Operation::LShiftR< Type, TSrc1, TSrc2, count_mask >::operator()()Onikiri::EmulatorUtility::Operation::AShiftR< Type, TSrc1, TSrc2, count_mask >::operator()()Onikiri::EmulatorUtility::Operation::IntNeg< Type, TSrc1 >::operator()()Onikiri::EmulatorUtility::Operation::IntCondGreaterEqualUnsigned< Type, ArgType >::operator()()Onikiri::EmulatorUtility::Operation::IntCondGreaterUnsigned< Type, ArgType >::operator()()Onikiri::EmulatorUtility::Operation::IntCondLessEqualUnsigned< Type, ArgType >::operator()()Onikiri::EmulatorUtility::Operation::IntCondLessUnsigned< Type, ArgType >::operator()().

00100 {
00101     return static_cast< typename unsigned_type<T>::type > (x); 
00102 }

Here is the caller graph for this function:

template<typename T>
T Onikiri::EmulatorUtility::ExtractBits ( value,
int  begin,
int  len,
bool  sext = false 
)

DecoderUtility.h41 行で定義されています。

参照元 Onikiri::PPC64Linux::PPC64Decoder::Decode()Onikiri::AlphaLinux::Alpha64Decoder::Decode().

00042         {
00043             T result = (value >> begin) & ~(~(T)0 << len);
00044             // sign extend
00045             if (sext && (result & ((T)1 << (len-1))))
00046                 result |= ~0 << len;
00047             return result;
00048         }

Here is the caller graph for this function:

std::string Onikiri::EmulatorUtility::StrCpyToHost ( MemorySystem mem,
u64  targetAddr 
)

MemoryUtility.cpp78 行で定義されています。

参照先 Onikiri::EmulatorUtility::MemorySystem::ReadMemory()Onikiri::MemAccess::value.

参照元 Onikiri::PPC64Linux::PPC64LinuxSyscallConv::Execute()Onikiri::AlphaLinux::AlphaLinuxSyscallConv::Execute()Onikiri::EmulatorUtility::Linux64SyscallConv::syscall_access()Onikiri::EmulatorUtility::Linux64SyscallConv::syscall_lstat64()Onikiri::EmulatorUtility::Linux64SyscallConv::syscall_mkdir()Onikiri::EmulatorUtility::Linux64SyscallConv::syscall_open()Onikiri::EmulatorUtility::Linux64SyscallConv::syscall_rename()Onikiri::EmulatorUtility::Linux64SyscallConv::syscall_stat64()Onikiri::EmulatorUtility::Linux64SyscallConv::syscall_truncate()Onikiri::EmulatorUtility::Linux64SyscallConv::syscall_unlink().

00079 {
00080     std::string strData;
00081     u64 strAddr = targetAddr;
00082     while(true){
00083         EmuMemAccess access( strAddr, 1, false );
00084         mem->ReadMemory( &access );
00085         if( access.value == '\0' ){
00086             break;
00087         }
00088         strData += (char)access.value;
00089         strAddr++;
00090     };
00091 
00092     return strData;
00093 }

関数の呼び出しグラフ:

Here is the caller graph for this function:

u64 Onikiri::EmulatorUtility::TargetStrlen ( MemorySystem mem,
u64  targetAddr 
)

MemoryUtility.cpp41 行で定義されています。

参照先 Onikiri::EmulatorUtility::MemorySystem::ReadMemory()Onikiri::MemAccess::value.

00042 {
00043 #if 0
00044     
00045     BlockArray blocks;
00046     // MapUnitSize oCgstrlensDD
00047     SplitAtMapUnitBoundary(targetAddr, m_addrConv.GetMapUnitSize(), back_inserter(blocks) );
00048 
00049     u64 result = 0;
00050     for (BlockArray::iterator e = blocks.begin(); e != blocks.end(); ++e) {
00051         char* p = static_cast<char*>(m_addrConv.TargetToHost(e->addr));
00052         for (int i = 0; i < (int)e->size; i ++, p ++) {
00053             if (*p == '\0')
00054                 return result;
00055             else
00056                 result ++;
00057         }
00058     }
00059 
00060     // MapUnitSizeoCgCMapUnitSizeoCgstrlens
00061     return result + TargetStrlen(targetAddr+m_addrConv.GetMapUnitSize());;
00062 #else
00063     u64 length = 0;
00064     while(true){
00065         EmuMemAccess access( targetAddr + length, 1, false );
00066         mem->ReadMemory( &access );
00067         if( access.value == '\0' ){
00068             break;
00069         }
00070         length++;
00071     };
00072 
00073     return length;
00074 #endif
00075 }

関数の呼び出しグラフ:


Onikiri2に対してTue Jun 18 15:24:47 2013に生成されました。  doxygen 1.4.7