Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Diagnostics;
- using System.IO;
- using System.Runtime.InteropServices;
- using System.Text;
- namespace gtaivtest {
- class ProcessMemory {
- public IntPtr openedHandle;
- private Process m_process;
- public UInt32 MainModuleAddress {
- get { return (UInt32)m_process.MainModule.BaseAddress.ToInt32(); }
- }
- [DllImport("kernel32.dll")]
- static extern IntPtr OpenProcess(UInt32 dwDesiredAccess, bool bInheritHandle, int dwProcessId);
- public bool Open(Process process) {
- m_process = process;
- if(process.HandleCount > 0) {
- openedHandle = OpenProcess(0x1F0FFF, true, process.Id);
- return true;
- } else return false;
- }
- [DllImport("kernel32.dll")]
- static extern Int32 ReadProcessMemory(IntPtr OpenedHandle, IntPtr lpBaseAddress, byte[] lpBuffer, UInt32 size, out IntPtr lpNumberOfBytesRead);
- private byte[] MemoryRead(IntPtr OpenedHandle, IntPtr BaseAddress, UInt32 Size, ref IntPtr Bytes) {
- byte[] buffer = new byte[Size];
- ReadProcessMemory(OpenedHandle, BaseAddress, buffer, Size, out Bytes);
- return buffer;
- }
- public UInt32 ReadU32(UInt32 address) {
- IntPtr bytes = new IntPtr();
- byte[] outp = MemoryRead(openedHandle, (IntPtr)address, sizeof(UInt32), ref bytes);
- return BitConverter.ToUInt32(outp, 0);
- }
- public float ReadF32(UInt32 address) {
- IntPtr bytes = new IntPtr();
- byte[] outp = MemoryRead(openedHandle, (IntPtr)address, sizeof(float), ref bytes);
- return BitConverter.ToSingle(outp, 0);
- }
- [DllImport("kernel32.dll")]
- static extern Int32 CloseHandle(IntPtr hObject);
- public int Close() {
- int rtn;
- rtn = CloseHandle(openedHandle);
- return rtn;
- }
- }
- class Program {
- //0x9D2D80 : int __cdecl createObject(int modelID, float x, float y, float z, int* handle, int flags)
- delegate int createObject(int modelID, float x, float y, float z, out IntPtr handle, int flags);
- static void Main(string[] args) {
- Process process = Process.GetProcessesByName("gtaiv")[0];
- ProcessMemory memory = new ProcessMemory();
- if(memory.Open(process) == false) {
- Console.WriteLine("Failed to open GTA4");
- return;
- }
- IntPtr handle = IntPtr.Zero;
- createObject createObj = Marshal.GetDelegateForFunctionPointer((IntPtr)(memory.MainModuleAddress + 0x9D2D80), typeof(createObject)) as createObject;
- int retValue = createObj(0x18F25AC7, 120, 830, 15, out handle, 1); //AccessViolationException: "Attempted to read or write protected memory. This is often an indication that other memory is corrupt."
- memory.Close();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement