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

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

?? fixup.pas

?? 反匯編delphi的.dcu文件至匯編代碼的工具的所有源代碼, 用delphi/pascal實(shí)現(xiàn), 反向工程borland delphi寫的程序必備
?? PAS
字號(hào):
unit FixUp;
(*
The DCU Fixup information 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
  DCU_In;

const {Fixup type constants}
  fxAddr = 1;
  fxJmpAddr = 2;
  fxDataAddr = 3;

  fxStart20 = 3;
  fxEnd20 = 4;
  fxStart30 = 5;
  fxEnd30 = 6;
  fxStart70 = 6;
  fxEnd70 = 7;

  fxStartMSIL = $0B;
  fxEndMSIL = $0C;

  fxStart100 = $0C;
  fxEnd100 = $0D;

var
  fxStart: Byte = fxStart30;
  fxEnd: Byte = fxEnd30;

const
  FixOfsMask = $FFFFFF;

type

TByte4=array[0..3]of Byte;

PFixupRec = ^TFixupRec;
TFixupRec = record
  OfsF: integer;{Low 3 bytes - ofs, high 1 byte - B1}
  Ndx: TNDX;
end ;

PFixupTbl = ^TFixupTbl;
TFixupTbl = array[Word] of TFixupRec;

{Fixup variables and procedures used in the DAsmUtil and DCU32 units}
var
  CodeBase,CodeEnd: PChar;
  CodeStart, FixUpEnd: PChar;
  FixUnit: Pointer{TUnit};

procedure SetCodeRange(ACodeStart,ACodeBase: Pointer; ABlSz: Cardinal);
procedure SetFixupInfo(ACodeFixupCnt: integer; ACodeFixups: PFixupRec;
  AFixUnit: Pointer{TUnit});
procedure ClearFixupInfo;

type
  TFixupState = record
    FixCnt: integer;
    Fix: PFixupRec;
    FixEnd: Pointer;
    FixUnit: Pointer {TUnit};
  end ;

  TFixupMemState = record
    Fx: TFixupState;
    CodeBase,CodeEnd: PChar;
    CodeStart: PChar;
  end ;

procedure SaveFixupState(var S:TFixupState);
procedure RestoreFixupState(const S:TFixupState);

procedure SaveFixupMemState(var S:TFixupMemState);
procedure RestoreFixupMemState(const S:TFixupMemState);

procedure SkipFixups(Ofs: Cardinal);

function ChkNoFixupIn(CodePtr:PChar; Size: Cardinal): boolean;
function GetFixupFor(CodePtr:PChar; Size: Cardinal; StartOk: boolean;
  var Fix: PFixupRec): boolean;

function FixupOk(Fix: PFixupRec): boolean;
function ReportFixup(Fix: PFixupRec; Ofs: LongInt; UseHAl: boolean): boolean;

implementation

uses
  DCU_Out, DCU32, DCURecs;

var
  CodeFixupCnt: integer;
  CodeFixups: PFixupRec;

procedure SetCodeRange(ACodeStart,ACodeBase: Pointer; ABlSz: Cardinal);
begin
  ClearFixupInfo;
  CodeStart := ACodeStart;
  CodeBase := ACodeBase;
  CodeEnd := CodeBase+ABlSz;
  FixUpEnd := CodeBase;
end ;

procedure SetFixupInfo(ACodeFixupCnt: integer; ACodeFixups: PFixupRec;
  AFixUnit: Pointer{TUnit});
begin
  CodeFixupCnt := ACodeFixupCnt;
  CodeFixups := ACodeFixups;
  FixUnit := AFixUnit;
end ;

procedure ClearFixupInfo;
begin
  CodeFixupCnt := 0;
  CodeFixups := Nil;
  FixUnit := Nil;
end ;

procedure SaveFixupState(var S:TFixupState);
begin
  S.FixCnt := CodeFixupCnt;
  S.Fix := CodeFixups;
  S.FixEnd := FixUpEnd;
  S.FixUnit := FixUnit;
end ;

procedure RestoreFixupState(const S:TFixupState);
begin
  CodeFixupCnt := S.FixCnt;
  CodeFixups := S.Fix;
  FixUpEnd := S.FixEnd;
  FixUnit := S.FixUnit;
end ;

procedure SaveFixupMemState(var S:TFixupMemState);
begin
  SaveFixupState(S.Fx);
  S.CodeBase := CodeBase;
  S.CodeEnd := CodeEnd;
  S.CodeStart := CodeStart;
end ;

procedure RestoreFixupMemState(const S:TFixupMemState);
begin
  RestoreFixupState(S.Fx);
  CodeBase := S.CodeBase;
  CodeEnd := S.CodeEnd;
  CodeStart := S.CodeStart;
end ;

procedure SetFixEnd;
{Set FixUpEnd to the max(FixUpEnd,CodeFixups^.Ofs+4)
 if CodeFixups^.F is not fxStart or fxEnd}
var
  CurOfs: Cardinal;
  F: Byte;
  EP: PChar;
begin
  CurOfs := CodeFixups^.OfsF;
  F := TByte4(CurOfs)[3];
  CurOfs := CurOfs and FixOfsMask;
  if F<fxStart then begin
    EP := CodeStart+CurOfs+4;
    if EP>FixUpEnd then
      FixUpEnd := EP;
  end ;
end ;

procedure SkipFixups(Ofs: Cardinal);
{Move CodeFixups to the next fixup with Offset>=Ofs}
begin
  while CodeFixupCnt>0 do begin
    if (CodeFixups^.OfsF and FixOfsMask)>=Ofs then
      Break;
    SetFixEnd;
    Inc(CodeFixups);
    Dec(CodeFixupCnt);
  end ;
end ;

function CurFixup(Ofs: Cardinal): PFixupRec;
{If CodeFixups^ has the Offset=Ofs return it, else - Nil}
begin
  if (CodeFixupCnt>0)and((CodeFixups^.OfsF and FixOfsMask)=Ofs) then
    Result := CodeFixups
  else
    Result := Nil;
end ;

function NextFixup(Ofs: Cardinal): boolean;
{Move CodeFixups to the next fixup, Return true
 if the next fixup has the Offset<=Ofs}
begin
  Result := false;
  if CodeFixupCnt<=0 then
    Exit;
  SetFixEnd;
  Inc(CodeFixups);
  Dec(CodeFixupCnt);
  if CodeFixupCnt<=0 then
    Exit;
  if (CodeFixups^.OfsF and FixOfsMask)>Ofs then
    Exit;
  Result := true;
end ;

function ChkNoFixupIn(CodePtr:PChar; Size: Cardinal): boolean;
{Result: false - something wrong, true - Ok}
var
  Fx: PFixupRec;
  F: Byte;
  Ofs: Cardinal;
begin
  Result := false;
  if CodePtr+Size>CodeEnd then
    Exit {Memory block finished};
  Ofs := CodePtr-CodeStart;
  SkipFixups(Ofs+Size);
  if CodePtr<FixUpEnd then
    Exit {Code can't be inside FixUp};
  Result := true;
end ;

function GetFixupFor(CodePtr:PChar; Size: Cardinal; StartOk: boolean;
  var Fix: PFixupRec): boolean;
{Result: false - something wrong, true - Ok, but Fix may be Nil and may be not}
var
  Fx: PFixupRec;
  F: Byte;
  Ofs: Cardinal;
begin
  Result := false;
  Fix := Nil;
  if CodePtr+Size>CodeEnd then
    Exit {Memory block finished};
  Ofs := CodePtr-CodeStart;
  if Size=4 {All fixups are 4 byte} then begin
    SkipFixups(Ofs);
    if CodePtr<FixUpEnd then
      Exit {Can't intersect with some previous FixUp};
    repeat
      Fx := CurFixup(Ofs);
      if Fx=Nil then
        Break;
      F := TByte4(Fx^.OfsF)[3];
      if F<fxStart then begin
        if Fix<>Nil then
          Exit {Paranoic - can't happen, but i trust no one};
       {The difference between fxAddr and fxJmpAddr could also be taken into account}
        Fix := Fx;
       end
      else if not((F=fxStart)and StartOk) then
        Exit {Can't be inside a command};
    until not NextFixup(Ofs);
    FixUpEnd := CodePtr {Dummy - for the next test};
  end ;
  SkipFixups(Ofs+Size);
  if CodePtr<FixUpEnd then
    Exit {Immed data can't intersect [another] FixUp};
  Result := true;
end ;

function FixupOk(Fix: PFixupRec): boolean;
begin
  Result := (Fix<>Nil)and(FixUnit<>Nil);
end ;

function ReportFixup(Fix: PFixupRec; Ofs: LongInt; UseHAl: boolean): boolean;
var
  U: TUnit;
  D: TDCURec;
  hDT: integer;
  DP: Pointer;
  Sz: Cardinal;
  L: integer;
begin
  Result := false;
  if (Fix=Nil)or(FixUnit=Nil) then
    Exit;
  Inc(AuxLevel);
  PutSFmt('K%x ',[TByte4(Fix^.OfsF)[3]]);
  Dec(AuxLevel);
 // if Ofs<>0 then begin
    D := TUnit(FixUnit).GetGlobalAddrDef(Fix^.NDX,U);
    hDT := -1;
    L := -1;
    if D<>Nil then begin
      if D is TVarDecl then
        hDT := TVarDecl(D).hDT
      else if UseHAl and(Ofs>0{0 Ofs usually means just call})and(D is TProcDecl) then begin
        DP := TUnit(FixUnit).GetBlockMem(TProcDecl(D).CodeOfs,TProcDecl(D).Sz,Sz);
        if (DP<>Nil)and(Ofs<=Sz) then begin
          if Ofs>=8 then
            L := ShowStrConst(PChar(DP)+Ofs-8,Sz-Ofs+8);
          if L<0 then
            L := TryShowPCharConst(PChar(DP)+Ofs,Sz-Ofs);
        end ;
      end ;
    end ;
    if L>0 then
      PutS(' {');
    PutS(TUnit(FixUnit).GetAddrStr(Fix^.NDX,true{ShowNDX}));
    {D := TUnit(FixUnit).GetAddrDef(Fix^.NDX);
    PutS(GetDCURecStr(D,Fix^.NDX,true));}
    PutS(U.GetOfsQualifier(hDT,Ofs));
    if L>0 then
      PutS('}');
 // end ;
  Result := true;
end ;

end.

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人午夜视频| 亚洲高清视频在线| 成人一道本在线| 中文无字幕一区二区三区| 国产乱码精品一品二品| 中文字幕国产一区二区| 99麻豆久久久国产精品免费优播| 自拍偷拍亚洲综合| 欧美亚洲综合色| 天天色图综合网| 日韩免费高清av| 大桥未久av一区二区三区中文| 中文成人综合网| 欧洲精品在线观看| 日本成人在线一区| 国产精品无人区| 欧日韩精品视频| 麻豆视频观看网址久久| 中文字幕巨乱亚洲| 精品视频1区2区| 国产久卡久卡久卡久卡视频精品| 国产精品二三区| 欧美一区二区在线看| 成人丝袜18视频在线观看| 亚洲午夜久久久| 久久天天做天天爱综合色| av不卡一区二区三区| 婷婷六月综合网| 国产精品视频第一区| 欧美日韩久久久一区| 国产一区在线观看麻豆| 夜夜嗨av一区二区三区| 久久奇米777| 欧美性大战久久久久久久蜜臀| 久久不见久久见免费视频1| 亚洲人成伊人成综合网小说| 欧美成人bangbros| 色婷婷国产精品| 国产精品一区一区三区| 香蕉av福利精品导航| 中文一区二区完整视频在线观看| 4438x成人网最大色成网站| 粉嫩一区二区三区性色av| 视频一区二区不卡| 亚洲精品日日夜夜| 欧美国产日韩一二三区| 日韩欧美aaaaaa| 欧美三级中文字幕在线观看| 成人黄色片在线观看| 精品一区二区在线播放| 五月天一区二区三区| 中文字幕亚洲区| 国产午夜久久久久| 欧美xfplay| 日韩欧美亚洲国产另类| 欧美在线小视频| 91丝袜美女网| 国产91清纯白嫩初高中在线观看| 看片网站欧美日韩| 欧美aaaaaa午夜精品| 亚洲高清一区二区三区| 夜夜精品视频一区二区| 亚洲素人一区二区| 中文字幕欧美一区| 国产精品每日更新在线播放网址| 久久久美女艺术照精彩视频福利播放| 91精品国产品国语在线不卡| 欧美日韩一本到| 欧美性一区二区| 欧美在线免费观看亚洲| 在线这里只有精品| 一本色道综合亚洲| 色婷婷综合久色| 色网站国产精品| 色8久久精品久久久久久蜜| 色欧美乱欧美15图片| 一本色道久久综合亚洲aⅴ蜜桃| 成人免费高清视频| 99国产欧美另类久久久精品| a亚洲天堂av| 91视频在线观看| 欧美专区日韩专区| 欧美视频一二三区| 欧美一区二区私人影院日本| 日韩欧美一二三区| 亚洲精品一线二线三线无人区| 精品理论电影在线观看| 国产日韩影视精品| 国产精品国产三级国产aⅴ中文| 中文字幕五月欧美| 亚洲精品日日夜夜| 日本在线不卡视频| 精品亚洲成a人在线观看| 国产黄色精品视频| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 亚洲乱码中文字幕| 亚洲国产精品精华液网站| 三级久久三级久久久| 极品少妇xxxx精品少妇| 国产不卡一区视频| 91麻豆免费观看| 91精品在线麻豆| 久久色.com| 亚洲视频狠狠干| 舔着乳尖日韩一区| 国产精品亚洲人在线观看| 成人18精品视频| 欧美日韩免费一区二区三区视频| 5566中文字幕一区二区电影| 久久久久久久久99精品| 亚洲精品一二三| 美腿丝袜一区二区三区| 大尺度一区二区| 欧美伦理电影网| 国产午夜精品美女毛片视频| 亚洲猫色日本管| 蜜桃av一区二区三区电影| 成人白浆超碰人人人人| 欧美日韩免费一区二区三区 | 久久男人中文字幕资源站| 亚洲婷婷在线视频| 另类欧美日韩国产在线| caoporn国产精品| 日韩欧美aaaaaa| 亚洲伦理在线免费看| 国内精品免费**视频| 欧美自拍偷拍午夜视频| 国产日产欧产精品推荐色| 亚洲777理论| jlzzjlzz亚洲女人18| 日韩欧美一二三四区| 一区二区三区av电影| 国产91精品一区二区麻豆网站| 制服视频三区第一页精品| 亚洲欧美日韩国产一区二区三区| 蜜臀久久久久久久| 在线影院国内精品| 欧美极品xxx| 久久爱另类一区二区小说| 欧美性欧美巨大黑白大战| 国产精品色哟哟网站| 蜜臀久久99精品久久久久宅男| 91久久精品一区二区三| 国产精品五月天| 国产一区二区精品久久99| 91精品国产高清一区二区三区 | 国产乱子轮精品视频| 欧美精品一级二级三级| 中文字幕综合网| 国产成人a级片| 精品国产精品一区二区夜夜嗨| 亚洲国产aⅴ成人精品无吗| 91亚洲资源网| 国产精品久久久久久亚洲伦| 国内精品免费在线观看| 日韩一区二区三区高清免费看看| 亚洲成人动漫一区| 欧美性xxxxxx少妇| 一区二区三区成人| 97成人超碰视| 国产精品国产a| 丁香天五香天堂综合| 国产婷婷色一区二区三区在线| 麻豆91精品91久久久的内涵| 制服丝袜av成人在线看| 秋霞国产午夜精品免费视频| 欧美福利电影网| 另类小说视频一区二区| 欧美videofree性高清杂交| 精品在线一区二区三区| 欧美精品一区二区三区四区| 麻豆91小视频| 国产人伦精品一区二区| 国产成人免费av在线| 中文字幕欧美激情| 99re热这里只有精品免费视频 | 亚洲综合成人在线| 欧美三级韩国三级日本三斤| 亚洲国产日韩综合久久精品| 欧美日韩免费在线视频| 日韩av在线播放中文字幕| 3d动漫精品啪啪1区2区免费| 另类小说综合欧美亚洲| www国产成人免费观看视频 深夜成人网| 蜜臀91精品一区二区三区| 亚洲精品一区二区三区福利| 国产精品2024| 亚洲欧美日韩国产手机在线| 欧美视频在线观看一区二区| 青青草原综合久久大伊人精品优势 | 蜜臀精品久久久久久蜜臀| 精品国产伦一区二区三区观看方式| 国产一区二区视频在线| 国产精品福利在线播放| 欧美视频你懂的| 久久不见久久见中文字幕免费| 国产女人水真多18毛片18精品视频| 成人激情免费视频| 亚洲一区二区高清| 日韩视频在线观看一区二区|