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这个函数指针(有类型指针)

  • 相关阅读:
    【模拟】HDU 5752 Sqrt Bo
    【数学】HDU 5753 Permutation Bo
    【模拟】Codeforces 706A Beru-taxi
    【二分】Codeforces 706B Interesting drink
    【动态规划】Codeforces 706C Hard problem
    【字典树】【贪心】Codeforces 706D Vasiliy's Multiset
    【中国剩余定理】POJ 1006 & HDU 1370 Biorhythms
    计算机存储单位
    转载_Linux下查看文件和文件夹大小
    反问题_不适定_正则化
  • 原文地址:https://www.cnblogs.com/ZhouXiHong/p/666385.html
Copyright © 2011-2022 走看看