Disassemble-X86
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
X86/MemRegion.pm view on Meta::CPAN
package Disassemble::X86::MemRegion;
use 5.006;
use strict;
use warnings;
use integer;
sub new {
my ($class, %args) = @_;
my $self = bless { } => $class;
my $mem = $args{mem};
defined $mem or $mem = "";
$self->{mem} = $mem;
$self->{len} = length($mem);
$self->{start} = $args{start} || 0;
$self->{end} = $self->{start} + $self->{len};
return $self;
} # new
sub mem { $_[0]->{mem} }
sub start { $_[0]->{start} }
sub end { $_[0]->{end} }
sub contains {
my ($self, $addr) = @_;
return $addr >= $self->{start} && $addr < $self->{end};
} # contains
sub get_byte {
my ($self, $pos) = @_;
$pos -= $self->{start};
return undef if $pos < 0 || $pos >= $self->{len};
return ord substr($self->{mem}, $pos, 1);
} # get_byte
sub get_word {
my ($self, $pos) = @_;
$pos -= $self->{start};
return undef if $pos < 0 || $pos+2 > $self->{len};
return unpack "v", substr($self->{mem}, $pos, 2);
} # get_word
sub get_long {
my ($self, $pos) = @_;
$pos -= $self->{start};
return undef if $pos < 0 || $pos+4 > $self->{len};
return unpack "V", substr($self->{mem}, $pos, 4);
} # get_long
sub get_string {
my ($self, $pos, $len) = @_;
$pos -= $self->{start};
return undef if $pos < 0 || $pos > $self->{len};
$len ||= "*";
return unpack "x${pos}Z$len", $self->{mem};
} # get_string
sub get_string_lenbyte {
my ($self, $pos) = @_;
$pos -= $self->{start};
my $mem_len = $self->{len};
return undef if $pos < 0 || $pos >= $mem_len;
my $str_len = ord substr($self->{mem}, $pos, 1);
return undef if $pos+$str_len >= $mem_len;
return substr($self->{mem}, $pos+1, $str_len);
} # get_string_lenbyte
sub get_string_lenword {
my ($self, $pos) = @_;
$pos -= $self->{start};
view all matches for this distributionview release on metacpan - search on metacpan
( run in 0.744 second using v1.00-cache-2.02-grep-82fe00e-cpan-1925d2aa809 )