2019-09-24 22:54:27 +02:00
# include "ipc.h"
# include "types/KProcess.h"
namespace skyline : : kernel : : ipc {
IpcRequest : : IpcRequest ( bool isDomain , const DeviceState & state ) : isDomain ( isDomain ) , state ( state ) , tls ( ) {
u8 * currPtr = tls . data ( ) ;
state . thisProcess - > ReadMemory ( currPtr , state . thisThread - > tls , constant : : TlsIpcSize ) ;
header = reinterpret_cast < CommandHeader * > ( currPtr ) ;
currPtr + = sizeof ( CommandHeader ) ;
2019-11-14 20:06:38 +01:00
if ( header - > handleDesc ) {
2019-09-24 22:54:27 +02:00
handleDesc = reinterpret_cast < HandleDescriptor * > ( currPtr ) ;
2019-11-14 20:06:38 +01:00
currPtr + = sizeof ( HandleDescriptor ) + ( handleDesc - > sendPid ? sizeof ( u64 ) : 0 ) ;
for ( uint index = 0 ; handleDesc - > copyCount > index ; index + + ) {
2019-09-24 22:54:27 +02:00
copyHandles . push_back ( * reinterpret_cast < handle_t * > ( currPtr ) ) ;
currPtr + = sizeof ( handle_t ) ;
}
2019-11-14 20:06:38 +01:00
for ( uint index = 0 ; handleDesc - > moveCount > index ; index + + ) {
2019-09-24 22:54:27 +02:00
moveHandles . push_back ( * reinterpret_cast < handle_t * > ( currPtr ) ) ;
currPtr + = sizeof ( handle_t ) ;
}
}
2019-11-14 20:06:38 +01:00
for ( uint index = 0 ; header - > Xno > index ; index + + ) {
Framebuffer and NativeActivity
What was added:
* Framebuffer
* NativeActivity
* NV Services
* IOCTL Handler
* NV Devices:
* * /dev/nvmap - 0xC0080101, 0xC0080103, 0xC0200104, 0xC0180105, 0xC00C0109, 0xC008010E
* * /dev/nvhost-as-gpu
* * /dev/nvhost-channel - 0x40044801, 0xC0104809, 0xC010480B, 0xC018480C, 0x4004480D, 0xC020481A, 0x40084714
* * /dev/nvhost-ctrl
* * /dev/nvhost-ctrl-gpu - 0x80044701, 0x80284702, 0xC0184706, 0xC0B04705, 0x80084714
* SVCs:
* * SetMemoryAttribute
* * CreateTransferMemory
* * ResetSignal
* * GetSystemTick
* Addition of Compact Logger
What was fixed:
* SVCs:
* * SetHeapSize
* * SetMemoryAttribute
* * QueryMemory
* A release build would not set CMAKE_BUILD_TYPE to "RELEASE"
* The logger code was simplified
2019-11-13 21:09:31 +01:00
auto bufX = reinterpret_cast < BufferDescriptorX * > ( currPtr ) ;
if ( bufX - > Address ( ) ) {
vecBufX . push_back ( bufX ) ;
state . logger - > Debug ( " Buf X #{} AD: 0x{:X} SZ: 0x{:X} CTR: {} " , index , u64 ( bufX - > Address ( ) ) , u16 ( bufX - > size ) , u16 ( bufX - > Counter ( ) ) ) ;
}
2019-09-24 22:54:27 +02:00
currPtr + = sizeof ( BufferDescriptorX ) ;
}
2019-11-14 20:06:38 +01:00
for ( uint index = 0 ; header - > Ano > index ; index + + ) {
Framebuffer and NativeActivity
What was added:
* Framebuffer
* NativeActivity
* NV Services
* IOCTL Handler
* NV Devices:
* * /dev/nvmap - 0xC0080101, 0xC0080103, 0xC0200104, 0xC0180105, 0xC00C0109, 0xC008010E
* * /dev/nvhost-as-gpu
* * /dev/nvhost-channel - 0x40044801, 0xC0104809, 0xC010480B, 0xC018480C, 0x4004480D, 0xC020481A, 0x40084714
* * /dev/nvhost-ctrl
* * /dev/nvhost-ctrl-gpu - 0x80044701, 0x80284702, 0xC0184706, 0xC0B04705, 0x80084714
* SVCs:
* * SetMemoryAttribute
* * CreateTransferMemory
* * ResetSignal
* * GetSystemTick
* Addition of Compact Logger
What was fixed:
* SVCs:
* * SetHeapSize
* * SetMemoryAttribute
* * QueryMemory
* A release build would not set CMAKE_BUILD_TYPE to "RELEASE"
* The logger code was simplified
2019-11-13 21:09:31 +01:00
auto bufA = reinterpret_cast < BufferDescriptorABW * > ( currPtr ) ;
if ( bufA - > Address ( ) ) {
vecBufA . push_back ( bufA ) ;
state . logger - > Debug ( " Buf A #{} AD: 0x{:X} SZ: 0x{:X} " , index , u64 ( bufA - > Address ( ) ) , u64 ( bufA - > Size ( ) ) ) ;
}
2019-09-24 22:54:27 +02:00
currPtr + = sizeof ( BufferDescriptorABW ) ;
}
2019-11-14 20:06:38 +01:00
for ( uint index = 0 ; header - > Bno > index ; index + + ) {
Framebuffer and NativeActivity
What was added:
* Framebuffer
* NativeActivity
* NV Services
* IOCTL Handler
* NV Devices:
* * /dev/nvmap - 0xC0080101, 0xC0080103, 0xC0200104, 0xC0180105, 0xC00C0109, 0xC008010E
* * /dev/nvhost-as-gpu
* * /dev/nvhost-channel - 0x40044801, 0xC0104809, 0xC010480B, 0xC018480C, 0x4004480D, 0xC020481A, 0x40084714
* * /dev/nvhost-ctrl
* * /dev/nvhost-ctrl-gpu - 0x80044701, 0x80284702, 0xC0184706, 0xC0B04705, 0x80084714
* SVCs:
* * SetMemoryAttribute
* * CreateTransferMemory
* * ResetSignal
* * GetSystemTick
* Addition of Compact Logger
What was fixed:
* SVCs:
* * SetHeapSize
* * SetMemoryAttribute
* * QueryMemory
* A release build would not set CMAKE_BUILD_TYPE to "RELEASE"
* The logger code was simplified
2019-11-13 21:09:31 +01:00
auto bufB = reinterpret_cast < BufferDescriptorABW * > ( currPtr ) ;
if ( bufB - > Address ( ) ) {
vecBufB . push_back ( bufB ) ;
state . logger - > Debug ( " Buf B #{} AD: 0x{:X} SZ: 0x{:X} " , index , u64 ( bufB - > Address ( ) ) , u64 ( bufB - > Size ( ) ) ) ;
}
2019-09-24 22:54:27 +02:00
currPtr + = sizeof ( BufferDescriptorABW ) ;
}
2019-11-14 20:06:38 +01:00
for ( uint index = 0 ; header - > Wno > index ; index + + ) {
Framebuffer and NativeActivity
What was added:
* Framebuffer
* NativeActivity
* NV Services
* IOCTL Handler
* NV Devices:
* * /dev/nvmap - 0xC0080101, 0xC0080103, 0xC0200104, 0xC0180105, 0xC00C0109, 0xC008010E
* * /dev/nvhost-as-gpu
* * /dev/nvhost-channel - 0x40044801, 0xC0104809, 0xC010480B, 0xC018480C, 0x4004480D, 0xC020481A, 0x40084714
* * /dev/nvhost-ctrl
* * /dev/nvhost-ctrl-gpu - 0x80044701, 0x80284702, 0xC0184706, 0xC0B04705, 0x80084714
* SVCs:
* * SetMemoryAttribute
* * CreateTransferMemory
* * ResetSignal
* * GetSystemTick
* Addition of Compact Logger
What was fixed:
* SVCs:
* * SetHeapSize
* * SetMemoryAttribute
* * QueryMemory
* A release build would not set CMAKE_BUILD_TYPE to "RELEASE"
* The logger code was simplified
2019-11-13 21:09:31 +01:00
auto bufW = reinterpret_cast < BufferDescriptorABW * > ( currPtr ) ;
if ( bufW - > Address ( ) ) {
vecBufW . push_back ( bufW ) ;
state . logger - > Debug ( " Buf W #{} AD: 0x{:X} SZ: 0x{:X} " , index , u64 ( bufW - > Address ( ) ) , u16 ( bufW - > Size ( ) ) ) ;
}
2019-09-24 22:54:27 +02:00
currPtr + = sizeof ( BufferDescriptorABW ) ;
}
Framebuffer and NativeActivity
What was added:
* Framebuffer
* NativeActivity
* NV Services
* IOCTL Handler
* NV Devices:
* * /dev/nvmap - 0xC0080101, 0xC0080103, 0xC0200104, 0xC0180105, 0xC00C0109, 0xC008010E
* * /dev/nvhost-as-gpu
* * /dev/nvhost-channel - 0x40044801, 0xC0104809, 0xC010480B, 0xC018480C, 0x4004480D, 0xC020481A, 0x40084714
* * /dev/nvhost-ctrl
* * /dev/nvhost-ctrl-gpu - 0x80044701, 0x80284702, 0xC0184706, 0xC0B04705, 0x80084714
* SVCs:
* * SetMemoryAttribute
* * CreateTransferMemory
* * ResetSignal
* * GetSystemTick
* Addition of Compact Logger
What was fixed:
* SVCs:
* * SetHeapSize
* * SetMemoryAttribute
* * QueryMemory
* A release build would not set CMAKE_BUILD_TYPE to "RELEASE"
* The logger code was simplified
2019-11-13 21:09:31 +01:00
u64 padding = ( ( ( ( reinterpret_cast < u64 > ( currPtr ) - reinterpret_cast < u64 > ( tls . data ( ) ) ) - 1U ) & ~ ( constant : : IpcPaddingSum - 1U ) ) + constant : : IpcPaddingSum + ( reinterpret_cast < u64 > ( tls . data ( ) ) - reinterpret_cast < u64 > ( currPtr ) ) ) ; // Calculate the amount of padding at the front
currPtr + = padding ;
2019-09-24 22:54:27 +02:00
2019-11-14 20:06:38 +01:00
if ( isDomain & & ( header - > type = = CommandType : : Request ) ) {
2019-09-24 22:54:27 +02:00
domain = reinterpret_cast < DomainHeaderRequest * > ( currPtr ) ;
currPtr + = sizeof ( DomainHeaderRequest ) ;
payload = reinterpret_cast < PayloadHeader * > ( currPtr ) ;
currPtr + = sizeof ( PayloadHeader ) ;
cmdArg = currPtr ;
2019-11-14 20:06:38 +01:00
cmdArgSz = domain - > payloadSz - sizeof ( PayloadHeader ) ;
currPtr + = domain - > payloadSz ;
2019-09-24 22:54:27 +02:00
2019-11-14 20:06:38 +01:00
for ( uint index = 0 ; domain - > inputCount > index ; index + + ) {
2019-09-24 22:54:27 +02:00
domainObjects . push_back ( * reinterpret_cast < handle_t * > ( currPtr ) ) ;
currPtr + = sizeof ( handle_t ) ;
}
} else {
payload = reinterpret_cast < PayloadHeader * > ( currPtr ) ;
currPtr + = sizeof ( PayloadHeader ) ;
cmdArg = currPtr ;
2019-11-14 20:06:38 +01:00
cmdArgSz = ( header - > rawSize * sizeof ( u32 ) ) - ( constant : : IpcPaddingSum + sizeof ( PayloadHeader ) ) ;
2019-09-24 22:54:27 +02:00
currPtr + = cmdArgSz ;
}
2019-11-14 20:06:38 +01:00
if ( payload - > magic ! = constant : : SfciMagic & & header - > type ! = CommandType : : Control )
Framebuffer and NativeActivity
What was added:
* Framebuffer
* NativeActivity
* NV Services
* IOCTL Handler
* NV Devices:
* * /dev/nvmap - 0xC0080101, 0xC0080103, 0xC0200104, 0xC0180105, 0xC00C0109, 0xC008010E
* * /dev/nvhost-as-gpu
* * /dev/nvhost-channel - 0x40044801, 0xC0104809, 0xC010480B, 0xC018480C, 0x4004480D, 0xC020481A, 0x40084714
* * /dev/nvhost-ctrl
* * /dev/nvhost-ctrl-gpu - 0x80044701, 0x80284702, 0xC0184706, 0xC0B04705, 0x80084714
* SVCs:
* * SetMemoryAttribute
* * CreateTransferMemory
* * ResetSignal
* * GetSystemTick
* Addition of Compact Logger
What was fixed:
* SVCs:
* * SetHeapSize
* * SetMemoryAttribute
* * QueryMemory
* A release build would not set CMAKE_BUILD_TYPE to "RELEASE"
* The logger code was simplified
2019-11-13 21:09:31 +01:00
state . logger - > Debug ( " Unexpected Magic in PayloadHeader: 0x{:X} " , u32 ( payload - > magic ) ) ;
currPtr + = constant : : IpcPaddingSum - padding ;
2019-09-24 22:54:27 +02:00
2019-11-14 20:06:38 +01:00
if ( header - > cFlag = = BufferCFlag : : SingleDescriptor ) {
Framebuffer and NativeActivity
What was added:
* Framebuffer
* NativeActivity
* NV Services
* IOCTL Handler
* NV Devices:
* * /dev/nvmap - 0xC0080101, 0xC0080103, 0xC0200104, 0xC0180105, 0xC00C0109, 0xC008010E
* * /dev/nvhost-as-gpu
* * /dev/nvhost-channel - 0x40044801, 0xC0104809, 0xC010480B, 0xC018480C, 0x4004480D, 0xC020481A, 0x40084714
* * /dev/nvhost-ctrl
* * /dev/nvhost-ctrl-gpu - 0x80044701, 0x80284702, 0xC0184706, 0xC0B04705, 0x80084714
* SVCs:
* * SetMemoryAttribute
* * CreateTransferMemory
* * ResetSignal
* * GetSystemTick
* Addition of Compact Logger
What was fixed:
* SVCs:
* * SetHeapSize
* * SetMemoryAttribute
* * QueryMemory
* A release build would not set CMAKE_BUILD_TYPE to "RELEASE"
* The logger code was simplified
2019-11-13 21:09:31 +01:00
auto bufC = reinterpret_cast < BufferDescriptorC * > ( currPtr ) ;
vecBufC . push_back ( bufC ) ;
state . logger - > Debug ( " Buf C: AD: 0x{:X} SZ: 0x{:X} " , u64 ( bufC - > address ) , u16 ( bufC - > size ) ) ;
2019-11-14 20:06:38 +01:00
} else if ( header - > cFlag > BufferCFlag : : SingleDescriptor ) {
for ( uint index = 0 ; ( static_cast < u8 > ( header - > cFlag ) - 2 ) > index ; index + + ) { // (cFlag - 2) C descriptors are present
Framebuffer and NativeActivity
What was added:
* Framebuffer
* NativeActivity
* NV Services
* IOCTL Handler
* NV Devices:
* * /dev/nvmap - 0xC0080101, 0xC0080103, 0xC0200104, 0xC0180105, 0xC00C0109, 0xC008010E
* * /dev/nvhost-as-gpu
* * /dev/nvhost-channel - 0x40044801, 0xC0104809, 0xC010480B, 0xC018480C, 0x4004480D, 0xC020481A, 0x40084714
* * /dev/nvhost-ctrl
* * /dev/nvhost-ctrl-gpu - 0x80044701, 0x80284702, 0xC0184706, 0xC0B04705, 0x80084714
* SVCs:
* * SetMemoryAttribute
* * CreateTransferMemory
* * ResetSignal
* * GetSystemTick
* Addition of Compact Logger
What was fixed:
* SVCs:
* * SetHeapSize
* * SetMemoryAttribute
* * QueryMemory
* A release build would not set CMAKE_BUILD_TYPE to "RELEASE"
* The logger code was simplified
2019-11-13 21:09:31 +01:00
auto bufC = reinterpret_cast < BufferDescriptorC * > ( currPtr ) ;
if ( bufC - > address ) {
vecBufC . push_back ( bufC ) ;
state . logger - > Debug ( " Buf C #{} AD: 0x{:X} SZ: 0x{:X} " , index , u64 ( bufC - > address ) , u16 ( bufC - > size ) ) ;
}
2019-09-24 22:54:27 +02:00
currPtr + = sizeof ( BufferDescriptorC ) ;
}
}
2019-11-14 20:06:38 +01:00
if ( header - > type = = CommandType : : Request ) {
state . logger - > Debug ( " Header: X No: {}, A No: {}, B No: {}, W No: {}, C No: {}, Raw Size: {} " , u8 ( header - > Xno ) , u8 ( header - > Ano ) , u8 ( header - > Bno ) , u8 ( header - > Wno ) , u8 ( vecBufC . size ( ) ) , u64 ( cmdArgSz ) ) ;
if ( header - > handleDesc )
state . logger - > Debug ( " Handle Descriptor: Send PID: {}, Copy Count: {}, Move Count: {} " , bool ( handleDesc - > sendPid ) , u32 ( handleDesc - > copyCount ) , u32 ( handleDesc - > moveCount ) ) ;
if ( isDomain )
state . logger - > Debug ( " Domain Header: Command: {}, Input Object Count: {}, Object ID: 0x{:X} " , domain - > command , domain - > inputCount , domain - > objectId ) ;
state . logger - > Debug ( " Command ID: 0x{:X} " , u32 ( payload - > value ) ) ;
}
2019-09-24 22:54:27 +02:00
}
IpcResponse : : IpcResponse ( bool isDomain , const DeviceState & state ) : isDomain ( isDomain ) , state ( state ) { }
void IpcResponse : : WriteTls ( ) {
std : : array < u8 , constant : : TlsIpcSize > tls { } ;
u8 * currPtr = tls . data ( ) ;
auto header = reinterpret_cast < CommandHeader * > ( currPtr ) ;
2019-11-14 20:06:38 +01:00
header - > rawSize = static_cast < u32 > ( ( sizeof ( PayloadHeader ) + argVec . size ( ) + ( domainObjects . size ( ) * sizeof ( handle_t ) ) + constant : : IpcPaddingSum + ( isDomain ? sizeof ( DomainHeaderRequest ) : 0 ) ) / sizeof ( u32 ) ) ; // Size is in 32-bit units because Nintendo
header - > handleDesc = ( ! copyHandles . empty ( ) | | ! moveHandles . empty ( ) ) ;
2019-09-24 22:54:27 +02:00
currPtr + = sizeof ( CommandHeader ) ;
2019-11-14 20:06:38 +01:00
if ( header - > handleDesc ) {
2019-09-24 22:54:27 +02:00
auto handleDesc = reinterpret_cast < HandleDescriptor * > ( currPtr ) ;
2019-11-14 20:06:38 +01:00
handleDesc - > copyCount = static_cast < u8 > ( copyHandles . size ( ) ) ;
handleDesc - > moveCount = static_cast < u8 > ( moveHandles . size ( ) ) ;
2019-09-24 22:54:27 +02:00
currPtr + = sizeof ( HandleDescriptor ) ;
for ( unsigned int copyHandle : copyHandles ) {
* reinterpret_cast < handle_t * > ( currPtr ) = copyHandle ;
currPtr + = sizeof ( handle_t ) ;
}
for ( unsigned int moveHandle : moveHandles ) {
* reinterpret_cast < handle_t * > ( currPtr ) = moveHandle ;
currPtr + = sizeof ( handle_t ) ;
}
}
Framebuffer and NativeActivity
What was added:
* Framebuffer
* NativeActivity
* NV Services
* IOCTL Handler
* NV Devices:
* * /dev/nvmap - 0xC0080101, 0xC0080103, 0xC0200104, 0xC0180105, 0xC00C0109, 0xC008010E
* * /dev/nvhost-as-gpu
* * /dev/nvhost-channel - 0x40044801, 0xC0104809, 0xC010480B, 0xC018480C, 0x4004480D, 0xC020481A, 0x40084714
* * /dev/nvhost-ctrl
* * /dev/nvhost-ctrl-gpu - 0x80044701, 0x80284702, 0xC0184706, 0xC0B04705, 0x80084714
* SVCs:
* * SetMemoryAttribute
* * CreateTransferMemory
* * ResetSignal
* * GetSystemTick
* Addition of Compact Logger
What was fixed:
* SVCs:
* * SetHeapSize
* * SetMemoryAttribute
* * QueryMemory
* A release build would not set CMAKE_BUILD_TYPE to "RELEASE"
* The logger code was simplified
2019-11-13 21:09:31 +01:00
u64 padding = ( ( ( ( reinterpret_cast < u64 > ( currPtr ) - reinterpret_cast < u64 > ( tls . data ( ) ) ) - 1U ) & ~ ( constant : : IpcPaddingSum - 1U ) ) + constant : : IpcPaddingSum + ( reinterpret_cast < u64 > ( tls . data ( ) ) - reinterpret_cast < u64 > ( currPtr ) ) ) ; // Calculate the amount of padding at the front
2019-09-24 22:54:27 +02:00
currPtr + = padding ;
if ( isDomain ) {
auto domain = reinterpret_cast < DomainHeaderResponse * > ( currPtr ) ;
2019-11-14 20:06:38 +01:00
domain - > outputCount = static_cast < u32 > ( domainObjects . size ( ) ) ;
2019-09-24 22:54:27 +02:00
currPtr + = sizeof ( DomainHeaderResponse ) ;
}
auto payload = reinterpret_cast < PayloadHeader * > ( currPtr ) ;
payload - > magic = constant : : SfcoMagic ;
payload - > version = 1 ;
payload - > value = errorCode ;
currPtr + = sizeof ( PayloadHeader ) ;
if ( ! argVec . empty ( ) )
memcpy ( currPtr , argVec . data ( ) , argVec . size ( ) ) ;
currPtr + = argVec . size ( ) ;
Framebuffer and NativeActivity
What was added:
* Framebuffer
* NativeActivity
* NV Services
* IOCTL Handler
* NV Devices:
* * /dev/nvmap - 0xC0080101, 0xC0080103, 0xC0200104, 0xC0180105, 0xC00C0109, 0xC008010E
* * /dev/nvhost-as-gpu
* * /dev/nvhost-channel - 0x40044801, 0xC0104809, 0xC010480B, 0xC018480C, 0x4004480D, 0xC020481A, 0x40084714
* * /dev/nvhost-ctrl
* * /dev/nvhost-ctrl-gpu - 0x80044701, 0x80284702, 0xC0184706, 0xC0B04705, 0x80084714
* SVCs:
* * SetMemoryAttribute
* * CreateTransferMemory
* * ResetSignal
* * GetSystemTick
* Addition of Compact Logger
What was fixed:
* SVCs:
* * SetHeapSize
* * SetMemoryAttribute
* * QueryMemory
* A release build would not set CMAKE_BUILD_TYPE to "RELEASE"
* The logger code was simplified
2019-11-13 21:09:31 +01:00
if ( isDomain ) {
for ( auto & domainObject : domainObjects ) {
2019-09-24 22:54:27 +02:00
* reinterpret_cast < handle_t * > ( currPtr ) = domainObject ;
currPtr + = sizeof ( handle_t ) ;
}
}
2019-11-14 20:06:38 +01:00
state . logger - > Debug ( " Output: Raw Size: {}, Command ID: 0x{:X}, Copy Handles: {}, Move Handles: {} " , u32 ( header - > rawSize ) , u32 ( payload - > value ) , copyHandles . size ( ) , moveHandles . size ( ) ) ;
2019-10-13 10:04:47 +02:00
2019-09-24 22:54:27 +02:00
state . thisProcess - > WriteMemory ( tls . data ( ) , state . thisThread - > tls , constant : : TlsIpcSize ) ;
}
Framebuffer and NativeActivity
What was added:
* Framebuffer
* NativeActivity
* NV Services
* IOCTL Handler
* NV Devices:
* * /dev/nvmap - 0xC0080101, 0xC0080103, 0xC0200104, 0xC0180105, 0xC00C0109, 0xC008010E
* * /dev/nvhost-as-gpu
* * /dev/nvhost-channel - 0x40044801, 0xC0104809, 0xC010480B, 0xC018480C, 0x4004480D, 0xC020481A, 0x40084714
* * /dev/nvhost-ctrl
* * /dev/nvhost-ctrl-gpu - 0x80044701, 0x80284702, 0xC0184706, 0xC0B04705, 0x80084714
* SVCs:
* * SetMemoryAttribute
* * CreateTransferMemory
* * ResetSignal
* * GetSystemTick
* Addition of Compact Logger
What was fixed:
* SVCs:
* * SetHeapSize
* * SetMemoryAttribute
* * QueryMemory
* A release build would not set CMAKE_BUILD_TYPE to "RELEASE"
* The logger code was simplified
2019-11-13 21:09:31 +01:00
std : : vector < u8 > BufferDescriptorABW : : Read ( const DeviceState & state ) {
std : : vector < u8 > vec ( Size ( ) ) ;
state . thisProcess - > ReadMemory ( vec . data ( ) , Address ( ) , Size ( ) ) ;
return std : : move ( vec ) ;
}
2019-09-24 22:54:27 +02:00
}