• 0

[C#] Read Specific Memory Address from Process


Question

I'm trying to read a specific memory address from a selected Process.

I've never done anything like this, but I believe some languages have ReadProcessMemory & WriteProcessMemory Methods. But I can't find a specific one for C#, much less how to control their arguments.

I found one way to find the process in memory, and the following code will in fact shutdown the program.

But I want to access its' memory space to read and eventually modify the memory space using memory addresses.

  Quote
System.Diagnostics.Process[]myProcesses;

  myProcesses =

    System.Diagnostics.Process.GetProcessesByName("starcraft");

  foreach (System.Diagnostics.Process instance in myProcesses)

  {

    instance.CloseMainWindow();

   

  }

3 answers to this question

Recommended Posts

  • 0

If you want to do something this low level you are probably better off writing it using C/C++/Assembly. You should be able to call win32 functions from C#. You should check MSDN for ReadProcessMemory and it will tell you what parameters you need.

  • 0

Thanks for your fast Reply Andareed. I have the MSDN Library, and have been frequenting the more updated Online one for this case as well as google and ask.com, however I have limited knowledge in programming and in troubleshooting in this sort of development dealing with processes. I want to use C# to do this because that's what i'm studying and am most familiar with.

  Quote
[DllImport("kernel32.dll", SetLastError=false)]static extern int ReadProcessMemory ( int hProcess, ref object lpBaseAddress, ref object lpBuffer, int nSize, ref int lpNumberOfBytesWritten);

 

  [sTAThread]

  static void Main(string[] args)

  {

  Process[] myProcess = Process.GetProcessesByName("notepad");

 

  string vout,vout2;

  vout2 = ReadProcessMemory(68804,401F75,vout,6,6);

I have the Handle ID,

I know the Address I want to Read

The other Parameters I don't have any idea of.

I found This description of ReadProcessMemory, but i'm not sure I fully understand the parameter types. No need to visit here if you're familiar with the method.

  • 0

You need to get hProcess which is in Process.Handle, lpBaseAddress is your memory address (relative to target process), lpBuffer is pointer to a buffer (relative to this process) that receives data read, nSize is size of lpBuffer, lpNumberOfBytes is pointer to DWORD of how many bytes are actually read. I have very little C# experience so I have no idea how you would go about passing in buffer addresses.

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.