Is it possible to extract data out of memory using Ruby?

Is it possible to extract data out of memory using Ruby?

Something like this: Memory.get_byte(pos)

Or something like this Perl module:

http://search.cpan.org/~bobmath/Disassemble-X86-0.13/X86/MemRegion.pm

This Perl module is *not* an extension in C, I am not sure how the
author pulled that off. I looked at the source code, but I am not very
good at Perl.

- Erik

···

--
Posted via http://www.ruby-forum.com/.

Erik, to read and write longs (4 bytes) I use the DL standard library
with the following code:

  require "dl"

  ptr = DL::PtrData.new 0
  ptr.struct! "L", "val"
  size = ptr.size

  # read
  ptr[ address, size ].unpack( "L" )[ 0 ]

  # write
  ptr[ address, size ] = [ val ].pack( "L" )

For reading and writing bytes you have to change the "L" to something
else. See the docs for the DL standard library.

Regards,
Pit

···

2008/8/14 Erik Terpstra <erik@ruby-lang.nl>:

Is it possible to extract data out of memory using Ruby?

So if you would like to look at the 'in memory' representation of a Ruby
String how would that work?

  require "dl"

  ptr = DL::PtrData.new 0
  ptr.struct! "L", "val"
  size = ptr.size

  str = 'Hello world!'
  address = str.object_id * 2
  value = ptr[ address, size ]

  puts [address, value].inspect

TIA,

Erik.

Pit Capitain wrote:

···

2008/8/14 Erik Terpstra <erik@ruby-lang.nl>:

Is it possible to extract data out of memory using Ruby?

Erik, to read and write longs (4 bytes) I use the DL standard library
with the following code:

  require "dl"

  ptr = DL::PtrData.new 0
  ptr.struct! "L", "val"
  size = ptr.size

  # read
  ptr[ address, size ].unpack( "L" )[ 0 ]

  # write
  ptr[ address, size ] = [ val ].pack( "L" )

For reading and writing bytes you have to change the "L" to something
else. See the docs for the DL standard library.

Regards,
Pit

--
Posted via http://www.ruby-forum.com/\.

Erik, you have to look at the C source code of Ruby to find the
structure of String instances. In MRI 1.8, you can get at the address
of a Ruby object via

  object.object_id * 2

Regards,
Pit

···

2008/8/14 Erik Terpstra <erik@ruby-lang.nl>:

So if you would like to look at the 'in memory' representation of a Ruby
String how would that work?