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

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

?? disasm.pas

?? SrcDecompiler is about creating a Delphi program decompiler. The program is written for Delphi 4 or
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
           else
             OperandSize := 8;
      // Byte.
      'b': OperandSize := 1;
      // Byte or word
      'c': if DeffOperandSize = 2 then
             OperandSize := 1
           else
             OperandSize := 2;
      // DWord
      'd': OperandSize := 4;
      // 32 or 48 bit pointer
      'p': OperandSize := AddressSize + 2;
      // QWord
      'q': OperandSize := 8;
      // 6Byte
      's': OperandSize := 6;
      // Word or DWord
      'v': OperandSize := DeffOperandSize;
      // Word
      'w': OperandSize := 2;
      // Tera byte
      't': OperandSize := 10;
      // No size, also don't use must have size.
      ' ': MustHaveSize := False;
    end;

    case AddrMethod of
      // Direct Address.
      'A': if OperandType = 'p' then
           begin
             // Read address and return it.
             if SegOverride then
               Result := SegName + ':'
             else
               Result := '';
             if AddressSize = 4 then
               Result := Result + GetRefAddress
             else
               Result := Result + '$' + IntToHex(ReadWord, 2);
           end
           else
             // A direct address the isn't a pointer??
             raise EDisAsmError.Create('Invalid AddrMethod and OperandType combination');

      // Reg field in ModRm specifies Control register.
      'C': if OperandType = 'd' then
           begin
             // Read Reg part of the ModRM field.
             Result := Format('C%d', [(ModRM and modrmReg) div 8]);
             MustHaveSize := False;
           end
           else
             // Only support for the complete register.
             raise EDisAsmError.Create('Invalid AddrMethod and OperandType combination');

      // Reg field in ModRm specifies Debug register.
      'D': if OperandType = 'd' then
           begin
             // Read Reg part of the ModRM field.
             Result := Format('D%d', [(ModRM and modrmReg) div 8]);
             MustHaveSize := False;
           end
           else
             // Only support for the complete register.
             raise EDisAsmError.Create('Invalid AddrMethod and OperandType combination');

      // General purpose register or memory address specified in the ModRM byte.
      // There are no check for invalid operands.
      'E', 'M', 'R': Result := GetEffectiveAddress(False);

      // EFlags register
      'F': { Do nothing };

      // Reg field in ModRM specifies a general register
      'G': begin
           Result := GetRegName((ModRM and modrmReg) div 8);
           MustHaveSize := False;
           end;

      // Signed immidate data
      'H': begin
           case OperandSize of
             1: I := ShortInt(ReadByte);
             2: I := Smallint(ReadWord);
             4: I := Integer(ReadDWord);
             else raise EDisAsmError.Create('Invalid OperandSize');
           end;
           Result := SignedIntToHex(I, OperandSize * 2);
           if Assigned(OnImmidiateData) then
             OnImmidiateData(Param, Address + Size - OperandSize, OperandSize, True, Result);
           Result := '^' + chr(Length(Result)) + Result;
           end;
      // Imidiate data
      'I': begin
           Result := '';
           for I := OperandSize downto 1 do
             Result := IntToHex(ReadByte, 2) + Result;
           Result := '$' + Result;
           if Assigned(OnImmidiateData) then
             OnImmidiateData(Param, Address + Size - OperandSize,
               OperandSize, False, Result);
           Result := '^' + Chr(Length(Result)) + Result;
           end;

      // Relative jump Offset Byte
      'J': begin
             case OperandSize of
               1: I := ShortInt(ReadByte);
               2: I := Smallint(ReadWord);
               4: I := Integer(ReadDWord);
               else raise EDisAsmError.Create('Invalid OperandSize');
             end;
             // Convert the value to a string.
             Result := SignedIntToHex(I, OperandSize * 2);
             // if its a jump call the JumpInstr proc.
             if (EnhOperandType = 'j') and Assigned(OnJumpInstr) then
             begin
               OnJumpInstr(Param, Address + Size - OperandSize, Address + Size + I, Result);
               Result := '^' + Chr(Length(Result)) + Result;
             end;
             if (EnhOperandType = 'c') and Assigned(OnCallInstr) then
             begin
               OnCallInstr(Param, Address + Size - OperandSize, Address + Size + I, Result);
               Result := '^' + Chr(Length(Result)) + Result;
             end;
           end;

      // Relative Offset Word or DWord
      'O': if AddressSize = 2 then
             Result := '%s' + Chr(OperandSize) + '[$' + IntToHex(ReadWord, 4) + ']'
           else
           begin
             Result := '%s' + Chr(OperandSize) + '[' + GetRefAddress + ']';
             if Assigned(OnRef) then
               OnRef(Param, Ref, OperandSize, Result);
           end;

      // Reg field in ModRM specifies a MMX register
      'P': begin
           Result := Format('MM%d', [(ModRM and modrmReg) div 8]);
           MustHaveSize := False;
           end;

      // MMX register or memory address specified in the ModRM byte.
      'Q': if (ModRM and modrmmod) = $C0 then
           begin
             // MMX register
             Result := Format('MM%d', [(ModRM and modrmReg) div 8]);
             MustHaveSize := False;
           end
           else
             // Effective address
             Result := GetEffectiveAddress(False);

      // Reg field in ModRM specifies a Segment register
      'S': case (ModRM and modrmReg) div 8 of
             0: Result := 'es';
             1: Result := 'cs';
             2: Result := 'ss';
             3: Result := 'ds';
             4: Result := 'fs';
             5: Result := 'gs';
           end;

      // Reg field in ModRM specifies a MMX register
      'T': begin
           Result := Format('T%d', [(ModRM and modrmReg) div 8]);
           MustHaveSize := False;
           end;

    end;
  end;



  function Replacer(FirstChar, SecondChar: char): string;
  const
    modrmReg = $38;  // Reg part of the ModRM byte, ??XXX???
  begin
    case FirstChar of
      // escape character
      'c': if SecondChar = '2' then
             Result := TwoByteOpcodes[char(ReadByte)]
           else
             if ModRm <= $BF then
               Result := FloatingPointOpcodes[SecondChar, (ModRM and modrmReg) div 8 + $B8]
             else
               Result := FloatingPointOpcodes[SecondChar, ModRm];

      // 32 bit register or 16 bit register.
      'e': if DeffOperandSize = 4 then
             Result := 'e' + SecondChar
           else
             Result := SecondChar;

      // Seg prefix override.
      'p': begin
           SegOverride := True;
           SegName := SecondChar + 's';
           Result := OneByteOpcodes[char(ReadByte)];
           end;

      // Size override (address or operand).
      's': begin
           case SecondChar of
             'o': DeffOperandSize := 2;
             'a': AddressSize := 2;
           end;
           Result := OneByteOpcodes[char(ReadByte)];
           end;

      // Operand size
      'o': if DeffOperandSize = 4 then
             case SecondChar of
               '2': Result := 'w';
               '4': Result := 'd';
               '8': Result := 'q';
             end
           else
             case SecondChar of
               '2': Result := 'b';
               '4': Result := 'w';
               '8': Result := 'd';
             end;

      // Must have size.
      'm': begin
           Result := '';
           MustHaveSize := True;
           end;

      // Group, return the group insruction specified by OperandType
      // and the reg field of the ModRM byte.
      'g': Result := GroupsOpcodes[SecondChar, (ModRM and modrmReg) div 8];

      // Operand for group, return operands for the group insruction specified
      // by OperandType and the reg field of the ModRM byte.
      'h': Result := GroupsOperands[SecondChar, (ModRM and modrmReg) div 8];
    end;
  end;

var
  I, J: Integer;
begin
  DeffOperandSize := 4;
  OperandSize := 0;
  AddressSize := 4;
  SegOverride := False;
  Size := 0;
  XHasSib := False;
  XHasModRM := False;
  MustHaveSize := True;
  Ref.MultiplyReg1 := 0;
  Ref.MultiplyReg2 := 0;
  Ref.Immidiate := nil;
  Result := OneByteOpcodes[char(ReadByte)];
  I := 1;
  while I < Length(Result) -1  do
    case Result[I] of
      '#': begin
           Insert(Operand(Result[I+1], Result[I+2], Result[I+3]), Result, I + 4);
           Delete(Result, I, 4);
           end;
      '@': begin
           Insert(Replacer(Result[I+1], Result[I+2]), Result, I + 3);
           Delete(Result, I, 3);
           end;
      '^': begin
           // Skip the numbers of character indicate in the next char.
           J := I;
           Inc(I, Ord(Result[I+1]));
           Delete(Result, J, 2);
           end;
      else Inc(I);
    end;
  // Replace '%s' with size name if MustHaveSize = true or nothing.
  I := 1;
  while I < Length(Result) -1  do
    case Result[I] of
      '%': begin
             case Result[I+1] of
               's': if MustHaveSize then
                      case Result[I+2] of
                        #1: Insert('byte ptr ', Result, I + 3);
                        #2: Insert('word ptr ', Result, I + 3);
                        #4: Insert('dword ptr ', Result, I + 3);
                        #6: ;
                        #8: Insert('qword ptr ', Result, I + 3);
                        #10: Insert('tbyte ptr ', Result, I + 3);
                      else
                        raise EDisAsmError.CreateFmt('Size out of range. %d, %p', [Ord(Result[I+2]), Pointer(Address)]);
                      end;
               'c': begin
                      // Include the opcode as DB.
                      Insert('  //', Result, I + 3);
                      for J := Size -1 downto 1 do
                        Insert(', $' + IntToHex(PByte(Address + J)^, 2), Result, I + 3);
                      Insert('DB  $' + IntToHex(PByte(Address)^, 2), Result, I + 3);
                    end;
             end;
             Delete(Result, I, 3);
           end;
      else Inc(I);
    end;
end;

function FindFirstSimpleCallTo(CallAddress, SearchAddress: PChar; SearchSize: Integer): PChar;
begin
   Result := SearchAddress;
   while Result <= SearchAddress + SearchSize - 5 do
   begin
     if (Result[0] = #$E8) and (Result + PInteger(Result+1)^ + 5 = CallAddress) then
       exit;
     Inc(Result, 1);
   end;
   Result := nil;
end;

function FindLastSimpleCallTo(CallAddress, SearchAddress: PChar; SearchSize: Integer): PChar;
begin
   Result := SearchAddress + SearchSize - 5;
   while Result >= SearchAddress  do
   begin
     if (Result[0] = #$E8) and (Result + PInteger(Result+1)^ + 5 = CallAddress) then
       exit;
     Dec(Result, 1);
   end;
   Result := nil;
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
www国产亚洲精品久久麻豆| 欧美在线观看一二区| 午夜久久电影网| 亚洲欧美国产高清| 亚洲一区二区成人在线观看| 1区2区3区精品视频| 1024精品合集| 亚洲一区免费在线观看| 日韩影院免费视频| 狠狠网亚洲精品| 成人小视频在线观看| 99麻豆久久久国产精品免费| 色视频一区二区| 欧美理论在线播放| 久久综合久久久久88| 中文字幕日本乱码精品影院| 亚洲乱码日产精品bd| 五月天欧美精品| 国内精品免费在线观看| 不卡的电视剧免费网站有什么| 97超碰欧美中文字幕| 日本国产一区二区| 日韩丝袜美女视频| 欧美高清在线一区二区| 亚洲图片一区二区| 韩国成人精品a∨在线观看| 99re这里只有精品首页| 欧美日韩免费在线视频| 国产日韩一级二级三级| 亚洲一区二区精品久久av| 久久国产剧场电影| 色综合色狠狠综合色| 精品久久久三级丝袜| 亚洲视频精选在线| 精东粉嫩av免费一区二区三区| www.亚洲人| 欧美一二三区精品| 亚洲免费伊人电影| 国内精品在线播放| 欧美另类高清zo欧美| 国产精品狼人久久影院观看方式| 丝袜诱惑制服诱惑色一区在线观看| 国产一区二区三区观看| 在线观看国产日韩| 中文字幕一区二区三区四区| 日韩黄色在线观看| 成人精品免费看| 精品国产一区二区三区av性色| 一区2区3区在线看| 国产激情一区二区三区四区| 欧美日韩精品一区二区三区蜜桃| 中文字幕精品综合| 日本强好片久久久久久aaa| 91天堂素人约啪| 久久久国际精品| 久久国产精品一区二区| 欧美久久一区二区| 亚洲一区二区三区视频在线播放 | 欧美色精品天天在线观看视频| 日韩美女主播在线视频一区二区三区| 亚洲免费观看高清完整| 成人一区二区三区| 亚洲精品一区二区三区影院| 日韩精品1区2区3区| 欧美无乱码久久久免费午夜一区 | 国产在线视视频有精品| 制服丝袜亚洲色图| 日韩精品免费视频人成| 在线观看日韩精品| 亚洲综合精品久久| 在线观看国产91| 亚洲最大的成人av| 欧美亚洲高清一区| 一区二区三区视频在线观看| 91色porny| 亚洲女同ⅹxx女同tv| 色悠久久久久综合欧美99| 亚洲欧美日韩久久| 欧美性videosxxxxx| 天天射综合影视| 日韩一区二区麻豆国产| 老司机精品视频导航| 久久精品亚洲国产奇米99| 国产精品亚洲第一区在线暖暖韩国| 久久天天做天天爱综合色| 国产精品88888| 国产精品福利在线播放| 色综合久久66| 五月天丁香久久| 精品少妇一区二区三区| 国产精品亚洲综合一区在线观看| 欧美国产日本韩| 欧美中文字幕亚洲一区二区va在线| 一区二区三区四区蜜桃| 69久久夜色精品国产69蝌蚪网| 日韩福利视频导航| 国产欧美一区二区三区沐欲| gogogo免费视频观看亚洲一| 亚洲精品视频在线观看网站| 在线成人午夜影院| 国产福利一区二区三区在线视频| 中文字幕一区二区三区四区不卡| 欧洲一区二区三区在线| 国产资源在线一区| 亚洲男同性恋视频| 精品乱码亚洲一区二区不卡| 99re在线精品| 久久99九九99精品| 亚洲欧洲www| 日韩欧美国产三级| 91丝袜美腿高跟国产极品老师| 日韩成人午夜电影| 最近中文字幕一区二区三区| 欧美精品亚洲二区| 91在线免费视频观看| 青青草国产精品亚洲专区无| 国产精品福利一区| 欧美成人精品二区三区99精品| 99精品黄色片免费大全| 久久aⅴ国产欧美74aaa| 玉足女爽爽91| 国产日本亚洲高清| 日韩欧美一区二区久久婷婷| bt7086福利一区国产| 激情综合网天天干| 日韩激情中文字幕| 亚洲一区视频在线观看视频| 国产蜜臀av在线一区二区三区| 欧美日韩电影在线| 91麻豆swag| 不卡的av在线播放| 国产成人高清在线| 国产一区二区三区四| 日本欧美在线看| 日本视频一区二区| 日精品一区二区三区| 亚洲午夜激情网页| 亚洲自拍偷拍九九九| 国产精品传媒在线| 国产精品欧美一区二区三区| 精品国产一区二区三区久久久蜜月| 欧美日韩日本视频| 欧美日韩的一区二区| 欧美最猛性xxxxx直播| 色噜噜夜夜夜综合网| 99久久久国产精品免费蜜臀| 国产大片一区二区| 成人一区二区三区中文字幕| 狠狠色丁香婷婷综合| 国产一区二区在线视频| 激情综合色播五月| 国产美女精品在线| 高清不卡在线观看av| 懂色av一区二区三区免费观看| 精品系列免费在线观看| 国产主播一区二区三区| 国产精品一级片| 成人免费观看男女羞羞视频| 成人黄色软件下载| 一本色道久久综合精品竹菊| 在线免费观看日本一区| 欧美日韩极品在线观看一区| 51精品秘密在线观看| 日韩欧美国产三级电影视频| 久久综合久色欧美综合狠狠| 久久久91精品国产一区二区三区| 欧美极品美女视频| 一区二区三区精品在线| 亚洲成人综合在线| 久久er99精品| 99热99精品| 欧美剧情电影在线观看完整版免费励志电影| 欧美另类高清zo欧美| 日韩免费高清电影| 国产色产综合产在线视频| 亚洲欧美日韩在线播放| 日韩一区精品字幕| 成人午夜看片网址| 91福利在线导航| 欧美mv日韩mv国产| 最近日韩中文字幕| 日韩va欧美va亚洲va久久| 国产盗摄精品一区二区三区在线 | 夜夜揉揉日日人人青青一国产精品| 亚洲线精品一区二区三区| 国产一区二区三区日韩| 91亚洲精品一区二区乱码| 91精品国产综合久久久久久久| 国产亚洲一区二区三区| 亚洲激情图片qvod| 国产一区二三区好的| 欧美午夜不卡在线观看免费| 久久久久久久久久美女| 一二三四社区欧美黄| 国产高清精品网站| 欧美人成免费网站| 亚洲欧洲性图库| 国产一区二区三区在线看麻豆| 欧美亚洲一区二区三区四区| 久久精品男人的天堂|