<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to Home</title><link>https://sourceforge.net/p/ramvader/wiki/Home/</link><description>Recent changes to Home</description><atom:link href="https://sourceforge.net/p/ramvader/wiki/Home/feed" rel="self"/><language>en</language><lastBuildDate>Thu, 19 May 2016 05:14:28 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/ramvader/wiki/Home/feed" rel="self" type="application/rss+xml"/><item><title>Home modified by vinicius.ras</title><link>https://sourceforge.net/p/ramvader/wiki/Home/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v5
+++ v6
@@ -13,6 +13,9 @@
 * [The Injector](LearnInjector): inject binary code and data into other process' memory space!
 * [Advanced topics](LearnEndiannessPointersErrorHandling): endianness, pointers and error handling.

+**[API reference](http://ramvader.sourceforge.net/API/)** is also available online for the **RAMvader** library.
+*NOTE: you can download it as well for offline usage in the [project's files page](https://sourceforge.net/projects/ramvader/files/).*
+
 # About the library's source code... #

 ### Visual Studio support ###
@@ -26,5 +29,3 @@
 - **RAMvader**: the main project, whose main purpose is to generate a Dynamic Linking Library (DLL), which can be referenced by other projects. This project contains all the source code needed to provide the core functionality for the **RAMvader** library.
 - **RAMvaderGUI**: a secondary project, built on top of Microsoft's Windows Presentation Foundation (WPF), which consists in a small application that allows the user to perform read and write operations on other processes running in the user's machine. The user can select any process running in his/her machine and them read or alter the process' memory. Read and write operations are performed by using the **RAMvader** library.
 - **RAMvaderTestTarget**: this project consists of a small program written in C++. As its name implies, it is supposed to be used as a "test target" for the **RAMvader** library. That is, this application is specially crafted so that it is easy to watch its memory values and alter them through the use of the **RAMvader** library. In fact, the application simply displays a list of differently-typed variables, along with their memory addresses and current values, so that the user can easily watch and modify the application's variables. This application is used for testing the functionalities of the **RAMvader** library, which can be easily done by using the RAMvaderGUI application.
-
-You can also access the **RAMvader** library API reference by [clicking here](http://ramvader.sourceforge.net/API/).
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">vinicius.ras</dc:creator><pubDate>Thu, 19 May 2016 05:14:28 -0000</pubDate><guid>https://sourceforge.net9d5e4f8893a8c9d541b8b1f8b9c3dd616dcc4005</guid></item><item><title>Home modified by vinicius.ras</title><link>https://sourceforge.net/p/ramvader/wiki/Home/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v4
+++ v5
@@ -2,9 +2,9 @@

 ## Description ##

-RAMvader is a small C#-written library which uses p/Invoke on Windows-based systems to provide functionalities to ease the access to other processes' memory space. It basically allows your software to read data from and/or write data to another process' memory space.
+**RAMvader** is a small C#-written library which uses p/Invoke on Windows-based systems to provide functionalities to ease the access to other processes' memory space. It basically allows your software to read data from and/or write data to another process' memory space.

-The main, initial purpose of RAMvader is to provide a library that can be used in the development of game trainers, but it might also fit other purposes, such as antivirus/security software, machine learning, benchmarking, and others.
+The main, initial purpose of **RAMvader** is to provide a library that can be used in the development of game trainers, but it might also fit other purposes, such as antivirus/security software, machine learning, benchmarking, and others.

 # How to use the library? #
 Please, use the following links to access our guides on how to use the **RAMvader** library:
@@ -23,8 +23,8 @@

 The library comes as a set of three projects, grouped into a Visual Studio Express solution.

-- **RAMvader**: the main project, whose main purpose is to generate a Dynamic Linking Library, which can be referenced by other projects. This project contains all the source code needed to provide the core functionality for the RAMvader library.
-- **RAMvaderGUI**: a secondary project, built on top of Microsoft's Windows Presentation Foundation (WPF), which consists in a small application that allows the user to perform read and write operations on other processes running in the user's machine. The user can select any process running in his/her machine and them read or alter the process' memory. Read and write operations are performed by using the RAMvader library.
-- **RAMvaderTestTarget**: this project consists of a small program written in C++. As its name implies, it is supposed to be used as a "test target" for the RAMvader library. That is, this application is specially crafted so that it is easy to watch its memory values and alter them through the use of the RAMvader library. In fact, the application simply displays a list of differently-typed variables, along with their memory addresses and current values, so that the user can easily watch and modify the application's variables. This application is used for testing the functionalities of the RAMvader library, which can be easily done by using the RAMvaderGUI application.
+- **RAMvader**: the main project, whose main purpose is to generate a Dynamic Linking Library (DLL), which can be referenced by other projects. This project contains all the source code needed to provide the core functionality for the **RAMvader** library.
+- **RAMvaderGUI**: a secondary project, built on top of Microsoft's Windows Presentation Foundation (WPF), which consists in a small application that allows the user to perform read and write operations on other processes running in the user's machine. The user can select any process running in his/her machine and them read or alter the process' memory. Read and write operations are performed by using the **RAMvader** library.
+- **RAMvaderTestTarget**: this project consists of a small program written in C++. As its name implies, it is supposed to be used as a "test target" for the **RAMvader** library. That is, this application is specially crafted so that it is easy to watch its memory values and alter them through the use of the **RAMvader** library. In fact, the application simply displays a list of differently-typed variables, along with their memory addresses and current values, so that the user can easily watch and modify the application's variables. This application is used for testing the functionalities of the **RAMvader** library, which can be easily done by using the RAMvaderGUI application.

 You can also access the **RAMvader** library API reference by [clicking here](http://ramvader.sourceforge.net/API/).
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">vinicius.ras</dc:creator><pubDate>Thu, 19 May 2016 04:51:54 -0000</pubDate><guid>https://sourceforge.net6af175b4898bb6cebe91e3f6366ed5727b8c5d98</guid></item><item><title>Home modified by vinicius.ras</title><link>https://sourceforge.net/p/ramvader/wiki/Home/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v3
+++ v4
@@ -6,7 +6,14 @@

 The main, initial purpose of RAMvader is to provide a library that can be used in the development of game trainers, but it might also fit other purposes, such as antivirus/security software, machine learning, benchmarking, and others.

-## About the library's source code... ##
+# How to use the library? #
+Please, use the following links to access our guides on how to use the **RAMvader** library:
+
+* [First Steps](LearnCore): learn the library's basics!
+* [The Injector](LearnInjector): inject binary code and data into other process' memory space!
+* [Advanced topics](LearnEndiannessPointersErrorHandling): endianness, pointers and error handling.
+
+# About the library's source code... #

 ### Visual Studio support ###

@@ -20,11 +27,4 @@
 - **RAMvaderGUI**: a secondary project, built on top of Microsoft's Windows Presentation Foundation (WPF), which consists in a small application that allows the user to perform read and write operations on other processes running in the user's machine. The user can select any process running in his/her machine and them read or alter the process' memory. Read and write operations are performed by using the RAMvader library.
 - **RAMvaderTestTarget**: this project consists of a small program written in C++. As its name implies, it is supposed to be used as a "test target" for the RAMvader library. That is, this application is specially crafted so that it is easy to watch its memory values and alter them through the use of the RAMvader library. In fact, the application simply displays a list of differently-typed variables, along with their memory addresses and current values, so that the user can easily watch and modify the application's variables. This application is used for testing the functionalities of the RAMvader library, which can be easily done by using the RAMvaderGUI application.

-# How to use the library? #
-Please, use the following links to access our guides on how to use the **RAMvader** library:
-
-* [First Steps](LearnCore): learn the library's basics!
-* [The Injector](LearnInjector): inject binary code and data into other process' memory space!
-* [Advanced topics](LearnEndiannessPointersErrorHandling): endianness, pointers and error handling.
-
 You can also access the **RAMvader** library API reference by [clicking here](http://ramvader.sourceforge.net/API/).
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">vinicius.ras</dc:creator><pubDate>Thu, 19 May 2016 03:07:41 -0000</pubDate><guid>https://sourceforge.netfe0556c161479f38fd1ed435f7c7256d4c084027</guid></item><item><title>Home modified by vinicius.ras</title><link>https://sourceforge.net/p/ramvader/wiki/Home/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v2
+++ v3
@@ -26,3 +26,5 @@
 * [First Steps](LearnCore): learn the library's basics!
 * [The Injector](LearnInjector): inject binary code and data into other process' memory space!
 * [Advanced topics](LearnEndiannessPointersErrorHandling): endianness, pointers and error handling.
+
+You can also access the **RAMvader** library API reference by [clicking here](http://ramvader.sourceforge.net/API/).
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">vinicius.ras</dc:creator><pubDate>Thu, 19 May 2016 01:56:23 -0000</pubDate><guid>https://sourceforge.net19917981d1bd97308c1142ab5861725a23f00dba</guid></item><item><title>Home modified by vinicius.ras</title><link>https://sourceforge.net/p/ramvader/wiki/Home/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v1
+++ v2
@@ -1,8 +1,28 @@
-Welcome to your wiki!
+# The RAMvader Library #

-This is the default page, edit it as you see fit. To add a new page simply reference it within brackets, e.g.: [SamplePage].
+## Description ##

-The wiki uses [Markdown](/p/ramvader/wiki/markdown_syntax/) syntax.
+RAMvader is a small C#-written library which uses p/Invoke on Windows-based systems to provide functionalities to ease the access to other processes' memory space. It basically allows your software to read data from and/or write data to another process' memory space.

-[[members limit=20]]
-[[download_button]]
+The main, initial purpose of RAMvader is to provide a library that can be used in the development of game trainers, but it might also fit other purposes, such as antivirus/security software, machine learning, benchmarking, and others.
+
+## About the library's source code... ##
+
+### Visual Studio support ###
+
+The project is developed in Microsoft's Visual Studio, and that is currently the only supported development environment, although we will try to answer as many questions or issues related to the project as we can.
+
+### The Visual Studio Express solution ###
+
+The library comes as a set of three projects, grouped into a Visual Studio Express solution.
+
+- **RAMvader**: the main project, whose main purpose is to generate a Dynamic Linking Library, which can be referenced by other projects. This project contains all the source code needed to provide the core functionality for the RAMvader library.
+- **RAMvaderGUI**: a secondary project, built on top of Microsoft's Windows Presentation Foundation (WPF), which consists in a small application that allows the user to perform read and write operations on other processes running in the user's machine. The user can select any process running in his/her machine and them read or alter the process' memory. Read and write operations are performed by using the RAMvader library.
+- **RAMvaderTestTarget**: this project consists of a small program written in C++. As its name implies, it is supposed to be used as a "test target" for the RAMvader library. That is, this application is specially crafted so that it is easy to watch its memory values and alter them through the use of the RAMvader library. In fact, the application simply displays a list of differently-typed variables, along with their memory addresses and current values, so that the user can easily watch and modify the application's variables. This application is used for testing the functionalities of the RAMvader library, which can be easily done by using the RAMvaderGUI application.
+
+# How to use the library? #
+Please, use the following links to access our guides on how to use the **RAMvader** library:
+
+* [First Steps](LearnCore): learn the library's basics!
+* [The Injector](LearnInjector): inject binary code and data into other process' memory space!
+* [Advanced topics](LearnEndiannessPointersErrorHandling): endianness, pointers and error handling.
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">vinicius.ras</dc:creator><pubDate>Tue, 17 May 2016 20:18:34 -0000</pubDate><guid>https://sourceforge.net2aaafee60f1b7a5b5ba6f38e91dfb0b945e07d87</guid></item><item><title>Discussion for Home page</title><link>https://sourceforge.net/p/ramvader/wiki/Home/</link><description>&lt;div class="markdown_content"&gt;&lt;h1 id="the-ramvader-library"&gt;The RAMvader Library&lt;/h1&gt;
&lt;h2 id="library-description"&gt;Library description&lt;/h2&gt;
&lt;p&gt;RAMvader is a small C#-written library which uses p/Invoke on Windows-based systems to provide functionalities to ease the access to other processes' memory space. It basically allows your software to read data from and/or write data to another process' memory space.&lt;/p&gt;
&lt;p&gt;The main, initial purpose of RAMvader is to provide a library that can be used in the development of game trainers, but it might also fit other purposes.&lt;/p&gt;
&lt;h2 id="visual-studio-support"&gt;Visual Studio support&lt;/h2&gt;
&lt;p&gt;The project is developed in Microsoft's Visual Studio, and that is currently the only supported development environment. Although we will try to answer any questions or issues we can related to the project, the issues with other development environments are not supported, a&lt;/p&gt;
&lt;h2 id="the-visual-studio-express-solution"&gt;The Visual Studio Express solution&lt;/h2&gt;
&lt;p&gt;The library comes as a set of three projects, grouped into a Visual Studio Express solution.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RAMvader&lt;/strong&gt;: the main project, whose main purpose is to generate a Dynamic Linking Library, which can be referenced by other projects. This project contains all the source code needed to provide the core functionality for the RAMvader library.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RAMvaderGUI&lt;/strong&gt;: a secondary project, built on top of Microsoft's Windows Presentation Foundation, which consists into a small application that allows the user to perform read and write operations on other processes running in the user's machine. There read and write operations are performed by using the RAMvader library.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RAMvaderTestTarget&lt;/strong&gt;: this project consists of a small program written in C++. As its name implies, it is supposed to be used as a "test target" for the RAMvader library. That is, this application is specially crafted so that it is easy to watch its memory values and alter them through the use of the RAMvader library. In fact, the application simply displays a list of differently-typed variables, along with their memory addresses and current values, so that the user can easily watch and modify the application's variables. This application is used for testing the functionalities of the RAMvader library, which can be easily done by using the RAMvaderGUI application.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id="ramvader-usage"&gt;RAMvader usage&lt;/h1&gt;
&lt;h2 id="adding-the-library-to-your-project"&gt;Adding the library to your project&lt;/h2&gt;
&lt;p&gt;To have access to the RAMvader namespace and its classes in your project, you should first choose one of the following options of deployment:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt; (RECOMMENDED) Use the DLL &lt;/strong&gt;: you can download a precompiled copy of the Dynamic Linking Library (DLL) generated for the RAMvader project. The DLL can be obtained by downloading the binaries on RAMvader's Sourceforge project page. Then, open up your project and add a reference to the DLL you have downloaded. Doing this will enable you to use the RAMvader namespace and its classes. This is the recommended way to use the library, as you don't have to deal with any compilation issues, you can always ensure you're using a stable version of the library and you can easily update the DLL in future releases.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt; Compile the RAMvader project &lt;/strong&gt;: alternatively, you can download a copy of the RAMvader's library solution and compile it. It is only necessary to compile the "RAMvader" project which is in the solution. The compilation of this project will generate the Dynamic Linking Library (DLL) file which can be referenced into your own project for the RAMvader classes and namespaces to be used.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt; Include the source files in your project &lt;/strong&gt;: you can also copy all the files under the "RAMvader" project into your own project. This might be the easiest approach for inexperienced programmers, but is also the least recommended one: the source files and their structures might change a lot, turning future updates impractical.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="using-the-library"&gt;Using the library&lt;/h2&gt;
&lt;h3 id="general-guidelines"&gt;General guidelines&lt;/h3&gt;
&lt;p&gt;The library classes are contained into the &lt;strong&gt;RAMvader&lt;/strong&gt; namespace. You will usually only need to use the &lt;strong&gt;RAMvaderTarget&lt;/strong&gt; class. This class manages a "target", which is really just a process running into the user's local machine, whose memory you have interest in, for performing I/O operations. A single &lt;strong&gt;RAMvaderTarget&lt;/strong&gt; instance may only handle up to &lt;strong&gt;one&lt;/strong&gt; single Process at a time. If your application needs to perform memory operations in more than one single, "external" process at any time, you might instantiate more &lt;strong&gt;RAMvaderTarget&lt;/strong&gt; objects as necessary (one for each process). Currently, &lt;strong&gt;RAMvaderTarget&lt;/strong&gt; objects can be created by using their class' default constructor.&lt;/p&gt;
&lt;p&gt;The library has its own Exception-derived classes. All the exceptions thrown by the library's own code derive from the &lt;strong&gt;RAMvaderException&lt;/strong&gt; classes. Notice, though, that calls to some methods related to the Windows API and to the Process class are made inside the library's code, and they might throw their own, standard exceptions to your client code in some cases. An effort will be made in future releases to document the thrown exceptions.&lt;/p&gt;
&lt;h3 id="process-attachment-and-detachment"&gt;Process attachment and detachment&lt;/h3&gt;
&lt;p&gt;The first thing you should do is to "attach" an instance of the &lt;strong&gt;RAMvaderTarget&lt;/strong&gt; class to one of the processes running into the local machine. When you attach a &lt;strong&gt;RAMvaderTarget&lt;/strong&gt;, you allow it to open the target process' memory for reading and writing operations. This method returns a bool value indicating if the operation was successful. The attachment method requires a Process object to be provided, indicating the target process to which the &lt;strong&gt;RAMvaderTarget&lt;/strong&gt; instance will be attached.&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;using&lt;/span&gt; &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;using&lt;/span&gt; &lt;span class="n"&gt;RAMvader&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="p"&gt;...&lt;/span&gt;

&lt;span class="c1"&gt;// Attach a RAMvaderTarget to process with PID 112233&lt;/span&gt;
&lt;span class="n"&gt;Process&lt;/span&gt; &lt;span class="n"&gt;targetProc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetProcessById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="mi"&gt;112233&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="n"&gt;RAMvaderTarget&lt;/span&gt; &lt;span class="n"&gt;myTarget&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;new&lt;/span&gt; &lt;span class="n"&gt;RAMvaderTarget&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;myTarget&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;attachToProcess&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;targetProc&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nb"&gt;false&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
   &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;"Error attaching to process!"&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;There are some points to highlight for the attachment process:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can get a list of the running processes in your local machine by calling the standard &lt;a class="" href="http://msdn.microsoft.com/en-us/library/1f3ys1f9(v=vs.110).aspx" rel="nofollow"&gt;Process.GetProcesses()&lt;/a&gt; method.&lt;/li&gt;
&lt;li&gt;Your application might not be able to attach to every process running into the local machine. Always ensure that your application is run with the necessary privileges and any necessary security configurations set up, before attempting to attach to a target process. As a general rule. the attachment will fail for any cases where a call to &lt;a class="" href="http://msdn.microsoft.com/en-us/library/windows/desktop/ms684320(v=vs.85).aspx" rel="nofollow"&gt;WinAPI's OpenProcess() function&lt;/a&gt; on the target process would fail.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Finally, when you're all done playing with the other process' memory, it is a good idea to "close" the process, by detaching the &lt;strong&gt;RAMvaderTarget&lt;/strong&gt; object from it. For programmers experienced with the WinAPI, detaching from the target process really means that the Handle to the process which has been opened will now be closed. For inexperienced programmers, just know that it is always a good idea to detach from the target process whenever you don't need it anymore, to free precious resources for the Operating System. Process detachment is done by calling the "&lt;strong&gt;detachFromProcess()&lt;/strong&gt;" method, which returns a bool indicating if the operation was successful.&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="c1"&gt;// Detach RAMvaderTarget from a&lt;/span&gt;
&lt;span class="c1"&gt;// previously attached process&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;myTarget&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;detachFromProcess&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;false&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
   &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s"&gt;"Failed to detach!!"&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;After detaching from a process, the &lt;strong&gt;RAMvaderTarget&lt;/strong&gt; object cleans itself up. This means &lt;strong&gt;you can reuse it to attach to another process safely&lt;/strong&gt;. That is, if you want, you do not need to instantiate a new &lt;strong&gt;RAMvaderTarget&lt;/strong&gt; to open another process after detaching from a previous one: just attach it to a new process.&lt;/p&gt;
&lt;p&gt;You might check if a &lt;strong&gt;RAMvaderTarget&lt;/strong&gt; instance is attached to a process by calling the "&lt;strong&gt;isAttachedToProcess()&lt;/strong&gt;", which returns a flag indicating if the instance is currently attached to a process. You might also retrieve the Process object, corresponding to the attached process, by calling "&lt;strong&gt;getAttachedProcess()&lt;/strong&gt;". This last method might return a &lt;em&gt;null&lt;/em&gt; value, if the &lt;strong&gt;RAMvaderTarget&lt;/strong&gt; instance is currently not attached to any Process.&lt;/p&gt;
&lt;h3 id="memory-io-operations"&gt;Memory I/O operations&lt;/h3&gt;
&lt;p&gt;After attaching a &lt;strong&gt;RAMvaderTarget&lt;/strong&gt; instance to a target Process, you can perform reading and writing operations to its memory. This is done by the "&lt;strong&gt;&lt;em&gt;writeToTarget()&lt;/em&gt;&lt;/strong&gt;" and "&lt;strong&gt;&lt;em&gt;readFromTarget()&lt;/em&gt;&lt;/strong&gt;" methods. Both methods...:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;... have several overloads to work with many basic types of data supported by the library.&lt;/li&gt;
&lt;li&gt;... have a bool return value, which indicate if the writing/reading operation has been performed with success.&lt;/li&gt;
&lt;li&gt;... receive a first parameter of type IntPtr which indicate the address, on the target Process' memory space, where you want the method to operate.&lt;/li&gt;
&lt;li&gt;... have an overload specialized for writing/reading an array of bytes. In fact, all overloads convert other basic types to sequences of bytes and call this specific byte-array-based overload.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Notice that for the reading methods, with the exception of the byte-array-based overload, you have to pass references to the variables which will receive the data. So, don't forget to add the &lt;em&gt;ref&lt;/em&gt; keyword to those calls.&lt;/p&gt;
&lt;p&gt;The following are examples of usage of reading and writing methods. For the sake of simplicity and code readability, we are not testing the values returned for these methods. Also, consider the variables named &lt;strong&gt;myTarget&lt;/strong&gt; as instances of the &lt;strong&gt;RAMvaderTarget&lt;/strong&gt; class, which are already attached to a target Process:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="c1"&gt;// Read a Single (a.k.a. "float") value from address 0xAABBCCDD&lt;/span&gt;
&lt;span class="c1"&gt;// and store it in the variable "myVar".&lt;/span&gt;
&lt;span class="n"&gt;IntPtr&lt;/span&gt; &lt;span class="n"&gt;targetAddr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;IntPtr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="mh"&gt;0&lt;/span&gt;&lt;span class="n"&gt;xAABBCCDD&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;Single&lt;/span&gt; &lt;span class="n"&gt;myVar&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;   &lt;span class="c1"&gt;// this variable will store the read value&lt;/span&gt;
&lt;span class="n"&gt;myTarget&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;readFromTarget&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;targetAddr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;ref&lt;/span&gt; &lt;span class="n"&gt;myVar&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Write an unsigned 64-bits integer with value 123 to 0xBABACA0&lt;/span&gt;
&lt;span class="n"&gt;UInt64&lt;/span&gt; &lt;span class="n"&gt;dataToWrite&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mh"&gt;123&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;   &lt;span class="c1"&gt;// stores the data that will be written&lt;/span&gt;
                            &lt;span class="c1"&gt;// to the target Process' memory&lt;/span&gt;
&lt;span class="n"&gt;IntPtr&lt;/span&gt; &lt;span class="n"&gt;targetAddr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;IntPtr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="mh"&gt;0&lt;/span&gt;&lt;span class="n"&gt;xBABACA0&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;myTarget&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;writeToTarget&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;targetAddr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dataToWrite&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Read an 32-bit integer from the address 0xF000BA22&lt;/span&gt;
&lt;span class="c1"&gt;// Then, multiply it by two, and store it back into this same address&lt;/span&gt;
&lt;span class="n"&gt;IntPtr&lt;/span&gt; &lt;span class="n"&gt;targetAddr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;IntPtr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="mh"&gt;0&lt;/span&gt;&lt;span class="n"&gt;xF000BA22&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;Int32&lt;/span&gt; &lt;span class="n"&gt;myVar&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;myTarget&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;readFromTarget&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;targetAddr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;ref&lt;/span&gt; &lt;span class="n"&gt;myVar&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="n"&gt;myVar&lt;/span&gt; &lt;span class="o"&gt;*=&lt;/span&gt; &lt;span class="mh"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;myTarget&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;writeToTarget&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;targetAddr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;myVar&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Read a sequence of 7 bytes of memory from 0x71727374&lt;/span&gt;
&lt;span class="k"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;myBuffer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="k"&gt;byte&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mh"&gt;7&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="n"&gt;myTarget&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;readFromTarget&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;IntPtr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="mh"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x71727374&lt;/span&gt; &lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;myBuffer&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Write 3 bytes of memory to 0x80808080&lt;/span&gt;
&lt;span class="k"&gt;byte&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;myBuffer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="k"&gt;byte&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="mh"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;30&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="n"&gt;myTarget&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;writeToTarget&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;IntPtr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="mh"&gt;0&lt;/span&gt;&lt;span class="n"&gt;x80808080&lt;/span&gt; &lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;myBuffer&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">vinicius.ras</dc:creator><pubDate>Fri, 19 Sep 2014 02:10:43 -0000</pubDate><guid>https://sourceforge.net6efffeba7c516b99423ddaa0874a402ae1bbebd6</guid></item><item><title>Home modified by vinicius.ras</title><link>https://sourceforge.net/p/ramvader/wiki/Home/</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Welcome to your wiki!&lt;/p&gt;
&lt;p&gt;This is the default page, edit it as you see fit. To add a new page simply reference it within brackets, e.g.: &lt;span&gt;[SamplePage]&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;The wiki uses &lt;a class="" href="/p/ramvader/wiki/markdown_syntax/"&gt;Markdown&lt;/a&gt; syntax.&lt;/p&gt;
&lt;p&gt;&lt;h6&gt;Project Members:&lt;/h6&gt;
&lt;ul class="md-users-list"&gt;
&lt;li&gt;&lt;a href="/u/viniciusras/"&gt;vinicius.ras&lt;/a&gt; (admin)&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;&lt;span class="download-button-52e2c5379095476640cacf9f" style="margin-bottom: 1em; display: block;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">vinicius.ras</dc:creator><pubDate>Fri, 24 Jan 2014 19:55:35 -0000</pubDate><guid>https://sourceforge.net1a36efdde3c833baf914829371b2596cbbcbec37</guid></item></channel></rss>