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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? dcu_out.pas

?? 反匯編delphi的.dcu文件至匯編代碼的工具的所有源代碼, 用delphi/pascal實現(xiàn), 反向工程borland delphi寫的程序必備
?? PAS
字號:
unit DCU_Out;

interface
(*
The output module of the DCU32INT utility by Alexei Hmelnov.
(Pay attention on the SoftNL technique for pretty-printing.)
----------------------------------------------------------------------------
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.
*)
uses
  SysUtils, FixUp;

type
  TDasmMode = (dasmSeq,dasmCtlFlow);

{ Options: }
var
  InterfaceOnly: boolean=false;
  ShowImpNames: boolean=true;
  ShowTypeTbl: boolean=false;
  ShowAddrTbl: boolean=false;
  ShowDataBlock: boolean=false;
  ShowFixupTbl: boolean=false;
  ShowLocVarTbl: boolean=false;
  ShowFileOffsets: boolean=false;
  ShowAuxValues: boolean=false;
  ResolveMethods: boolean=true;
  ResolveConsts: boolean=true;
  ShowDotTypes: boolean=false;
  ShowSelf: boolean=false;
  ShowVMT: boolean=false;
  ShowHeuristicRefs: boolean=true;
  ShowImpNamesUnits: boolean=false;
  DasmMode: TDasmMode = dasmSeq;

var
  AuxLevel: integer=0;

var
  GenVarCAsVars: boolean = false;

var
  NoNamePrefix: String = '_N%_';
  DotNamePrefix: String = '_D%_';

procedure SetShowAll;

procedure PutS(S: String);
procedure PutSFmt(Fmt: String; Args: array of const);
procedure NL;
procedure SoftNL;
procedure InitOut;
procedure FlushOut;

function CharDumpStr(var V;N : integer): ShortString;
function DumpStr(var V;N : integer): String;

function IntLStr(DP: Pointer; Sz: Cardinal; Neg: boolean): String;

function CharStr(Ch: Char): String;
function WCharStr(WCh: WideChar): String;
function BoolStr(DP: Pointer; DS: Cardinal): String;
function StrConstStr(CP: PChar; L: integer): String;
function ShowStrConst(DP: Pointer; DS: Cardinal): integer {Size used};
function TryShowPCharConst(DP: PChar; DS: Cardinal): integer {Size used};

const
  cSoftNL=#0;
  MaxOutWidth: Cardinal = 75;
  MaxNLOfs: Cardinal = 31 {Should be < Ord(' ')};

var
  NLOfs: cardinal;
  OutLineNum: integer = 0 {Read only};
  FRes: TextFile;

procedure ShowDump(DP,DPFile0: PChar; FileSize,SizeDispl,Size: Cardinal;
  Ofs0Displ,Ofs0,WMin: Cardinal; FixCnt: integer; FixTbl: PFixupTbl;
  FixUpNames: boolean);

implementation

uses
  DCU32{CurUnit}, DCU_In;

procedure SetShowAll;
begin
  ShowImpNames := true;
  ShowTypeTbl := true;
  ShowAddrTbl := true;
  ShowDataBlock := true;
  ShowFixupTbl := true;
  ShowLocVarTbl := true;
  ShowFileOffsets := true;
  ShowAuxValues := true;
  ResolveMethods := true;
  ResolveConsts := true;
  ShowDotTypes := true;
  ShowSelf := true;
  ShowVMT := true;
  ShowImpNamesUnits := true;
end ;

var
  BufNLOfs: Cardinal;
  BufLen: cardinal;
  Buf: array[0..$800-1] of Char;

procedure FillNL(NLOfs: Cardinal);
var
  S: ShortString;
  W: integer;
begin
  W := NLOfs;
  if W<0 then
    W := 0
  else if W>MaxNLOfs then
    W := MaxNLOfs;
  S[0] := Chr(W);
  FillChar(S[1],W,' ');
  Write(FRes,S);
end ;

function GetSoftNLOfs(var ResNLOfs: Cardinal): integer;
var
  i,iMin: integer;
  MinOfs,Ofs: integer;
begin
  MinOfs := Ord(' ');
  Result := BufLen;
  for i:=BufLen-1 downto 0 do begin
    Ofs := Ord(Buf[i]);
    if Ofs<MinOfs then begin
      MinOfs := Ofs;
      Result := i;
    end ;
  end ;
  if MinOfs<Ord(' ') then
    ResNLOfs := MinOfs
  else
    ResNLOfs := NLOfs;
end ;

procedure FlushBufPart(W,NLOfs: integer);
var
  i: integer;
//  S: String;
  SaveCh: Char;
begin
  if W>0 then begin
    for i:=0 to W-1 do
     if Buf[i]<' ' then
       Buf[i] := ' ';
    FillNL(BufNLOfs);
//    SetString(S,Buf,W);
//    Write(FRes,S);
    SaveCh := Buf[W];
    Buf[W] := #0;
    Write(FRes,Buf);
    Buf[W] := SaveCh;
  end ;
  Writeln(FRes);
  Inc(OutLineNum);
  while (W<BufLen)and(Buf[W]<=' ') do
    Inc(W);
  if W<BufLen then
    move(Buf[W],Buf,BufLen-W);
  BufLen := BufLen-W;
  BufNLOfs := NLOfs;
end ;

function FlushSoftNL(W: Cardinal): boolean;
var
  Split: integer;
  ResNLOfs: Cardinal;
begin
  Result := false;
  while ((BufNLOfs+BufLen+W)>MaxOutWidth)and(BufLen>0) do begin
    Split := GetSoftNLOfs(ResNLOfs);
   {Break only at the soft NL splits: }
    if Split>=BufLen then
      Break;
    FlushBufPart(Split,ResNLOfs);
  end ;
  Result := (BufNLOfs+BufLen+W)<= MaxOutWidth;
end ;

procedure BufChars(CP: PChar; Len: integer);
var
  i: integer;
  ch: Char;
begin
//  FlushSoftNL(Len);
  While Len>0 do begin
    if BufLen>=High(Buf) then
      Exit {Just in case};
    ch := CP^;
    Inc(CP);
    Dec(Len);
    if ch<' ' then begin
      if NLOfs>MaxNLOfs then
        Ch := Chr(MaxNLOfs)
      else
        Ch := Chr(NLOfs);
    end ;
    Buf[BufLen] := Ch;
    Inc(BufLen);
    if (ch<' ') then
      FlushSoftNL(0);
  end ;
  FlushSoftNL(0);
//  move(S[1],Buf[BufLen],Length(S));
//  Inc(BufLen,Length(S));
{  if FlushSoftNL(Length(S)) then begin
    move(S[1],Buf[BufLen],Length(S));
    Inc(BufLen,Length(S));
   end
  else begin
    FillNL(BufNLOfs);
    Write(FRes,S);
    Writeln(FRes);
  end ;}
end ;

procedure PutS(S: String);
begin
  if AuxLevel>0 then
    Exit;
  if S='' then
    Exit;
  BufChars(PChar(S),Length(S));
end ;

procedure PutSFmt(Fmt: String; Args: array of const);
begin
  if AuxLevel>0 then
    Exit;
  PutS(Format(Fmt,Args));
end ;

procedure FlushOut;
begin
  FlushBufPart(BufLen,NLOfs);
end ;

procedure NL;
begin
  if AuxLevel>0 then
    Exit;
  FlushOut;
end ;

procedure SoftNL;
var
  Ch: Char;
begin
  if AuxLevel>0 then
    Exit;
  Ch := cSoftNL;
  BufChars(@Ch,1);
end ;

procedure InitOut;
begin
  NLOfs := 0;
  BufLen := 0;
  BufNLOfs := NLOfs;
  OutLineNum := 0;
end ;

function CharDumpStr(var V;N : integer): ShortString;
var
  C : array[1..255]of Char absolute V;
  i : integer ;
  S: ShortString;
  Ch: Char;
  TstAbs: byte absolute S;
begin
  if N>255 then
    N := 255;
  CharDumpStr[0] := Chr(N);
  for i := 1 to N do
    if C[i] < ' ' then
      CharDumpStr[i] := '.'
    else
      CharDumpStr[i] := C[i] ;
end ;

function CharNStr(Ch: Char;N : integer): ShortString;
begin
  SetLength(Result,N);
  FillChar(Result[1],N,Ch);
end ;

type
  TByteChars = packed record Ch0,Ch1: Char end;

const
  Digit : array[0..15] of Char = '0123456789ABCDEF';

function ByteChars(B: Byte): Word;
var
  Ch: TByteChars;
begin
  Ch.Ch0 := Digit[B shr 4];
  Ch.Ch1 := Digit[B and $f];
  ByteChars := Word(Ch);
end ;

function DumpStr(var V;N : integer): String;
var
  i : integer ;
  BP: ^Byte;
  P: Pointer;
begin
  SetLength(Result,N*3-1);
  P := @Result[1];
  BP := @V;
  for i := 1 to N do begin
    Word(P^) := ByteChars(BP^);
    Inc(Cardinal(P),2);
    Char(P^) := ' ';
    Inc(Cardinal(P));
    Inc(Cardinal(BP));
  end ;
  Dec(Cardinal(P));
  Char(P^) := #0;
end ;

const
  OfsFmtS='%0.0x: %2:s';
  FileOfsFmtS='%0.0x_%0.0x: %s';

function GetNumHexDigits(Sz: Cardinal): Cardinal;
begin
  Result := 0;
  while Sz>0 do begin
    Inc(Result);
    Sz := Sz shr 4;
  end ;
end ;

procedure SetHexFmtNumDigits(var FmtS: String; p: integer; Sz: Cardinal);
var
  N: Cardinal;
  LCh: Char;
begin
  N := GetNumHexDigits(Sz);
  LCh := Chr(Ord('0')+N);
  FmtS[p] := LCh;
  FmtS[p+2] := LCh;
end ;

procedure ShowDump(DP, {File 0 address, show file offsets if present}
  DPFile0: PChar; {Dump address}
  FileSize,SizeDispl {used to calculate display offset digits},
  Size {Dump size}: Cardinal;
  Ofs0Displ {initial display offset},
  Ofs0 {offset in DCU data block - for fixups},
  WMin{Minimal dump width (in bytes)}: Cardinal;
  FixCnt: integer; FixTbl: PFixupTbl;
  FixUpNames: boolean);
var
  LP: PChar;
  LS,W: Cardinal;
  FmtS,DS,FixS,FS,DumpFmt: String;
  DSP,CP: PChar;
  Sz,LSz,dOfs: Cardinal;
  Ch: Char;
//  IsBig: boolean;
  FP: PFixupRec;
  K: Byte;
  N: PName;
begin
  if integer(Size)<=0 then begin
    PutS('[]');
    Exit;
  end ;
  if DPFile0=Nil then
    FmtS := OfsFmtS
  else begin
    FmtS := FileOfsFmtS;
    SetHexFmtNumDigits(FmtS,8,FileSize);
  end ;
  if SizeDispl=0 then
    SizeDispl := Size;
  SetHexFmtNumDigits(FmtS,2,Ofs0Displ+SizeDispl);
  W := 16;
  LP := DP;
//  IsBig := Size>W;
  if Size<W then begin
    W := Size;
    if W<WMin then
      W := WMin;
  end ;
  if WMin>0 then
    DumpFmt := '|%-'+IntToStr(3*W-1)+'s|'
  else
    DumpFmt := '|%s|';
  FP := Pointer(FixTbl);
  if FP=Nil then
    FixCnt := 0 {Just in case};
  repeat
    LSz := W;
    if LSz>Size then
      LSz := Size;
    PutSFmt(FmtS,[Ofs0Displ+(LP-DP),LP-DPFile0,CharDumpStr(LP^,LSz)]);
    if (LSz<W){and IsBig} then
      PutS(CharNStr(' ',W-LSz));
    DS := Format(DumpFmt{'|%s|'},[DumpStr(LP^,LSz)]);
    DSP := PChar(DS);
    if FixUpNames then
      FixS := '';
    while FixCnt>0 do begin
      dOfs := FP^.OfsF and FixOfsMask-Ofs0;
      K := TByte4(FP^.OfsF)[3];
      if (dOfs>=LSz)and not((dOfs=LSz)and(K={CurUnit.}fxEnd{LSz=Size})) then
        Break;
      CP := DSP+dOfs*3;
      case CP^ of
        '|': CP^ := '[';
        ' ': CP^ := '(';
        '(','[': CP^ := '{';
      end ;
      if FixUpNames then begin
        FS := Format('K%x %s',[K,CurUnit.GetAddrStr(FP^.NDX,true)]);
        if FixS='' then
          FixS := FS
        else
          FixS := Format('%s, %s',[FixS,FS]);
      end ;
      Dec(FixCnt);
      Inc(FP);
    end ;
    Inc(Ofs0,LSz);
    PutS(DS);
    if FixUpNames then
      PutS(FixS);
    {PutS('|');
    PutS(DumpStr(LP^,LSz));
    if (LSz<W)and IsBig then
      PutS(CharNStr(' ',3*(W-LSz)));}
    Dec(Size,LSz);
    Inc(LP,LSz);
    if Size>0 then
      NL;
  until Size<=0;
end ;

function IntLStr(DP: Pointer; Sz: Cardinal; Neg: boolean): String;
var
  i : integer;
  BP: ^Byte;
  P: Pointer;
  V: integer;
  Ok: boolean;
begin
  if Neg then begin
    Ok := true;
    case Sz of
      1: V := ShortInt(DP^);
      2: V := SmallInt(DP^);
      4: V := LongInt(DP^);
    else
      Ok := false;
      if Sz=8 then begin
        V := LongInt(DP^);
        Inc(PChar(DP),4);
        NDXHi := LongInt(DP^);
        Result := NDXToStr(V);
        Exit;
      end ;
    end ;
    if Ok then begin
      //Result := IntToStr(V);
      if V>=0 then
        Result := Format('$%x',[V])
      else
        Result := Format('-$%x',[-V]);
      Exit;
    end ;
  end ;
  Pointer(BP) := PChar(DP)+Sz-1;
  SetLength(Result,Sz*2+1);
  P := PChar(Result);
  Char(P^) := '$';
  Inc(PChar(P));
  for i := 1 to Sz do begin
    Word(P^) := ByteChars(BP^);
    Inc(PChar(P),2);
    Dec(PChar(BP));
  end ;
end ;

function CharStr(Ch: Char): String;
begin
  if Ch<' ' then
    Result := Format('#%d',[Byte(Ch)])
  else
    Result := Format('''%s''{#$%x}',[Ch,Byte(Ch)])
end ;

function WCharStr(WCh: WideChar): String;
var
  WStr: array[0..1]of WideChar;
  S: String;
  Ch: Char;
begin
  if Word(WCh)<$100 then
    Ch := Char(WCh)
  else begin
    WStr[0] := WCh;
    Word(WStr[1]) := 0;
    S := WideCharToString(WStr);
    if Length(S)>0 then
      Ch := S[1]
    else
      Ch := '.';
  end ;
  if Ch<' ' then
    Result := Format('#%d',[Word(WCh)])
  else
    Result := Format('''%s''{#$%x}',[Ch,Word(WCh)])
end ;

function BoolStr(DP: Pointer; DS: Cardinal): String;
var
  S: String;
  CP: PChar;
  All0: boolean;
begin
  CP := PChar(DP)+DS-1;
  while (CP>PChar(DP))and(CP^=#0)do
    Dec(CP);
  if (CP=PChar(DP)) then begin
    if CP^=#0 then begin
      Result := 'false';
      Exit;
    end ;
    if CP^=#1 then begin
      Result := 'true';
      Exit;
    end ;
  end ;
  Result := Format('true{%s}',[IntLStr(DP,DS,false)]);
end ;

function StrConstStr(CP: PChar; L: integer): String;
var
  WasCode,Code: boolean;
  ch: Char;
  LRes: integer;

  procedure PutCh(ch: Char);
  begin
    Inc(LRes);
    Result[LRes] := ch;
  end ;

  procedure PutStr(S: String);
  begin
    move(S[1],Result[LRes+1],Length(S));
    Inc(LRes,Length(S));
  end ;

  procedure PutQuote;
  begin
    PutCh('''');
  end ;

begin
  SetLength(Result,3*L+2);
  LRes := 0;
  Code := true;
  while L>0 do begin
    ch := CP^;
    Inc(CP);
    Dec(L);
    WasCode := Code;
    Code := ch<' ';
    if WasCode<>Code then
      PutQuote;
    if Code then
      PutStr(CharStr(Ch))
    else begin
      if Ch='''' then
        PutQuote;
      PutCh(Ch);
    end ;
  end ;
  if not Code then
    PutQuote;
  if LRes=0 then
    Result := ''''''
  else
    SetLength(Result,LRes);
end ;

function ShowStrConst(DP: Pointer; DS: Cardinal): integer {Size used};
var
  L: integer;
  VP: Pointer;
begin
  Result := -1;
  if DS<9 {Min size} then
    Exit;
  if integer(DP^)<>-1 then
    Exit {Reference count,-1 => ~infinity};
  VP := PChar(DP)+SizeOf(integer);
  L := integer(VP^);
  if DS<L+9 then
    Exit;
  Inc(PChar(VP),SizeOf(integer));
  if (PChar(VP)+L)^<>#0 then
    Exit;
  Result := L+9;
  PutS(StrConstStr(VP,L));
end ;

function TryShowPCharConst(DP: PChar; DS: Cardinal): integer {Size used};
{ This function should check whether DP points to some valid text
  I know that this algorithm is wrong for multibyte encoding.
  Dear Asian colleagues, Please send me your versions. }
const
  ValidChars = [#9,#13,#10,' '..#255];
var
  CP,EP: PChar;
begin
  EP := DP+DS;
  Result := -1;
  CP := DP;
  while (CP<EP)and(CP^in ValidChars) do
    Inc(CP);
  if (CP>=EP)or(CP^<>#0) then
    Exit;
  if (DP^=#$E9)and(CP=DP+1) then {JMP 0 - got tired of those wrong strings for TRY}
    Exit;
  Result := CP-DP;
  PutS(StrConstStr(DP,Result));
  Inc(Result);
end ;

end.

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美亚洲一区三区| 日本免费新一区视频| 成人免费毛片a| 中文一区二区在线观看| 粗大黑人巨茎大战欧美成人| 久久新电视剧免费观看| 国产伦精一区二区三区| 国产精品色哟哟| 色一区在线观看| 天天av天天翘天天综合网色鬼国产 | 亚洲电影视频在线| 7777精品伊人久久久大香线蕉超级流畅 | 成人精品免费看| 综合婷婷亚洲小说| 欧美丰满美乳xxx高潮www| 日韩电影一区二区三区四区| 欧美一区二区三区电影| 国产在线播精品第三| 中文字幕中文字幕一区二区| 在线免费观看成人短视频| 免费成人在线观看视频| 久久久777精品电影网影网 | 国产精品18久久久久久久网站| 久久久久国产成人精品亚洲午夜| 91在线视频观看| 视频一区二区国产| 国产精品欧美一区二区三区| 欧美精品日韩一区| 成人午夜视频在线| 日韩精品免费视频人成| 国产精品久久久久久亚洲毛片| 欧美精品三级在线观看| www.av亚洲| 免费成人深夜小野草| 国产精品美女久久久久aⅴ国产馆| 欧美色图片你懂的| 国产91精品精华液一区二区三区| 香蕉成人啪国产精品视频综合网| 国产色综合久久| 在线不卡一区二区| 色综合久久久久综合体桃花网| 国产一区二区三区四| 欧美日韩情趣电影| 亚洲精品国产高清久久伦理二区| 91精品国模一区二区三区| 成人av电影免费观看| 麻豆91在线播放| 亚洲一区国产视频| 亚洲国产精品高清| 精品成人免费观看| 欧美日韩国产精品自在自线| 成人avav影音| 久久99国产乱子伦精品免费| 亚洲高清免费一级二级三级| 国产精品久久久久久久岛一牛影视 | 91传媒视频在线播放| 国产精品88av| 国产一区二区三区av电影| 亚洲va天堂va国产va久| 一区二区高清视频在线观看| 欧美激情中文不卡| 久久美女艺术照精彩视频福利播放| 欧美日韩综合色| av动漫一区二区| 国产精品亚洲第一| 艳妇臀荡乳欲伦亚洲一区| 国产精品国产精品国产专区不片| 精品国产乱码久久久久久蜜臀 | 日韩一级大片在线| 欧美日韩aaa| 欧美少妇性性性| 欧美丝袜丝交足nylons图片| 色婷婷综合久久| 一本大道久久a久久综合| 91原创在线视频| 99久久99久久综合| 91碰在线视频| 91女神在线视频| 欧美亚洲高清一区二区三区不卡| 91麻豆精东视频| 在线视频一区二区三区| 色久优优欧美色久优优| 在线观看欧美日本| 欧美日韩一区二区三区四区五区| 欧美日韩一二三| 日韩欧美一区二区三区在线| 日韩精品资源二区在线| 亚洲精品一区在线观看| 国产三级欧美三级| 亚洲天天做日日做天天谢日日欢| 国产精品福利电影一区二区三区四区| 欧美国产综合一区二区| 亚洲欧美日韩久久精品| 亚洲第一在线综合网站| 另类小说一区二区三区| 国产呦精品一区二区三区网站| 国产一区二区三区日韩| 成人高清免费在线播放| 日本高清不卡视频| 9191成人精品久久| 久久久影视传媒| 亚洲人成精品久久久久久| 亚洲成精国产精品女| 麻豆成人在线观看| 成人丝袜高跟foot| 欧美丝袜丝nylons| 久久久亚洲国产美女国产盗摄| 中文字幕在线不卡视频| 亚洲成在人线在线播放| 激情小说欧美图片| 91亚洲精品一区二区乱码| 91超碰这里只有精品国产| 久久久久国产一区二区三区四区| 中文字幕在线不卡国产视频| 偷拍日韩校园综合在线| 国产大陆精品国产| 欧美最猛性xxxxx直播| 欧美成人精品福利| 亚洲精品一二三四区| 激情小说亚洲一区| 在线观看国产91| 国产欧美一区二区在线观看| 亚洲午夜成aⅴ人片| 国产一区二区三区| 欧美日韩成人综合天天影院| 久久久久九九视频| 午夜精品久久久久久不卡8050| 国产99久久久国产精品潘金| 欧美日韩国产美女| 国产精品久久国产精麻豆99网站 | 亚洲色图欧美在线| 精品伊人久久久久7777人| 在线精品视频小说1| 久久久精品黄色| 日韩高清不卡在线| 91麻豆国产福利精品| 久久久国产精品不卡| 视频一区欧美日韩| 日本韩国欧美三级| 国产精品久久久久一区二区三区共| 麻豆一区二区99久久久久| 日本精品视频一区二区三区| 国产精品婷婷午夜在线观看| 老司机精品视频导航| 8x福利精品第一导航| 亚洲欧美另类在线| 成a人片亚洲日本久久| 久久综合色一综合色88| 日韩av成人高清| 精品视频一区二区三区免费| 最新高清无码专区| 成人激情免费电影网址| 久久亚洲二区三区| 国内一区二区视频| 日韩欧美一级二级三级| 日本欧美在线看| 69av一区二区三区| 亚洲成精国产精品女| 欧美日韩色一区| 亚洲成av人**亚洲成av**| 在线看国产日韩| 亚洲在线观看免费视频| 欧美亚洲国产一区二区三区va| 亚洲精品免费电影| 在线视频欧美区| 一区二区三区精密机械公司| 色综合久久综合网| 亚洲精品大片www| 欧美视频一区在线| 午夜视频在线观看一区二区三区| 色婷婷久久综合| 亚洲成人动漫精品| 欧美一区二区久久久| 男女男精品视频| 久久午夜国产精品| 成人高清免费观看| 亚洲日本乱码在线观看| 欧美羞羞免费网站| 日本一道高清亚洲日美韩| 日韩午夜中文字幕| 狠狠色狠狠色综合| 国产精品久久久久国产精品日日| www.66久久| 午夜精品久久一牛影视| 日韩欧美国产一区在线观看| 国产精品一区二区果冻传媒| 中文字幕精品三区| 色婷婷国产精品久久包臀| 午夜私人影院久久久久| 日韩免费看的电影| 成人午夜电影久久影院| 亚洲一区二区三区精品在线| 欧美一区二区三区在线观看视频| 国产麻豆精品95视频| 亚洲精品免费一二三区| 日韩亚洲欧美在线| 成人自拍视频在线观看| 一区二区欧美在线观看| 日韩欧美另类在线| 91偷拍与自偷拍精品|