CPU-x86_64-InstructionWriter
view release on metacpan or search on metacpan
example/linux-xsub-hello-world.pl view on Meta::CPAN
SYS_write => 1,
PROT_READ => 1,
PROT_WRITE => 2,
PROT_EXEC => 4,
MAP_PRIVATE => 2,
MAP_ANONYMOUS => 32,
};
# I don't know of a pure-perl way to write to an arbitrary memory location,
# but this works for linux :-)
sub memcpy($dst_addr, $src_sv, $size=length $src_sv) {
if (-w '/proc/self/mem') {
open my $mem, '+>', '/proc/self/mem' or die "open(/dev/mem): $!";
$mem->sysseek($dst_addr, 0) == $dst_addr or die "sysseek: $!";
$mem->syswrite($src_sv, $size) == $size or die "write: $!";
} else {
$size < 4096 or die "BUG: needs rewritten with a loop";
pipe(my $rd, my $wr) or die "pipe: $!";
$wr->syswrite($src_sv, $size) == $size or die "write: $!";
syscall(SYS_read, fileno($rd), $dst_addr, $size) == $size or die "read: $!";
}
( run in 0.662 second using v1.01-cache-2.11-cpan-65fba6d93b7 )