Constructs synthetic strings pointing at any address.
use B;
use 5.008001;
=pod
=head1 SYNOPSIS
no strict 'refs';
my $pointer = &{"a great evil"}( 0x1800000, 1_000_000 );
print $pointer->{'text'};
=cut
{
no strict 'refs';
# ARG1 address to dereference
# ARG2 length of string to construct
*{"a great evil"} = sub
{
my $address = 0 + shift;
my $length = 0 + shift;
# Create a host life form. We're about to violate use it as
# a template
my $host_string = "an innocuous string";
# Clone the host life form to form a suitable environment
# for oursynthetic strings.
my $sv = unpack 'P12', pack 'L', 0 + \ $host_string;
my $xpv = unpack 'P12', substr $sv, 0, 4;
# Now implant our alien spawn into the host string
substr $sv, 0, 4, pack 'P', $xpv;
substr $xpv, 0, 4, pack 'L', 0 + $address;
substr $xpv, 4, 4, pack 'L', 0 + $length;
substr $xpv, 8, 4, pack 'L', 1 + $length;
my $new_sv = \ unpack 'L', pack 'P', $sv;
# Be sure to keep references to $sv and $xpv around so the bac
+king SV
# isn't deallocated.
# Let the alien out into the general population.
+{ text => bless( $new_sv, 'B::PV')->object_2svref,
_backend => [ \ $sv, \ $xpv ] };
};
}