Class SafeMemory
Class facilitating safe memory access
Inheritance
Inherited Members
Namespace: Dalamud
Assembly: Dalamud.dll
Syntax
public static class SafeMemory
Remarks
Attention! The performance of these methods is severely worse than regular System.Runtime.InteropServices.Marshal calls. Please consider using these instead in performance-critical code.
Methods
| Improve this Doc View SourceRead<T>(IntPtr, out T)
Read an object of the specified struct from the current process.
Declaration
public static bool Read<T>(IntPtr address, out T result)
where T : struct
Parameters
| Type | Name | Description |
|---|---|---|
| System.IntPtr | address | The address to read from. |
| T | result | The resulting object. |
Returns
| Type | Description |
|---|---|
| System.Boolean | Whether or not the read succeeded. |
Type Parameters
| Name | Description |
|---|---|
| T | The type of the struct. |
Read<T>(IntPtr, Int32)
Read an array of objects of the specified struct from the current process.
Declaration
[CanBeNull]
public static T[] Read<T>(IntPtr address, int count)
where T : struct
Parameters
| Type | Name | Description |
|---|---|---|
| System.IntPtr | address | The address to read from. |
| System.Int32 | count | The length of the array. |
Returns
| Type | Description |
|---|---|
| T[] | An array of the read objects, or null if any entry of the array failed to read. |
Type Parameters
| Name | Description |
|---|---|
| T | The type of the struct. |
ReadBytes(IntPtr, Int32, out Byte[])
Read a byte array from the current process.
Declaration
public static bool ReadBytes(IntPtr address, int count, out byte[] buffer)
Parameters
| Type | Name | Description |
|---|---|---|
| System.IntPtr | address | The address to read from. |
| System.Int32 | count | The amount of bytes to read. |
| System.Byte[] | buffer | The result buffer. |
Returns
| Type | Description |
|---|---|
| System.Boolean | Whether or not the read succeeded. |
ReadString(IntPtr, Int32)
Read a string from the current process(UTF-8).
Declaration
[CanBeNull]
public static string ReadString(IntPtr address, int maxLength = 256)
Parameters
| Type | Name | Description |
|---|---|---|
| System.IntPtr | address | The address to read from. |
| System.Int32 | maxLength | The maximum length of the string. |
Returns
| Type | Description |
|---|---|
| System.String | The read string, or null in case the read was not successful. |
Remarks
Attention! This will use the .NET Encoding.UTF8 class to decode the text. If you read a FFXIV string, please use ReadBytes and parse the string with the applicable class, since Encoding.UTF8 destroys the FFXIV payload structure.
ReadString(IntPtr, Encoding, Int32)
Read a string from the current process(UTF-8).
Declaration
[CanBeNull]
public static string ReadString(IntPtr address, Encoding encoding, int maxLength = 256)
Parameters
| Type | Name | Description |
|---|---|---|
| System.IntPtr | address | The address to read from. |
| System.Text.Encoding | encoding | The encoding to use to decode the string. |
| System.Int32 | maxLength | The maximum length of the string. |
Returns
| Type | Description |
|---|---|
| System.String | The read string, or null in case the read was not successful. |
Remarks
Attention! This will use the .NET Encoding class to decode the text. If you read a FFXIV string, please use ReadBytes and parse the string with the applicable class, since Encoding may destroy the FFXIV payload structure.
SizeOf<T>()
Get the size of the passed type.
Declaration
public static int SizeOf<T>()
Returns
| Type | Description |
|---|---|
| System.Int32 | The size of the passed type. |
Type Parameters
| Name | Description |
|---|---|
| T | The type to inspect. |
Write<T>(IntPtr, T)
Write a struct to the current process.
Declaration
public static bool Write<T>(IntPtr address, T obj)
where T : struct
Parameters
| Type | Name | Description |
|---|---|---|
| System.IntPtr | address | The address to write to. |
| T | obj | The object to write. |
Returns
| Type | Description |
|---|---|
| System.Boolean | Whether or not the write succeeded. |
Type Parameters
| Name | Description |
|---|---|
| T | The type of the struct. |
Write<T>(IntPtr, T[])
Write an array of structs to the current process.
Declaration
public static bool Write<T>(IntPtr address, T[] objArray)
where T : struct
Parameters
| Type | Name | Description |
|---|---|---|
| System.IntPtr | address | The address to write to. |
| T[] | objArray | The array to write. |
Returns
| Type | Description |
|---|---|
| System.Boolean | Whether or not the write succeeded. |
Type Parameters
| Name | Description |
|---|---|
| T | The type of the structs. |
WriteBytes(IntPtr, Byte[])
Write a byte array to the current process.
Declaration
public static bool WriteBytes(IntPtr address, byte[] buffer)
Parameters
| Type | Name | Description |
|---|---|---|
| System.IntPtr | address | The address to write to. |
| System.Byte[] | buffer | The buffer to write. |
Returns
| Type | Description |
|---|---|
| System.Boolean | Whether or not the write succeeded. |
WriteString(IntPtr, String)
Write a string to the current process.
Declaration
public static bool WriteString(IntPtr address, string str)
Parameters
| Type | Name | Description |
|---|---|---|
| System.IntPtr | address | The address to write to. |
| System.String | str | The string to write. |
Returns
| Type | Description |
|---|---|
| System.Boolean | Whether or not the write succeeded. |
Remarks
Attention! This will use the .NET Encoding class to encode the text. If you read a FFXIV string, please use WriteBytes with the applicable encoded SeString, since Encoding may destroy the FFXIV payload structure.
WriteString(IntPtr, String, Encoding)
Write a string to the current process.
Declaration
public static bool WriteString(IntPtr address, string str, Encoding encoding)
Parameters
| Type | Name | Description |
|---|---|---|
| System.IntPtr | address | The address to write to. |
| System.String | str | The string to write. |
| System.Text.Encoding | encoding | The encoding to use. |
Returns
| Type | Description |
|---|---|
| System.Boolean | Whether or not the write succeeded. |
Remarks
Attention! This will use the .NET Encoding class to encode the text. If you read a FFXIV string, please use WriteBytes with the applicable encoded SeString, since Encoding may destroy the FFXIV payload structure.