• 0

[VB.NET] Memory Address


Question

9 answers to this question

Recommended Posts

  • 0

There was something known as the VarPtr function in VB (actually, in the BASIC language itself), but after some quick Googling, it isn't found in VB.NET, most likely due to the fact that it is "unmanaged". You might try digging something up along the lines of a VB.NET VarPtr replacement, however. For example, I found something with System.Runtime.InteropServices.GCHandle as well as something called BitConverter. I'm out of my element when it comes to .NET, but I figured that might help to get you started at least. Those last two seem wrong for memory, but I didn't look them up so they might be able to manipulate memory, despite their names.

  • 0

I wouldn't suggest messing with a .NET process' memory (due to CRL and other unpredictable aspects) so you should probably stick with other dummy processes and I'm not sure if .NET offers memory reading APIs either, so you'd probably be best using WinAPI in this:

Just look into OpenProcess, ReadProcessMemory, WriteProcessMemory, etc.

  • 0
I wouldn't suggest messing with a .NET process' memory (due to CRL and other unpredictable aspects) so you should probably stick with other dummy processes and I'm not sure if .NET offers memory reading APIs either, so you'd probably be best using WinAPI in this:

Just look into OpenProcess, ReadProcessMemory, WriteProcessMemory, etc.

ReadProcessMemory, how would I do that?

Maybe something like this?

Imports System
Imports System.Diagnostics
Imports System.ComponentModel

Sub ReadMem()
Dim myProcesses As Process = Process.GetProcessesByName(pinball)
Dim memRead as String = myProcesses.ReadProcessMemory

Anything close to what your thinking?

  • 0

VB.NET doesn't natively supported memory pointers and allocations, but this can be accomplished through .NET Framework classes like IntPtr, Marshal and GCHandle. There are probably other types as well, but I've never used them.

IntPtr is used as a pointer to a platform-specific integer. Marshal can read and write data at a specific memory location (leveraging IntPtr's).

Example:

Dim pointer as IntPtr
Dim number as Integer = 20
pointer = Marshal.AllocHGlobal(4)
Marshal.WriteInt32(pointer, number)

Example:

Dim anotherInteger as Integer = Marshal.ReadInt32(pointer)

Example:

Dim message as String = "I know, I'm awesome..."
Dim pointer as IntPtr = Marshal.StringToHGlobalAuto(message)

Example:

Dim anotherMessage as String = Marshal.PtrToStringAuto(pointer)

You can see that the Marshal class acts as a broker between the program code and the memory operation.

You can also use the Marshal class on VB.NET Structures:

Example:

Public Structure MyStruct
	Dim x as Integer
	Dim y as Integer
End Structure

Dim structure1 as MyStruct
structure1.x = 1
structure1.y = 2

Dim pointer = Marshal.AllocHGlobal(Marshal.SizeOf(structure1))
Marshal.StructureToPtr(structure1, pointer, True)

Dim structure2 as MyStruct = Marshal.PtrToStructure(pointer, New MyStruct().GetType)

Objects are handled differently, because of their Garbage Handling requirements (they are Managed Types). You can use a GCHandle to read and write objects.

Example:

Public Class MyClass
	Public Name As String
	Public Age as Integer
End Class

Dim handle as GCHandle
Dim person as MyClass
person.Name = "Matthew Abbott"
person.Age = 24

handle = GCHandle.Alloc(person)

Example:

Dim person2 as MyClass = handle.Target
handle.Free()

You should check out the System.Runtime.InteropServices namespace on MSDN and see what you can come up with.

Hope that helps.

Adapted from: DotNetBips.com

  • 0

The WINAPI functionality is accessed in a similar way to the C# alternative. This is known as P/Invoke (Platform Invoke), which allows managed code to invoke unmanaged code residing in libraries on the Host computer.

In VB.NET, to declare a WINAPI function, you do the following (e.g. CopyMemory):

Public Static Class WINAPI
	Declare Static Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal pDst As IntPtr, ByVal pSrc As String, ByVal length As Long)
End Class

In the above example, I have declared a static class, so we can access our WINAPI functions from a single location, without instantiation, ie., you would call WINAPI.CopyMemory(...).

You should look into P/Invoke for more information on using external unmanaged code from .NET.

Also, check out http://www.pinvoke.net for more information.

  • 0

Does this code works for two different applications? I mean if I alloc one object in the first application, pass the memory address to the other, is the other able to start another object (same instance) pointing to the same object. Can we use the same object in different applications? If not what would be the best way to do so? Thank you very much in advance, it's been a long time I'm trying to make it work, thanks again.

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

    • No registered users viewing this page.
  • Posts

    • laughing is tedious. Elephants really are laughing lazy, y'all..
    • Agreed. And this is a great discount offer! It's a shame that there's no discount offer option for people who would be fine subscribing for a year-long term, but pay monthly.
    • A Warhammer 40K racing game and a chess roguelike are free to claim on the Epic Games Store by Pulasthi Ariyasinghe The Epic Games Store has returned to its standard giveaway procedures after weeks of mystery freebies. The latest drop is replacing last week's Rogue Waters and Songs of Conquest games and has brought in a double giveaway offering Warhammer 40K Speed Freeks and The Ouroboros King. As always, the game is yours to add permanently to your Epic Games Store library within the next seven days. From the duo, Warhammer 40K Speed Freeks lands from developer Caged Element, and it's a racing game that was only released last year. The title has you piloting Ork buggies, tanks, and aircraft modeled after the popular tabletop miniatures. The focus is on multiplayer mayhem, offering multiple game modes that have you fighting other players as everyone tries to survive and get across finish lines or destroy mechs. Crossplay support between PC and consoles has now arrived as part of a free update, too, giving a boost to matchmaking times for this multiplayer-focused title. If racing carnage isn't your thing, then The Ouroboros King offers tactics. The indie title is a mashup of chess and standard roguelike experience, letting players create their own armies to defeat an enemy faction, all on the familiar checkered board. There is a procedurally generated map, pieces with special abilities, relics that bend the game's rules to make overpowered builds, and more. The newly available Warhammer 40K Speed Freeks and The Ouroboros King giveaways on the Epic Games Store are set to run until June 11, giving PC gamers seven days to claim the latest offer. Once this closes out, a new freebie will take its place on the same day. Don't forget that mobile gamers can check out the Epic Game Store's weekly giveaways on Android and iOS to grab a freebie there as well.
    • Geforce Now is great! Playing with a 4080/5080 without spending over $1k Just for the Gpu..plus other componentes. Finished resident evil 9 (running rtx 5080) on a mac mini m2. The mini is the size of just the gpu. No more bulky Pc towers on my desk
    • The most consequential argument in technology right now is not about which model is smartest or which chip is fastest. It is about whether the entire enterprise is a generational revolution or the largest financial bubble ever inflated — and the unsettling answer, increasingly, is that it may be both at once.,,,, https://www.techtimes.com/articles/318138/20260610/ai-revolution-ai-bubble-trillion-dollar-question-splitting-wall-street-silicon-valley.htm This is a very good read.  For what it is worth, I agree with the answer to the question. Bonus: Buffalo Springfield - For What It's Worth 1967 https://noai.duckduckgo.com/?ia=videos&origin=funnel_home_website&q=what it is worth song&atb=v537-7&iax=videos&iai=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3Dgp5JCrSXkJY One of my 60s favorites
  • Recent Achievements

    • Week One Done
      FBSPL earned a badge
      Week One Done
    • One Year In
      Jim Dugan earned a badge
      One Year In
    • One Month Later
      Tommi118 earned a badge
      One Month Later
    • One Month Later
      sjbousquet earned a badge
      One Month Later
    • Week One Done
      sjbousquet earned a badge
      Week One Done
  • Popular Contributors

    1. 1
      +primortal
      485
    2. 2
      PsYcHoKiLLa
      198
    3. 3
      +Edouard
      155
    4. 4
      Steven P.
      83
    5. 5
      ATLien_0
      69
  • Tell a friend

    Love Neowin? Tell a friend!