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

  • 相关阅读:
    Python-快速入门
    Python-面向对象编程
    python-模块
    .net mvc onexception capture; redirectresult;
    a c lang in linux
    上海哪里有学陈氏太极拳?
    【Origin】 叹文
    【Origin】 碑铭
    【Origin】 偶题 之 抒意
    【Origin】答友朋关切书
  • 原文地址:https://www.cnblogs.com/ZhouXiHong/p/666385.html
Copyright © 2011-2022 走看看