首页
社区
课程
招聘
[求助]关于DELPHI的一段代码很纳闷!
发表于: 2009-1-22 15:17 5208

[求助]关于DELPHI的一段代码很纳闷!

2009-1-22 15:17
5208
unit NewKernelHandler;

interface
uses windows,sysutils,tlhelp32;

const dbkdll='baby.dll';

type TReadProcessMemory=function(hProcess: THandle; const lpBaseAddress: Pointer; lpBuffer: Pointer;  nSize: DWORD; var lpNumberOfBytesRead: DWORD): BOOL; stdcall;
type TWriteProcessMemory=function(hProcess: THandle; const lpBaseAddress: Pointer; lpBuffer: Pointer; nSize: DWORD; var lpNumberOfBytesWritten: DWORD): BOOL; stdcall;
type TOpenProcess=function(dwDesiredAccess: DWORD; bInheritHandle: BOOL; dwProcessId: DWORD): THandle; stdcall;

//这里定义 是kernel32.dll中的API 么? 还是自定义?

procedure LoadDBK32;

var
  KernelOpenProcess       :TOpenProcess;     //
  KernelReadProcessMemory :TReadProcessMemory;//
  KernelWriteProcessMemory:TWriteProcessMemory;//这里 上面定义了 为什么出现这个是什么意思

var
    DarkByteKernel: Thandle;

implementation

procedure LoadDBK32;
begin
  if DarkByteKernel=0 then
  begin
    DarkByteKernel:= LoadLibrary(dbkdll);
    if DarkByteKernel=0 then exit;

    KernelOpenProcess:=GetProcAddress(darkbytekernel,'OP');
    KernelReadProcessMemory:=GetProcAddresS(darkbytekernel,'RPM');
    KernelWriteProcessMemory:=GetProcAddress(darkbytekernel,'WPM');

//为什么这里得到这个

  end;
end;
end.

希望能得到大家的帮助!

详细的讲下这个源码什么意思饿 ...

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

收藏
免费 0
支持
分享
最新回复 (12)
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
初学DELPHI 不好意思!
2009-1-22 15:17
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
3
unit NewKernelHandler;

interface
uses windows,sysutils,tlhelp32;

const dbkdll='baby.dll';
// 下面是定义函数指针类型。
type TReadProcessMemory=function(hProcess: THandle; const lpBaseAddress: Pointer; lpBuffer: Pointer;  nSize: DWORD; var lpNumberOfBytesRead: DWORD): BOOL; stdcall;
type TWriteProcessMemory=function(hProcess: THandle; const lpBaseAddress: Pointer; lpBuffer: Pointer; nSize: DWORD; var lpNumberOfBytesWritten: DWORD): BOOL; stdcall;
type TOpenProcess=function(dwDesiredAccess: DWORD; bInheritHandle: BOOL; dwProcessId: DWORD): THandle; stdcall;

//这里定义 是kernel32.dll中的API 么? 还是自定义?

procedure LoadDBK32;

// 这里将上面定义好的函数指针类型定义出函数指针实例变量。
var
  KernelOpenProcess       :TOpenProcess;     //
  KernelReadProcessMemory :TReadProcessMemory;//
  KernelWriteProcessMemory:TWriteProcessMemory;//这里 上面定义了 为什么出现这个是什么意思

var
    DarkByteKernel: Thandle;

implementation

procedure LoadDBK32;
begin
  if DarkByteKernel=0 then
  begin
    DarkByteKernel:= LoadLibrary(dbkdll);
    if DarkByteKernel=0 then exit;
// 这里是获取真实函数地址指针到函数指针实例变量上。
    KernelOpenProcess:=GetProcAddress(darkbytekernel,'OP');
    KernelReadProcessMemory:=GetProcAddresS(darkbytekernel,'RPM');
    KernelWriteProcessMemory:=GetProcAddress(darkbytekernel,'WPM');

//为什么这里得到这个

  end;
end;
end.
从函数名上看,可以大概猜出你上面的函数是用来打开其它进程进读和写其它进程的数据作用的功能函数。

// PS:上面的定义和使用都是pascal 基本用法,网上有电子版Object Pascal中文语法参考手册楼主可以下载下来看看,上面的代码意思应该就不难理解了。
2009-1-22 16:26
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
可是用易语言

var
  KernelOpenProcess       :TOpenProcess;     
  KernelReadProcessMemory :TReadProcessMemory;
  KernelWriteProcessMemory:TWriteProcessMemory;

这个怎么表示呢?
2009-1-22 19:37
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
type TOpenProcess=function(dwDesiredAccess: DWORD; bInheritHandle: BOOL; dwProcessId: DWORD): THandle; stdcall;

这个如何在E语言中定义呢?
2009-1-22 19:38
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
6
不懂E语言。
2009-1-22 20:18
0
雪    币: 22
活跃值: (48)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
不错的代码,先收了
难道这就是所谓的重写api?稍微有点迷糊,ctrl+c    ctrl +v测试下game

辽ICP备050012号  大连大有吴涛易语言软件开发有限公司
如果您需要更多地了解公司情况,请致电0411-88995831-1008
网上搜不到就----->楼下找,电话,短信,传真,纸邮件,E邮件,飞鸽,登三宝殿,请帖,放弃也是会很美

回头发现,原来是dARkByTe的法宝
2009-1-23 05:56
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
许胜 ... 晕 再次看到你的出现!
2009-1-23 08:48
0
雪    币: 178
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
CE的源码.需要E版的联系我
2009-1-23 18:52
0
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
type TOpenProcess=function(dwDesiredAccess: DWORD; bInheritHandle: BOOL; dwProcessId: DWORD): THandle; stdcall;

这个如何在E语言中定义呢?

DWORD---整数型
BOOL---逻辑型
2009-1-23 20:22
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
没有人了么?

还是郁闷恩哈~
2009-1-24 18:17
0
雪    币: 296
活跃值: (89)
能力值: ( LV15,RANK:340 )
在线值:
发帖
回帖
粉丝
12
E语言不知道,不过这句你应该看过C的吧:
typedef int (__stdcall *TMessageBoxA)(HWND hWnd,LPSTR lpText,LPSTR lpCaption,int uType);
这句就是定义TMessageBoxA这个类型,和上面Delphi的句子类似。上面这句里的TOpenProcess就相当于这里的类型名,该类型是一个指向
function(dwDesiredAccess: DWORD; bInheritHandle: BOOL; dwProcessId: DWORD): THandle; stdcall;
的指针。

有了定义的类型,下面的 var  KernelOpenProcess:TOpenProcess;  就是变量声明。其实这句就是:
var  KernelOpenProcess: function(dwDesiredAccess: DWORD; bInheritHandle: BOOL; dwProcessId: DWORD): THandle; stdcall;

这样写的意图在于,能够给KernelOpenProcess赋上OpenProcess的地址,让编译器知道
KernelOpenProcess(dwDesiredAccess, bInheritHandle, dwProcessId)
这样的句子等价于
OpenProcess(dwDesiredAccess, bInheritHandle, dwProcessId)

我想E语言里面应该也是差不多的定义方法。
2009-1-24 18:41
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
谢谢回答啦~
2009-1-24 18:57
0
游客
登录 | 注册 方可回帖
返回
//