永利爆大奖安全网址-永利爆大奖线路检测中心

【永利爆大奖安全网址,永利爆大奖线路检测中心】,欢迎来到【LG】娱乐中心,玩你所玩,看你所看,澳门皇冠,太阳集团,澳门太阳赌城,永利402,55402com永利,永利402com,澳门十大赌场,手机网投平台,赌博app官网,永利官网,永利国际,永利皇宫,永利注册,金沙城,金沙官网奥门金沙网址,4166am金沙,我们是一家正规的网上官方平台,自创建以来,以其稳定、安全、快捷和良好的信誉得到了各界同仁的一致认可和好评。期待您的到来!

读取dll全数输出函数名,进制转变

日期:2020-01-04编辑作者:编程应用

收获某黄金年代dll全部输出函数名
在uses里加上ImageHlp

{*******************************************************}
{                                                       }
{      进制调换                                          }
{                                                       }
{       cxg 2008-08-23 08:52:16                         }
{                                                       }
{*******************************************************}

procedure ListDLLFunctions(DLLName: String; List: TStrings);
type
chararr = array [0..$FFFFFF] of Char;
var
H: THandle;
I,
fc: integer;
st: string;
arr: Pointer;
ImageDebugInformation: PImageDebugInformation;
begin
List.Clear;
DLLName := ExpandFileName(DLLName);
if FileExists(DLLName) then
begin
H := CreateFile(PChar(DLLName), GENERIC_READ, FILE_SHARE_READ or
FILE_SHARE_WRITE, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if H<>INVALID_HANDLE_VALUE then
try
ImageDebugInformation := MapDebugInformation(H, PChar(DLLName), nil, 0);
if ImageDebugInformation<>nil then
try
arr := ImageDebugInformation^.ExportedNames;
fc := 0;
for I := 0 to ImageDebugInformation^.ExportedNamesSize - 1 do
if chararr(arr^)[I]=#0 then
begin
st := PChar(@chararr(arr^)[fc]);
if Length(st)>0 then
List.Add(st);
if (I>0) and (chararr(arr^)[I-1]=#0) then
Break;
fc := I + 1
end
finally
UnmapDebugInformation(ImageDebugInformation)
end
finally
CloseHandle(H)
end
end
end;

unit uStrUnit;

procedure TForm1.Button1Click(Sender: TObject);
var
List: TStrings;
I: integer;
S: String;

interface

begin
List := TStringList.Create;

uses
  SysUtils, StrUtils, Windows, Classes, WinSock, Forms, Controls, Dialogs;

ListDLLFunctions('c:windowssystemAbcsda.dll', List);
showmessage(inttostr(list.count));
S := 'List of functions';
for I := 0 to List.Count - 1 do
S := S + #13#10 + List[I];
ShowMessage(S);

const
  cHexBinStrings:   array[0..15]   of   string   =       //十二进制和二进制对照表
  (
  '0000',   '0001',   '0010',   '0011',
  '0100',   '0101',   '0110',   '0111',
  '1000',   '1001',   '1010',   '1011',
  '1100',   '1101',   '1110',   '1111'
  );

List.Free
end;

function BinToHex(mBin:string卡塔尔国:string;                   //二进制转十一进制
function HexToBin(mHex:stringState of Qatar:string;                   //十一进制转二进制

function StrToHexStr(S:string卡塔尔国:string;                   //字符串转变到16进制字符串
function HexStrToStr(const S:string卡塔尔国:string;             //16进制字符串调换来字符串

function HexToDec(AHexString: String卡塔尔: Integer;          //16 进制调换为 10 进制
function DecToHex(Value:Integer;Digit:Integer=2卡塔尔(قطر‎:string; //10进制转换为16进制

Function binToDec(Value :string卡塔尔(قطر‎ : integer;              //二进制字符转十进制
Function DecTobin(Value :Integer卡塔尔国 : string;              //十进制转变二进制

function SplitString(Source, Deli: string 卡塔尔: TStringList;//分割字符串
Function GetLocateIp(InternetIp:Boolean=False):String;   //取本机IP地址
function GetCS(AStr: string;AIndex: Integer卡塔尔(قطر‎: string;    //生成效验和
procedure EnumCOM(Ports: TStrings);                      //列举COM口

implementation

function DecToHex(Value:Integer;Digit:Integer=2):string;
begin
  Result:=IntToHex(value,Digit);
end;

Function binToDec(Value :string) : integer;
var
str : String;
Int : Integer;
i : integer;
BEGIN
    Str := UpperCase(Value);
    Int := 0;
    FOR i := 1 TO Length(str) DO
    Int := Int * 2+ ORD(str[i]) - 48;
    Result := Int;
end;

Function DecTobin(Value :Integer卡塔尔 : string;//十进制转变二进制
Var
   ST:String;
   N:Integer;

   function mod_num(n1,n2:integer):integer;//取余数
   begin
     result:=n1-n1 div n2*n2
   end;

   function reverse(s:String):String;      //取反串
   var
     i,num:Integer;
     st:String;
   begin
     num:=Length(s);
     st:='';
     For i:=num DownTo 1 do
     Begin
       st:=st+s[i];
     End;
     Result:=st;
   end;
  
Begin
   ST:='';
   n:=value;
   While n>=2 Do
   Begin
        st:=st+IntToStr(mod_num(n,2));
        n:=n div 2;
   End;
   st:=st+IntToStr(n);
   Result:=reverse(st);
End;

Function GetLocateIp(InternetIp:Boolean=False):String;
type
  TaPInAddr = Array[0..10] of PInAddr;
  PaPInAddr = ^TaPInAddr;
var
  phe: PHostEnt;
  pptr: PaPInAddr;
  Buffer: Array[0..63] of Char;
  I: Integer;
  GInitData: TWSAData;
  IP: String;
begin
  Screen.Cursor := crHourGlass;
  try
    WSAStartup($101, GInitData);
    IP:='0.0.0.0';
    GetHostName(Buffer, SizeOf(Buffer));
    phe := GetHostByName(buffer);
    if phe = nil then
    begin
      ShowMessage(IP);
      Result:=IP;
      Exit;
    end;
    pPtr := PaPInAddr(phe^.h_addr_list);
    if InternetIp then
    begin
      I := 0;
      while pPtr^[I] <> nil do
      begin
        IP := inet_ntoa(pptr^[I]^);
        Inc(I);
      end;
    end
    else
      IP:=StrPas(inet_ntoa(pptr^[0]^));
    WSACleanup;
    Result:=IP;                 //要是上网则为上网ip不然是网卡ip
  finally
    Screen.Cursor := crDefault;
  end;
end;

function SplitString(Source,   //源字符串
  Deli: string                 //分割符
  卡塔尔(قطر‎: TStringList;              //再次来到字符串列表
var
  EndOfCurrentString: byte;
  StringList:TStringList;
begin
  StringList:=TStringList.Create;
  while Pos(Deli, Source)>0 do
  begin
    EndOfCurrentString := Pos(Deli, Source);
    StringList.add(Copy(Source, 1, EndOfCurrentString - 1));
    Source := Copy(Source, EndOfCurrentString + length(Deli), length(Source) - EndOfCurrentString);
  end;
  Result := StringList;
  StringList.Add(source);
end;

function HexToDec(AHexString: String): Integer;
begin
  Result :=StrToInt('$' + AHexString);
end;

function HexStrToStr(const S:string):string;
var
  t:Integer;
  ts:string;
  M,Code:Integer;
begin
  t:=1;
  Result:='';
  while t<=Length(S) do
  begin  
    while (t<=Length(S)) and (not (S[t] in ['0'..'9','A'..'F','a'..'f'])) do
      inc(t);
    if (t+1>Length(S))or(not (S[t+1] in ['0'..'9','A'..'F','a'..'f'])) then
      ts:='$'+S[t]
    else
      ts:='$'+S[t]+S[t+1];
    Val(ts,M,Code);
    if Code=0 then
      Result:=Result+Chr(M);
    inc(t,2);
  end;
end;

function StrToHexStr(S:string):string;
var
  I:Integer;
begin
  for I:=1 to Length(S) do
  begin
    if I=1 then
      Result:=IntToHex(Ord(S[1]),2)
    else Result:=Result+' '+IntToHex(Ord(S[I]),2);
  end;
end;

procedure EnumCOM(Ports: TStrings);
var
  KeyHandle: HKEY;
  ErrCode, Index: Integer;
  ValueName, Data: string;
  ValueLen, DataLen, ValueType: DWORD;
  TmpPorts: TStringList;
begin
  ErrCode := RegOpenKeyEx(
    HKEY_LOCAL_MACHINE,
    'HARDWARE/DEVICEMAP/SERIALCOMM',
    0,
    KEY_READ,
    KeyHandle);

  if ErrCode <> ERROR_SUCCESS then
    Exit; 

  TmpPorts := TStringList.Create;
  try
    Index := 0;
    repeat
      ValueLen := 256;
      DataLen := 256;
      SetLength(ValueName, ValueLen);
      SetLength(Data, DataLen);
      ErrCode := RegEnumValue(
        KeyHandle,
        Index,
        PChar(ValueName),
        Cardinal(ValueLen),
        nil,
        @ValueType,
        PByte(PChar(Data)),
        @DataLen);

      if ErrCode = ERROR_SUCCESS then
      begin
        SetLength(Data, DataLen);
        TmpPorts.Add(Data);
        Inc(Index);
      end
      else
        if ErrCode <> ERROR_NO_MORE_ITEMS then
          exit;

    until (ErrCode <> ERROR_SUCCESS) ;

    TmpPorts.Sort;
    Ports.Assign(TmpPorts);
  finally
    RegCloseKey(KeyHandle);
    TmpPorts.Free;
  end;
end;

function GetCS(AStr: string;
  AIndex: Integer卡塔尔: string;            //从第多少个字符初始猜度
var
  newstr1,he,oldstr:string;
  tj:boolean;
  i:integer;
begin
  i:=1;
  he:='';
  tj:=true;
  oldstr:=copy(AStr,AIndex,length(AStr)-AIndex+1);
  while tj=true do
  begin
    newstr1:=copy(oldstr,i,2);
    oldstr:=copy(oldstr,i+2,length(oldstr)-2);
    if he='' then
    begin
      he:=inttohex(strtointdef('$'+newstr1,16)+ strtointdef('$'+'00',16),2);
      he:=rightstr(he,2);
    end else
    begin
      he:=inttohex(strtointdef('$'+newstr1,16)+ strtointdef('$'+he,16),2);
      he:=rightstr(he,2);
    end;
    if length(oldstr) =0 then tj:=false;
  end;
  Result:= AStr+he;
end;

function   BinToHex(   //二进制调换来十九进制
    mBin:   string     //二进制字符
卡塔尔:   string;           //再次来到十七进制字符
var
    I,   L:   Integer;
    S:   string;
begin
    Result   :=   '';
    if   mBin   =   ''   then   Exit;
    mBin   :=   '000'   +   mBin;  
    L   :=   Length(mBin);  
    while   L   >=   4   do  
    begin  
        S   :=   Copy(mBin,   L   -   3,   MaxInt);
        Delete(mBin,   L   -   3,   MaxInt);  
        for   I   :=   Low(cHexBinStrings)   to   High(cHexBinStrings)   do  
            if   S   =   cHexBinStrings[I]   then  
            begin  
                Result   :=   IntToHex(I,   0)   +   Result;
                Break;  
            end;  
        L   :=   Length(mBin);  
    end;  
end;   {   BinToHex   }
   
function   HexToBin(   //十四进制调换来二进制  
    mHex:   string     //十三进制字符串
卡塔尔国:   string;           //再次来到二进制字符串  
var
    I:   Integer;  
begin  
    Result   :=   '';  
    for   I   :=   1   to   Length(mHex)   do  
        Result := Result + cHexBinStrings[StrToIntDef('$' + mHex[I], 0)];
end;   {   HexToBin   }

end.

本文由永利爆大奖安全网址发布于编程应用,转载请注明出处:读取dll全数输出函数名,进制转变

关键词:

回调函数的线程推行空间,中的函数

调用外界 DLL 中的函数(2. 晚绑定卡塔尔 unit Unit1;   dll 与 exe 之间的通讯格局有无数种, 本文接受回调函数的秘技实现...

详细>>

Linux下tomcat服务器部署web项目

使用工具:SecureFX 7.0,SecureCRT 7.0 JCE cannot authenticate the provider NUIMCSCGIBE IbeProvider.class package nuim.cs.crypto.ibe; 1.将web项目...

详细>>

自定义基类,ThinkPHP学习笔记1

  ThinkPHP 提供了一个 Model 类,供其他的 Model 进行继承。Model 类中是MVC 中的模型类,它是调用 持久层的上层类。感觉...

详细>>

Boot中利用小插件Lombok,Compiler时开启插件的笺注

对此IJ这么些IDE工具以来,大家会设置一些插件来帮忙大家越来越好的举行开拓,像lombok便是生龙活虎款不错的插件,...

详细>>