procedure xie;
var
    txt:pwidechar;
    WriteCount: DWORD;
begin
    txt:=allocmem(256);
    stringtowidechar('问世间,情为何物,直叫人生死相许',txt,256);
    Threadd:=VirtualAllocEx(HPro, nil, 256, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
    WriteProcessMemory(HPro,Threadd,txt, 256, WriteCount);end;
我调试写入后提示"
---------------------------
Debugger Exception Notification
---------------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 0040404B in module 'Project1.exe'. Read of address 0BEF0000'. Process stopped. Use Step or Run to continue.
---------------------------
OK   Help   
---------------------------"

解决方案 »

  1.   

    try this
    procedure xie;
    var
        txt:PWideChar;
        WriteCount: DWORD;
        HPRo: Cardinal;
    begin
        txt:= '问世间,情为何物,直叫人生死相许';
        Threadd:=VirtualAllocEx(HPro, nil, 256, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
        WriteProcessMemory(HPro,Threadd,txt, Length(txt) * 2, WriteCount);
    end;
      

  2.   


    procedure xie;
    var
        txt:pwidechar;
        WriteCount: DWORD;
        Threadd: Pointer;
        HPro: DWORD;
    begin
        txt:=allocmem(256);
        HPro := OpenProcess(PROCESS_ALL_ACCESS, True, GetCurrentProcessId);
        stringtowidechar('问世间,情为何物,直叫人生死相许',txt,256);
        Threadd:=VirtualAllocEx(HPro, nil, 256, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
        WriteProcessMemory(HPro, Threadd, txt, 256, WriteCount);
        ZeroMemory(txt, 256);
        ReadProcessMemory(hPro, Threadd, txt, 256, WriteCount);
        CloseHandle(HPro);
        ShowMessageFmt('%s, Count=%d', [txt, WriteCount] );
    end;