亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dcu_in.pas

?? 反匯編delphi的.dcu文件至匯編代碼的工具的所有源代碼, 用delphi/pascal實現, 反向工程borland delphi寫的程序必備
?? PAS
字號:
{$A+,B-,C+,D+,E-,F-,G+,H+,I+,J+,K-,L+,M-,N+,O+,P+,Q-,R-,S-,T-,U-,V+,W-,X+,Y+,Z1}
unit DCU_In;
(*
The DCU input module of the DCU32INT utility by Alexei Hmelnov.
----------------------------------------------------------------------------
E-Mail: alex@icc.ru
http://hmelnov.icc.ru/DCU/
----------------------------------------------------------------------------

See the file "readme.txt" for more details.

------------------------------------------------------------------------
                             IMPORTANT NOTE:
This software is provided 'as-is', without any expressed or implied warranty.
In no event will the author be held liable for any damages arising from the
use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented, you must not
   claim that you wrote the original software.
2. Altered source versions must be plainly marked as such, and must not
   be misrepresented as being the original software.
3. This notice may not be removed or altered from any source
   distribution.
*)
interface

uses
  SysUtils;

type
  TDCURecTag = Byte{Char};

  TNDX = integer;

  PName = PShortString;

  TInt64Rec = record
    Lo: Cardinal;
    Hi: Cardinal;
  end ;

const
  {Local flags}
  lfClass = $1;{class procedure }
  lfPrivate = $0;
  lfPublic = $2;
  lfProtected = $4;
  lfPublished = $A;
  lfScope = $0E { $0F};
  lfDeftProp = $20;
  lfOverride = $20;
  lfVirtual = $40;
  lfDynamic = $80;

type
TDefNDX = TNDX;

PPNDXTbl = ^PNDXTbl;
PNDXTbl = ^TNDXTbl;
TNDXTbl = array[Byte]of TNDX;

PDef = ^Pointer;
PNameDef = ^TNameDef;
TNameDef = packed record
  Tag: TDCURecTag;
  Name: ShortString;
end ;

type
  TScanState=record
    StartPos,CurPos,EndPos: PChar;
  end ;

var
  ScSt: TScanState;
  DefStart: Pointer;
  Tag: TDCURecTag;

procedure ChangeScanState(var State: TScanState; DP: Pointer; MaxSz: Cardinal);
procedure RestoreScanState(const State: TScanState);

//function IsEOF: boolean;

function ReadByte: Cardinal;
function ReadTag: TDCURecTag;
function ReadULong: Cardinal;

procedure SkipBlock(Sz: Cardinal);
procedure ReadBlock(var B; Sz: Cardinal);

function ReadMem(Sz: Cardinal): Pointer;

function ReadStr: ShortString;
function ReadName: PShortString;

function ReadNDXStr: String;
function ReadByteIfEQ(V: byte): Cardinal;

var
  NDXHi: LongInt;

function ReadUIndex: LongInt;
function ReadIndex: LongInt;

procedure ReadIndex64(var Res: TInt64Rec);
procedure ReadUIndex64(var Res: TInt64Rec);

function SkipDataUntil(B: Byte): PChar;

function NDXToStr(NDXLo: LongInt): String;

function MemToInt(DP: Pointer; Sz: Cardinal; var Res: integer): boolean;
function MemToUInt(DP: Pointer; Sz: Cardinal; var Res: Cardinal): boolean;

type
  EDCUFmtError = class(Exception)
  end ;

procedure DCUError(Msg: String);
procedure DCUErrorFmt(Msg: String; Args: array of const);
procedure DCUWarning(Msg: String);
procedure DCUWarningFmt(Msg: String; Args: array of const);
procedure TagError(Msg: String);

function ExtractFileNameAnySep(FN: String): String;

implementation

uses
  DCU32{CurUnit};

procedure DCUError(Msg: String);
var
  US: String;
  TagC: Char;
begin
  US := '';
  if CurUnit<>MainUnit then begin
    US := CurUnit.UnitName;
    if US='' then
      US := ChangeFileExt(ExtractFileName(CurUnit.FileName),'');
    US := Format(' in %s ',[US]);
  end ;
  TagC := Char(Tag);
  if TagC<' ' then
    TagC := '.';
  if ScSt.EndPos<>Nil then
    US := Format('Error at 0x%x%s(Def: 0x%x, Tag="%s"(0x%x)): %s',
      [ScSt.CurPos-ScSt.StartPos,US,PChar(DefStart)-ScSt.StartPos,TagC,Byte(Tag),Msg])
  else
    US := Format('Error%s: %s',[US,Msg]);
  raise EDCUFmtError.Create(US);
end ;

procedure DCUErrorFmt(Msg: String; Args: array of const);
begin
  DCUError(Format(Msg,Args));
end ;

procedure DCUWarning(Msg: String);
var
  US: String;
begin
  US := '';
  if CurUnit<>MainUnit then begin
    US := CurUnit.UnitName;
    if US='' then
      US := ChangeFileExt(ExtractFileName(CurUnit.FileName),'');
    US := Format(' in %s ',[US]);
  end ;
  if ScSt.EndPos<>Nil then
    US := Format('Warning at 0x%x%s(Def: 0x%x, Tag="%s"(0x%x)): %s',
      [ScSt.CurPos-ScSt.StartPos,US,PChar(DefStart)-ScSt.StartPos,Char(Tag),Byte(Tag),Msg])
  else
    US := Format('Warning%s: %s',[US,Msg]);
  Writeln(US);
end ;

procedure DCUWarningFmt(Msg: String; Args: array of const);
begin
  DCUWarning(Format(Msg,Args));
end ;

procedure TagError(Msg: String);
begin
  DCUErrorFmt('%s: wrong tag "%s"=0x%x',[Msg,Char(Tag),Byte(Tag)]);
end ;

procedure ChangeScanState(var State: TScanState; DP: Pointer; MaxSz: Cardinal);
begin
  State := ScSt;
  ScSt.StartPos := DP;
  ScSt.CurPos := DP;
  ScSt.EndPos := PChar(DP)+MaxSz;
end ;

procedure RestoreScanState(const State: TScanState);
begin
  ScSt := State;
end ;

procedure ChkSize(Sz: Cardinal);
begin
  if integer(Sz)<0 then
    DCUErrorFmt('Negative block size %d',[Sz]);
  if ScSt.CurPos+Sz>ScSt.EndPos then
    DCUErrorFmt('Wrong block size %x',[Sz]);
end ;

{function IsEOF: boolean;
begin
  Result := ScSt.CurPos>=ScSt.EndPos;
end ;
}

function ReadByte: Cardinal;
begin
  ChkSize(1);
  Result := Byte(Pointer(ScSt.CurPos)^);
  Inc(ScSt.CurPos,1);
end ;

function ReadByteIfEQ(V: byte): Cardinal;
begin
  ChkSize(1);
  Result := Byte(Pointer(ScSt.CurPos)^);
  if Result<>V then
    Exit;
  Inc(ScSt.CurPos,1);
end ;

function ReadTag: TDCURecTag;
begin
  DefStart := ScSt.CurPos;
  Result := TDCURecTag(ReadByte);
end ;

function ReadULong: Cardinal;
begin
  ChkSize(4);
  Result := Cardinal(Pointer(ScSt.CurPos)^);
  Inc(ScSt.CurPos,4);
end ;

procedure SkipBlock(Sz: Cardinal);
begin
  ChkSize(Sz);
  Inc(ScSt.CurPos,Sz);
end ;

procedure ReadBlock(var B; Sz: Cardinal);
begin
  ChkSize(Sz);
  move(ScSt.CurPos^,B,Sz);
  Inc(ScSt.CurPos,Sz);
end ;

function ReadMem(Sz: Cardinal): Pointer;
begin
  Result := Pointer(ScSt.CurPos);
  SkipBlock(Sz);
end ;

function ReadStr: ShortString;
begin
  Result[0] := Char(ReadByte);
  ReadBlock(Result[1],Length(Result));
end ;

function ReadName: PShortString;
begin
  Result := Pointer(ScSt.CurPos);
  SkipBlock(ReadByte);
end ;

function ReadNDXStr: String;
//Was observed only in drConstAddInfo records of MSIL
var
  L: integer;
begin
  L := ReadUIndex;
  if (L<0)or(L>$100000{Heuristic}) then
    DCUError('Too long NDX String');
  SetLength(Result,L);
  ReadBlock(Result[1],L);
end ;

function ReadUIndex: LongInt;
type
  TR4 = packed record
    B: Byte;
    L: LongInt;
  end ;

var
  B: array[0..4]of byte;
  W: Word absolute B;
  L: cardinal absolute B;
  R4: TR4 absolute B;
begin
  NDXHi := 0;
  B[0] := ReadByte;
  if B[0] and $1=0 then
    Result := B[0] shr 1
  else begin
    B[1] := ReadByte;
    if B[0] and $2=0 then
      Result := W shr 2
    else begin
      B[2] := ReadByte;
      B[3] := 0;
      if B[0] and $4=0 then
        Result := L shr 3
      else begin
        B[3] := ReadByte;
        if B[0] and $8=0 then
          Result := L shr 4
        else begin
          B[4] := ReadByte;
          Result := R4.L;
          if (CurUnit.Ver>3)and(B[0] and $F0<>0) then
            NDXHi := ReadULong;
        end ;
      end ;
    end ;
  end ;
end ;

function ReadIndex: LongInt;
type
  TR4 = packed record
    B: Byte;
    L: LongInt;
  end ;

  TRL = packed record
    W: Word;
    i: SmallInt;
  end ;

var
  B: packed array[0..7]of byte;
  SB: ShortInt absolute B;
  W: SmallInt absolute B;
  L: LongInt absolute B;
  R4: TR4 absolute B;
  RL: TRL absolute B;
begin
  B[0] := ReadByte;
  if B[0] and $1=0 then begin
    Result := SB;
    asm
      sar DWORD PTR[Result],1
    end;
   end
  else begin
    B[1] := ReadByte;
    if B[0] and $2=0 then begin
      Result := W;
      asm
        sar DWORD PTR[Result],2
      end;
     end
    else begin
      B[2] := ReadByte;
      B[3] := 0;
      if B[0] and $4=0 then begin
        RL.i := ShortInt(B[2]);
        Result := L;
        asm
          sar DWORD PTR[Result],3
        end;
       end
      else begin
        B[3] := ReadByte;
        if B[0] and $8=0 then begin
          Result := L;
          asm
            sar DWORD PTR[Result],3
          end;
         end
        else begin
          B[4] := ReadByte;
          Result := R4.L;
          if (CurUnit.Ver>3)and(B[0] and $F0<>0) then begin
            NDXHi := ReadULong;
            Exit;
          end ;
        end ;
      end ;
    end ;
  end ;
  if Result<0 then
    NDXHi := -1
  else
    NDXHi := 0;
end ;

procedure ReadIndex64(var Res: TInt64Rec);
begin
  Res.Lo := ReadIndex;
  Res.Hi := NDXHi;
end ;

procedure ReadUIndex64(var Res: TInt64Rec);
begin
  Res.Lo := ReadUIndex;
  Res.Hi := NDXHi;
end ;

function SkipDataUntil(B: Byte): PChar;
begin
  Result := Pointer(ScSt.CurPos);
  while ReadByte<>B do;
end ;

function NDXToStr(NDXLo: LongInt): String;
begin
  if NDXHi=0 then
    Result := Format('$%x',[NDXLo])
  else if NDXHi=-1 then
    Result := Format('-$%x',[-NDXLo])
  else if NDXHi<0 then
    Result := Format('-$%x%8.8x',[-NDXHi-1,-NDXLo])
  else
    Result := Format('$%x%8.8x',[NDXHi,NDXLo])
end ;

function MemToInt(DP: Pointer; Sz: Cardinal; var Res: integer): boolean;
begin
  Result := true;
  case Sz of
    1: Res := ShortInt(DP^);
    2: Res := SmallInt(DP^);
    4: Res := LongInt(DP^);
  else
    Result := false;
    Res := 0;
  end ;
end ;

function MemToUInt(DP: Pointer; Sz: Cardinal; var Res: Cardinal): boolean;
begin
  Result := true;
  case Sz of
    1: Res := Byte(DP^);
    2: Res := Word(DP^);
    4: Res := Cardinal(DP^);
  else
    Result := false;
    Res := 0;
  end ;
end ;

const
  AlterSep = {$IFDEF LINUX}'\'{$ELSE}'/'{$ENDIF};

function ExtractFileNameAnySep(FN: String): String;
var
  CP: PChar;
begin
  Result := ExtractFileName(FN);
  CP := StrRScan(PChar(Result),AlterSep);
  if CP=Nil then
    Exit;
  Result := StrPas(CP+1);
end ;

end.


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91无套直看片红桃| 亚洲欧美福利一区二区| 国产精品久久久久三级| 日一区二区三区| 成人黄色一级视频| 精品国产三级电影在线观看| 亚洲欧洲精品天堂一级 | 亚洲男人电影天堂| 美女精品一区二区| 欧美日韩精品一区二区| 中文字幕不卡的av| 国产麻豆视频精品| 日韩视频免费直播| 亚洲成a人v欧美综合天堂| zzijzzij亚洲日本少妇熟睡| 日韩女优毛片在线| 石原莉奈一区二区三区在线观看| 成人激情小说乱人伦| 精品久久一区二区| 美女国产一区二区三区| 在线播放亚洲一区| 亚洲一区二区三区四区的| 一本色道久久加勒比精品| 国产色婷婷亚洲99精品小说| 久久福利资源站| 日韩欧美一二三区| 激情综合色丁香一区二区| 在线电影一区二区三区| 午夜精品福利一区二区三区蜜桃| 91亚洲男人天堂| 国产精品成人一区二区艾草| www.日本不卡| 国产精品久久久久影视| 一本一道综合狠狠老| 亚洲男同1069视频| 欧美性猛片aaaaaaa做受| 亚洲成人在线观看视频| 欧美私人免费视频| 日日夜夜一区二区| 日韩免费观看高清完整版| 久久精品免费看| 久久久无码精品亚洲日韩按摩| 国产一区二区导航在线播放| 欧美激情一区二区三区蜜桃视频 | 2020日本不卡一区二区视频| 经典三级在线一区| 中文字幕av一区二区三区免费看| 国产高清久久久久| 亚洲欧洲韩国日本视频| 欧美亚洲综合另类| 乱中年女人伦av一区二区| 亚洲精品一线二线三线无人区| 国产成人亚洲综合a∨婷婷图片 | 91免费版在线| 午夜亚洲国产au精品一区二区| 欧美一级一级性生活免费录像| 免费精品视频在线| 欧美韩国日本不卡| 欧美亚洲国产一区二区三区| 另类综合日韩欧美亚洲| 日本一区二区免费在线| 色av成人天堂桃色av| 日本伊人色综合网| 久久精品亚洲国产奇米99| 91视频.com| 美脚の诱脚舐め脚责91| 国产精品久久久久三级| 91精品国产品国语在线不卡| 国产寡妇亲子伦一区二区| 一区二区三区成人在线视频| 欧美大片日本大片免费观看| www.综合网.com| 日本最新不卡在线| 亚洲国产精品激情在线观看| 欧美色成人综合| 国产成人av电影| 日产国产高清一区二区三区 | 午夜av区久久| 欧美经典三级视频一区二区三区| 欧美主播一区二区三区美女| 国产福利一区二区| 日韩电影一二三区| 亚洲黄色av一区| 国产免费观看久久| 欧美mv日韩mv国产网站app| www.成人在线| 韩国精品一区二区| 日韩精品亚洲一区二区三区免费| 国产精品青草综合久久久久99| 欧美一区午夜视频在线观看| 99re热这里只有精品免费视频| 精品影院一区二区久久久| 亚洲电影一级片| 亚洲精品第一国产综合野| 久久久精品综合| 日韩色视频在线观看| 91黄色激情网站| 91网站黄www| 成人性色生活片| 国产成人免费视频一区| 激情深爱一区二区| 奇米精品一区二区三区四区| 亚洲综合成人网| 有码一区二区三区| 一区二区三区四区不卡在线| 国产精品卡一卡二卡三| 国产午夜精品美女毛片视频| 精品国产伦一区二区三区观看方式 | 色av成人天堂桃色av| 99re热这里只有精品免费视频| 粉嫩aⅴ一区二区三区四区| 国产综合久久久久久鬼色| 另类调教123区| 强制捆绑调教一区二区| 蜜臀av性久久久久av蜜臀妖精| 石原莉奈在线亚洲二区| 青青草97国产精品免费观看无弹窗版 | 欧美中文字幕一区二区三区| 色综合天天综合网天天看片| 91在线观看污| 91久久线看在观草草青青| 色婷婷综合在线| 欧洲中文字幕精品| 欧美日韩高清一区| 欧美电影免费提供在线观看| www成人在线观看| 国产欧美日韩久久| 一区二区三区自拍| 午夜精品一区二区三区免费视频| 天天综合网天天综合色| 蜜桃传媒麻豆第一区在线观看| 久久99精品国产.久久久久| 国产麻豆一精品一av一免费| 成年人网站91| 欧美午夜电影一区| 91麻豆精品国产91久久久资源速度 | 欧美一区二区免费视频| 精品捆绑美女sm三区| 国产女人aaa级久久久级| 亚洲免费资源在线播放| 一区二区三区免费网站| 日韩黄色免费电影| 国模少妇一区二区三区| 91影视在线播放| 337p亚洲精品色噜噜狠狠| 国产人妖乱国产精品人妖| 最好看的中文字幕久久| 欧美aaaaaa午夜精品| 成人黄色在线视频| 91精品国产综合久久久久久久 | 制服丝袜亚洲网站| 中文字幕 久热精品 视频在线| 一区二区三区四区乱视频| 国内精品久久久久影院一蜜桃| 99久久99久久精品免费看蜜桃| 8v天堂国产在线一区二区| 国产精品美女久久久久久久久| 五月综合激情网| 99久久久免费精品国产一区二区| 欧美日韩1区2区| 国产精品网站导航| 免费不卡在线视频| 色综合久久久久久久久| 久久久亚洲精华液精华液精华液| 一区二区成人在线视频| 国产精品123| 欧美一区二区视频观看视频| 综合精品久久久| 狠狠色综合日日| 欧美日韩精品一区二区天天拍小说| 亚洲国产成人午夜在线一区 | 日韩免费电影一区| 亚洲麻豆国产自偷在线| 国产一区视频导航| 91精品啪在线观看国产60岁| 一区二区高清在线| 成人美女视频在线看| 欧美精品一区二区蜜臀亚洲| 天堂久久一区二区三区| 一本大道久久a久久综合婷婷| 国产婷婷色一区二区三区在线| 青青草国产成人99久久| 欧美性感一类影片在线播放| 国产精品久久久久影院色老大| 国产精品99久久不卡二区| 91精品国产色综合久久不卡电影 | 欧美久久久影院| 有坂深雪av一区二区精品| voyeur盗摄精品| 国产女主播视频一区二区| 国产精品一区免费在线观看| 亚洲精品一区二区三区99| 美女视频免费一区| 欧美xxxxxxxx| 精品亚洲porn| 久久精品亚洲麻豆av一区二区| 极品瑜伽女神91| 精品精品国产高清a毛片牛牛 | 91婷婷韩国欧美一区二区| 国产精品三级av|