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

  • 相关阅读:
    scrapy爬虫系列之三--爬取图片保存到本地
    scrapy爬虫系列之四--爬取列表和详情
    python3.7.2 ssl版本过低导致pip无法使用的问题
    python3安装后无法使用退格键的问题
    位运算符和unity Layers
    unity常用小知识点
    unity -- Time类(持续更新中)
    随便说说 post-processing
    unity图片后期处理
    顶点/片元 shader 总结
  • 原文地址:https://www.cnblogs.com/ZhouXiHong/p/666385.html
Copyright © 2011-2022 走看看