在 Mac 从另一个进程读取内存

Reading memory from another process on Mac

我正在构建一个用于读取内存的库,我想将其扩展到 Mac OS。

在许多其他函数中,许多方法使用的一个主要函数是ReadProcessMemory

[DllImport("kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool ReadProcessMemory(
    [In] IntPtr hProcess,
    [In] IntPtr lpBaseAddress,
    [Out] byte[] lpBuffer,
    [In] SIZE_T nSize,
    [Out] out SIZE_T lpNumberOfBytesRead
);

我现在想知道 Mac 上的等效项是什么。网上查了一下(当然几乎没有文档),我觉得方法签名应该是这样的;

[DllImport("...")]
[return: MarshalAs(UnmanagedType.I4)]
static extern int vm_read_overwrite(
    [In] IntPtr target_task,
    [In] IntPtr address,
    [In] SIZE_T size,
    [Out] byte[] data,
    [Out] out SIZE_T outsize
);

vm_read_overwrite is also what's used by several Rust libraries.


library/package 是 vm_read_overwrite 的一部分?签名是否正确?也许另外,我可以使用条件编译来使用不同的功能,还是必须使用 RuntimeInformation.IsOSPlatform?

    [DllImport("libc")]
    static extern int vm_read_overwrite(
        [In] IntPtr target_task,
        [In] IntPtr address,
        [In] uint size,
        [Out] byte[] data,
        [Out] out uint outsize
    );

这适用于我的机器。希望对你有帮助。