my $handle;
my $thispid = Win32::Process::GetCurrentProcessID(); # differs from $$ under cygwin
Win32::Process::Open($handle, $thispid, 1);
####
my $readmem = Win32::API->new( kernel32 => q| BOOL ReadProcessMemory(
HANDLE hProcess, LPCVOID lpBaseAddress, LPVOID lpBuffer, SIZE_T nSize, SIZE_T* lpNumberOfBytesRead
)|);
####
my $buf = " " x 40;
my $read = " " x 10;
my $addr = "0";
my $len = length $buf;
if( $readmem->Call($handle, $addr, $buf, $len, $read) ) {
print "The read worked I guess($read): $!\n\t", unpack("H*", $buf), "\n";
} else {
print "The read failed I guess($read): $!\n\t", unpack("H*", $buf), "\n";
}
####
my $openpid = Win32::API->new( kernel32 =>
q|HANDLE OpenProcess(DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwProcessId)| );