//I mis-read the post. I thought you were asking 'what are pointers?'
------------------------------------------------------------------------------
My attempt at helping...
------------------------------------------------------------------------------
You can read any 4 bytes and treat them as a number
You use numbers to refer to memory locations.
That's it.
ANY 4 bytes == a number
memory address == a number
ie. any 4 bytes can "hold a number, which can be used to refer to a memory box"
that's all pointers are....4 memory boxes storing 4 bytes which represents a number: also a memory address.
Example:
Pretend our baseaddress (..the beginning of the pointer list) is 0x11112222
If we read 4 bytes from 0x11112222, 0x11112223, 0x11112224, 0x11112225
Those 4 bytes == some number == some memory box.
Pretend those four bytes were 0x11223344
0x11112222 -> 0x11223344
0x11112222 points to 0x11223344
now we read 4 bytes from 0x11223344, 0x11223345, 0x11223346, 0x11223347
pretend those 4 bytes were 0x44448888.
0x11112222 points to 0x11223344 which points to 0x44448888.
That's 3 levels deep. Could keep going...
If the offsets are throwing you off, just remember, a number + a number = another number.
A memory address (...a number) + offset (..a number) == another number (which is, an address)
(4 is for 32 bit -- replace '4' with '8' if you're on 64bit)
In the image you posted it looks like it's doing that process, 6 times (?)
Looks like it's doing...
Code:
Dim addr1 As Integer = ReadInteger(_mainModuleBase + &H010845AC)
Dim addr2 As Integer = ReadInteger(addr1 + &H25C)
Dim addr3 As Integer = ReadInteger(addr2 + &H3bc)
Dim addr4 as Integer = ReadInteger(addr3 + &H238)
Dim addr5 As Integer = ReadInteger(addr4 + &H254)
Dim addr6 As Integer = ReadInteger(addr5 + &H3e4)
MsgBox("Final address: 0x" & addr6.ToString("X"))
''You can re-use one Integer variable as in the example above. I did it this way for clarity - hopefully.