zoukankan      html  css  js  c++  java
  • 直接通过地址调用API

    先声明一个指向调用函数的变量,如下 :
    var
      MyTextOut:function (DC: HDC; X, Y: Integer; Str: PChar; Count: Integer): BOOL; stdcall;
      MyTextOutA:function (DC: HDC; X, Y: Integer; Str: PAnsiChar; Count: Integer): BOOL; stdcall;
      MyTextOutW:function (DC: HDC; X, Y: Integer; Str: PWideChar; Count: Integer): BOOL; stdcall;
    {
    我是通过API地址专家查出下面API函数的载入地址的。这个地址是固定的,由操作系统载入的。是否地址每次都相同呢?
    function TextOut(DC: HDC; X, Y: Integer; Str: PChar; Count: Integer): BOOL; stdcall;

    地址:$77EFBC0C
    function TextOutA(DC: HDC; X, Y: Integer; Str: PAnsiChar; Count: Integer): BOOL; stdcall;

    地址:$77EF7EE5
    function TextOutW(DC: HDC; X, Y: Integer; Str: PWideChar; Count: Integer): BOOL; stdcall;
    }

    implementation

    {$R *.dfm}

    procedure TForm1.Button1Click(Sender: TObject);
    var
     lpMyTextOut:Pointer;//声明一个指针类型,用来指向调用的API函数地址。
     str:string;
     gd:hdc;
    begin
      lpMyTextOut:=Pointer(dword($77EFBC0C));//将地址赋予指针
      MyTextOut:=lpMyTextOut;//告诉变量你指向的函数TextOutA,存在指针lpMyTextOut指向的那个地址。
      str:='我再调用GDI32.DLL的TextOutA';
      gd:=GetDC(self.Handle);
      MyTextOut(gd,0,0,PAnsiChar(str),length(str));//通过函数变量调用API函数。
      ReleaseDC(self.Handle,gd)
    end;
    //通过这个方法调用函数,不需要动态调用LoadLibrary来取得API,比如在外挂中调用EXE文件中的函数是否有效呢?

    //lpMyTextOut是一个无类型指针,可以直接赋值给MyTextOut这个函数指针(有类型指针)

  • 相关阅读:
    测试爬虫
    流式大数据处理的三种框架:Storm,Spark和Samza
    redo日志
    HTTP协议之chunk编码(分块传输编码
    QWidget 实现 打破布局 或者 当前窗体内的 弹窗 (借助伪造实现)
    How to use kingshard building a MySQL cluster
    转载: Qt 学习之路 2归档
    Python与机器人技术
    Nginx配置正向代理
    使用Chrony配置 NTP
  • 原文地址:https://www.cnblogs.com/ZhouXiHong/p/666385.html
Copyright © 2011-2022 走看看