您的位置:程序门 -> delphi -> windows sdk/api



关于内存读取的问题!


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


关于内存读取的问题![已结贴,结贴人:snopyli]
发表于:2008-01-18 10:27:44 楼主
这个函数:
function   getprocessidd(processname:   string):   tprocessentry32;
var
    fsnapshothandle:   thandle;
    fprocessentry32:   tprocessentry32;
    ret:   boolean;
    tmpprocessname:   string;
begin
    fsnapshothandle   :=   createtoolhelp32snapshot(th32cs_snapprocess,   0);
    fprocessentry32.dwsize   :=   sizeof(fprocessentry32);
    ret   :=   process32first(fsnapshothandle,   fprocessentry32);
    while   ret   do
    begin
        tmpprocessname   :=   extractfilename(fprocessentry32.szexefile);
        if   tmpprocessname   =   processname   then
        begin
            result   :=   fprocessentry32;
            break;
        end;
        ret   :=   process32next(fsnapshothandle,   fprocessentry32);
    end;
    closehandle(fsnapshothandle);
end;


这个是运行代码:
var
    fprocessentry32:   tprocessentry32;
    processid:   integer;
    processhandle:   thandle;
    nsize:   dword;
    lpnumberofbytesread:   dword;
    szbuf:array[0..255]   of   char;
const
    ammz   =   $04402160;
begin
    nsize:=255;
    fprocessentry32   :=   getprocessidd(ddzprocessname);
    if   fprocessentry32.th32processid=0   then   exit;
    processid   :=   fprocessentry32.th32processid;
    processhandle   :=   openprocess(process_vm_read,   false,   processid);
    if   processhandle   <>   0   then
        begin
              readprocessmemory(processhandle,   pointer(ammz),@szbuf,nsize,lpnumberofbytesread);
              label7.caption   :=   szbuf;
        end;
    freemem(@szbuf,nsize);
    closehandle(processhandle);
end;

请高手们帮我看看,我的代码哪里出错了,我一运行后,系统就死机!在线等。。。
先谢谢各位大虾!
发表于:2008-01-18 11:04:171楼 得分:0
最好是自己设断点看看,这么找很慢。。
发表于:2008-01-18 11:35:292楼 得分:0
debug跟踪处理之
发表于:2008-01-18 11:43:453楼 得分:0
现在没有死机,可以正确读取内存数据,但现在出现了错误提示“invalid   pointer   operation”,到底是哪里出现这种错误?

是不是内存释放这里出错,如果错了,如何改?请高手们帮助看看,谢谢!
发表于:2008-01-18 12:52:424楼 得分:0
freemem(@szbuf,nsize);   放在   if       processhandle       <>       0       then   里面。

因为可能szbuf没有分配。
发表于:2008-01-18 13:15:555楼 得分:100
freemem(@szbuf,nsize);

这句话多余的
发表于:2008-01-18 13:17:226楼 得分:0
szbuf是静态数组,不需要释放

freemem只用来释放getmem调用分配的地址空间


快速检索

最新资讯
热门点击