首页
社区
课程
招聘
高手来看下 我那里出错了
发表于: 2010-12-31 15:39 3110

高手来看下 我那里出错了

2010-12-31 15:39
3110
1单元
Const RoleBaseAdr=$62C7C0; //主号基址

Function RWord(Addr: Dword): WORD;读双字节整型
begin
  Result := 0;
  Try
  EnterCriticalSection(Critical1); //进入临界段
  try
  if PWORD(Addr) <> nil then
  begin
  Result := PWORD(Addr)^;
  end;
  finally
  LeaveCriticalSection(Critical1); //退出临界段
  end;
  except
  Result := 0;
  end;
end;

Function RDword(Addr: Dword): Dword;读四字节整型
begin
  Result := 0;
  Try
  EnterCriticalSection(Critical1); //进入临界段
  try
  if PDWORD(Addr) <> nil then
  begin
  Result := PDWORD(Addr)^;
  end;
  finally
  LeaveCriticalSection(Critical1); //退出临界段
  end;
  except
  Result := 0;
  end;
end;

2单元

Function GetRoleHP: DWORD; //获取主号人物当前HP
var
RoleBase: DWORD;
begin
  Try
  RoleBase := RDword(RoleBaseAdr);
  Result:= Rword(RoleBase+ $68); //人物当前HP
  except
  Result:=0;
  end;
end;

取函数

GetRoleHP

RzEdit18.Text:=IntToStr(GetRoleHP);

可是读取的是0

如果用汇编直接读取的话就正确

var
  Address:pointer;
  y,n,p,i:DWORD;
begin
  Address:=pointer(RoleBaseAdr);
  asm
  pushad
  mov eax,address
  mov eax, dword ptr[eax]
  mov eax, dword ptr[eax+$68]
  mov i, eax
  popad
  end;
  MyForm.RzEdit5.Text:=IntToStr(i);

请前辈们指导一下

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//