⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 op.pas

📁 反汇编delphi的.dcu文件至汇编代码的工具的所有源代码, 用delphi/pascal实现, 反向工程borland delphi写的程序必备
💻 PAS
📖 第 1 页 / 共 3 页
字号:
unit op;
{ Generated automatically from D:\PROLOG\CODES\Opdata2.cmd, 27.10.2002 21:57:36 }

interface

uses DAsmDefs, DAsmUtil;

const
  hnQ = $0 or nf;
  hnRET = $1 or nf;
  hnJMP = $2 or nf;
  hnJ_ = $3 or nf;
  hnLOOP = $4 or nf;
  hnLOOPE = $5 or nf;
  hnLOOPNE = $6 or nf;
  hnJCXZ = $7 or nf;
  hnCALL = $8 or nf;
  hnAL = $9 or nf;
  hnCL = $A or nf;
  hnDL = $B or nf;
  hnBL = $C or nf;
  hnAH = $D or nf;
  hnCH = $E or nf;
  hnDH = $F or nf;
  hnBH = $10 or nf;
  hnAX = $11 or nf;
  hnCX = $12 or nf;
  hnDX = $13 or nf;
  hnBX = $14 or nf;
  hnSP = $15 or nf;
  hnBP = $16 or nf;
  hnSI = $17 or nf;
  hnDI = $18 or nf;
  hnEAX = $19 or nf;
  hnECX = $1A or nf;
  hnEDX = $1B or nf;
  hnEBX = $1C or nf;
  hnESP = $1D or nf;
  hnEBP = $1E or nf;
  hnESI = $1F or nf;
  hnEDI = $20 or nf;
  hnO = $21 or nf;
  hnNO = $22 or nf;
  hnB = $23 or nf;
  hnNB = $24 or nf;
  hnE = $25 or nf;
  hnNE = $26 or nf;
  hnBE = $27 or nf;
  hnA = $28 or nf;
  hnS = $29 or nf;
  hnNS = $2A or nf;
  hnP = $2B or nf;
  hnNP = $2C or nf;
  hnL = $2D or nf;
  hnGE = $2E or nf;
  hnLE = $2F or nf;
  hnG = $30 or nf;
  hnADD = $31 or nf;
  hnOR = $32 or nf;
  hnADC = $33 or nf;
  hnSBB = $34 or nf;
  hnAND = $35 or nf;
  hnSUB = $36 or nf;
  hnXOR = $37 or nf;
  hnCMP = $38 or nf;
  hnDAA = $39 or nf;
  hnDAS = $3A or nf;
  hnAAA = $3B or nf;
  hnAAS = $3C or nf;
  hnINC = $3D or nf;
  hnDEC = $3E or nf;
  hnPUSH = $3F or nf;
  hnPOP = $40 or nf;
  hnMOVSB = $41 or nf;
  hnMOVSW = $42 or nf;
  hnCMPSB = $43 or nf;
  hnCMPSW = $44 or nf;
  hnSTOSB = $45 or nf;
  hnSTOSW = $46 or nf;
  hnLODSB = $47 or nf;
  hnLODSW = $48 or nf;
  hnSCASB = $49 or nf;
  hnSCASW = $4A or nf;
  hnROL = $4B or nf;
  hnROR = $4C or nf;
  hnRCL = $4D or nf;
  hnRCR = $4E or nf;
  hnSHL = $4F or nf;
  hnSHR = $50 or nf;
  hnRAR = $51 or nf;
  hnBT = $52 or nf;
  hnBTS = $53 or nf;
  hnBTR = $54 or nf;
  hnBTC = $55 or nf;
  hnES = $56 or nf;
  hnCS = $57 or nf;
  hnSS = $58 or nf;
  hnDS = $59 or nf;
  hnFS = $5A or nf;
  hnGS = $5B or nf;
  hnNEAR = $5C or nf;
  hnFAR = $5D or nf;
  hnTEST = $5E or nf;
  hnNOT = $5F or nf;
  hnNEG = $60 or nf;
  hnMUL = $61 or nf;
  hnIMUL = $62 or nf;
  hnDIV = $63 or nf;
  hnIDIV = $64 or nf;
  hnSLDT = $65 or nf;
  hnSTR = $66 or nf;
  hnLLDT = $67 or nf;
  hnLTR = $68 or nf;
  hnVERR = $69 or nf;
  hnVERW = $6A or nf;
  hnSGDT = $6B or nf;
  hnSIDT = $6C or nf;
  hnLGDT = $6D or nf;
  hnLIDT = $6E or nf;
  hnSMSW = $6F or nf;
  hnLMSW = $70 or nf;
  hnINVLPG = $71 or nf;
  hnCR0 = $72 or nf;
  hnCR2 = $73 or nf;
  hnCR3 = $74 or nf;
  hnDR0 = $75 or nf;
  hnDR1 = $76 or nf;
  hnDR2 = $77 or nf;
  hnDR3 = $78 or nf;
  hnDR6 = $79 or nf;
  hnDR7 = $7A or nf;
  hnTR3 = $7B or nf;
  hnTR4 = $7C or nf;
  hnTR5 = $7D or nf;
  hnTR6 = $7E or nf;
  hnTR7 = $7F or nf;
  hnLAR = $80 or nf;
  hnLSL = $81 or nf;
  hnLOADALL = $82 or nf;
  hnCLTS = $83 or nf;
  hnINVD = $84 or nf;
  hnWBINVD = $85 or nf;
  hnILLEGAL = $86 or nf;
  hnMOV = $87 or nf;
  hnWRMSR = $88 or nf;
  hnRDTSC = $89 or nf;
  hnRDMSR = $8A or nf;
  hnRDPMC = $8B or nf;
  hnCMOV_ = $8C or nf;
  hnSET_ = $8D or nf;
  hnCPUID = $8E or nf;
  hnSHLD = $8F or nf;
  hnCMPXCHG = $90 or nf;
  hnRSM = $91 or nf;
  hnSHRD = $92 or nf;
  hnLSS = $93 or nf;
  hnLFS = $94 or nf;
  hnLGS = $95 or nf;
  hnMOVZX = $96 or nf;
  hnILLEG1 = $97 or nf;
  hnBSF = $98 or nf;
  hnBSR = $99 or nf;
  hnMOVSX = $9A or nf;
  hnXADD = $9B or nf;
  hnBSWAP = $9C or nf;
  hnST = $9D or nf;
  hnST1 = $9E or nf;
  hnST2 = $9F or nf;
  hnST3 = $A0 or nf;
  hnST4 = $A1 or nf;
  hnST5 = $A2 or nf;
  hnST6 = $A3 or nf;
  hnST7 = $A4 or nf;
  hnCOM = $A5 or nf;
  hnCOMP = $A6 or nf;
  hnSUBR = $A7 or nf;
  hnDIVR = $A8 or nf;
  hnLD = $A9 or nf;
  hnSTP = $AA or nf;
  hnFLDENV = $AB or nf;
  hnFLDCW = $AC or nf;
  hnFSTENV = $AD or nf;
  hnFSTCW = $AE or nf;
  hnFLD = $AF or nf;
  hnFXCH = $B0 or nf;
  hnFNOP = $B1 or nf;
  hnFSTP = $B2 or nf;
  hnFCHS = $B3 or nf;
  hnFABS = $B4 or nf;
  hnFTST = $B5 or nf;
  hnFXAM = $B6 or nf;
  hnFLD1 = $B7 or nf;
  hnFLDL2T = $B8 or nf;
  hnFLDL2E = $B9 or nf;
  hnFLDPI = $BA or nf;
  hnFLDLG2 = $BB or nf;
  hnFLDLN2 = $BC or nf;
  hnFLDZ = $BD or nf;
  hnF2XM1 = $BE or nf;
  hnFYL2X = $BF or nf;
  hnFPTAN = $C0 or nf;
  hnFPATAN = $C1 or nf;
  hnFXTRACT = $C2 or nf;
  hnFPREM = $C3 or nf;
  hnFDECSTP = $C4 or nf;
  hnFINCSTP = $C5 or nf;
  hnFYL2XP1 = $C6 or nf;
  hnFSQRT = $C7 or nf;
  hnFSINCOS = $C8 or nf;
  hnFRNDINT = $C9 or nf;
  hnFSCALE = $CA or nf;
  hnFSIN = $CB or nf;
  hnFCOS = $CC or nf;
  hnFST = $CD or nf;
  hnFENI = $CE or nf;
  hnFDISI = $CF or nf;
  hnFCLEX = $D0 or nf;
  hnFINIT = $D1 or nf;
  hnFSETPM = $D2 or nf;
  hnFSTOR = $D3 or nf;
  hnFSAVE = $D4 or nf;
  hnFSTSW = $D5 or nf;
  hnFFREE = $D6 or nf;
  hnFUCOM = $D7 or nf;
  hnFUCOMP = $D8 or nf;
  hnFBLD = $D9 or nf;
  hnFILD = $DA or nf;
  hnFBSTP = $DB or nf;
  hnFISTP = $DC or nf;
  hnU = $DD or nf;
  hnF = $DE or nf;
  hnFI = $DF or nf;
  hnFCMOV_ = $E0 or nf;
  hnFUCOMPP = $E1 or nf;
  hnFCMOVN_ = $E2 or nf;
  hnFUCOMI = $E3 or nf;
  hnFCOMI = $E4 or nf;
  hnFUCOMIP = $E5 or nf;
  hnFCOMIP = $E6 or nf;
  hnFWAIT = $E7 or nf;
  hnPUSHA = $E8 or nf;
  hnPOPA = $E9 or nf;
  hnBOUND = $EA or nf;
  hnARPL = $EB or nf;
  hnINSB = $EC or nf;
  hnINSW = $ED or nf;
  hnOUTSB = $EE or nf;
  hnOUTSW = $EF or nf;
  hnXCHG = $F0 or nf;
  hnLEA = $F1 or nf;
  hnNOP = $F2 or nf;
  hnCBW = $F3 or nf;
  hnCWD = $F4 or nf;
  hnWAIT = $F5 or nf;
  hnPUSHF = $F6 or nf;
  hnPOPF = $F7 or nf;
  hnSAHF = $F8 or nf;
  hnLAHF = $F9 or nf;
  hnLES = $FA or nf;
  hnLDS = $FB or nf;
  hnENTER = $FC or nf;
  hnLEAVE = $FD or nf;
  hnINT = $FE or nf;
  hnINTO = $FF or nf;
  hnIRET = $100 or nf;
  hnAAM = $101 or nf;
  hnAAD = $102 or nf;
  hnXLAT = $103 or nf;
  hnESC = $104 or nf;
  hnIN = $105 or nf;
  hnOUT = $106 or nf;
  hnLOCK = $107 or nf;
  hnREPNE = $108 or nf;
  hnREPE = $109 or nf;
  hnHALT = $10A or nf;
  hnCMC = $10B or nf;
  hnCLC = $10C or nf;
  hnSTC = $10D or nf;
  hnCLI = $10E or nf;
  hnSTI = $10F or nf;
  hnCLD = $110 or nf;
  hnSTD = $111 or nf;

function GetOpName(hName: THBMName):TBMOpRec;

const
  ntRegB: array[0..8-1]of THBMName = (
    hnAL, hnCL, hnDL, hnBL, hnAH, hnCH, hnDH, hnBH
  );

const
  ntReg16: array[0..8-1]of THBMName = (
    hnAX, hnCX, hnDX, hnBX, hnSP, hnBP, hnSI, hnDI
  );

const
  ntReg32: array[0..8-1]of THBMName = (
    hnEAX, hnECX, hnEDX, hnEBX, hnESP, hnEBP, hnESI, hnEDI
  );

function readOP: boolean;

implementation

const
  BMNames: array[0..274-1] of TBMOpRec = (
    {0x0}'?','RET','JMP','J_','LOOP','LOOPE','LOOPNE','JCXZ',
    {0x8}'CALL','AL','CL','DL','BL','AH','CH','DH',
    {0x10}'BH','AX','CX','DX','BX','SP','BP','SI',
    {0x18}'DI','EAX','ECX','EDX','EBX','ESP','EBP','ESI',
    {0x20}'EDI','O','NO','B','NB','E','NE','BE',
    {0x28}'A','S','NS','P','NP','L','GE','LE',
    {0x30}'G','ADD','OR','ADC','SBB','AND','SUB','XOR',
    {0x38}'CMP','DAA','DAS','AAA','AAS','INC','DEC','PUSH',
    {0x40}'POP','MOVSB','MOVSW','CMPSB','CMPSW','STOSB','STOSW','LODSB',
    {0x48}'LODSW','SCASB','SCASW','ROL','ROR','RCL','RCR','SHL',
    {0x50}'SHR','RAR','BT','BTS','BTR','BTC','ES','CS',
    {0x58}'SS','DS','FS','GS','NEAR','FAR','TEST','NOT',
    {0x60}'NEG','MUL','IMUL','DIV','IDIV','SLDT','STR','LLDT',
    {0x68}'LTR','VERR','VERW','SGDT','SIDT','LGDT','LIDT','SMSW',
    {0x70}'LMSW','INVLPG','CR0','CR2','CR3','DR0','DR1','DR2',
    {0x78}'DR3','DR6','DR7','TR3','TR4','TR5','TR6','TR7',
    {0x80}'LAR','LSL','LOADALL','CLTS','INVD','WBINVD','ILLEGAL','MOV',
    {0x88}'WRMSR','RDTSC','RDMSR','RDPMC','CMOV_','SET_','CPUID','SHLD',
    {0x90}'CMPXCHG','RSM','SHRD','LSS','LFS','LGS','MOVZX','ILLEG1',
    {0x98}'BSF','BSR','MOVSX','XADD','BSWAP','ST','ST1','ST2',
    {0xA0}'ST3','ST4','ST5','ST6','ST7','COM','COMP','SUBR',
    {0xA8}'DIVR','LD','STP','FLDENV','FLDCW','FSTENV','FSTCW','FLD',
    {0xB0}'FXCH','FNOP','FSTP','FCHS','FABS','FTST','FXAM','FLD1',
    {0xB8}'FLDL2T','FLDL2E','FLDPI','FLDLG2','FLDLN2','FLDZ','F2XM1','FYL2X',
    {0xC0}'FPTAN','FPATAN','FXTRACT','FPREM','FDECSTP','FINCSTP','FYL2XP1','FSQRT',
    {0xC8}'FSINCOS','FRNDINT','FSCALE','FSIN','FCOS','FST','FENI','FDISI',
    {0xD0}'FCLEX','FINIT','FSETPM','FSTOR','FSAVE','FSTSW','FFREE','FUCOM',
    {0xD8}'FUCOMP','FBLD','FILD','FBSTP','FISTP','U','F','FI',
    {0xE0}'FCMOV_','FUCOMPP','FCMOVN_','FUCOMI','FCOMI','FUCOMIP','FCOMIP','FWAIT',
    {0xE8}'PUSHA','POPA','BOUND','ARPL','INSB','INSW','OUTSB','OUTSW',
    {0xF0}'XCHG','LEA','NOP','CBW','CWD','WAIT','PUSHF','POPF',
    {0xF8}'SAHF','LAHF','LES','LDS','ENTER','LEAVE','INT','INTO',
    {0x100}'IRET','AAM','AAD','XLAT','ESC','IN','OUT','LOCK',
    {0x108}'REPNE','REPE','HALT','CMC','CLC','STC','CLI','STI',
    {0x110}'CLD','STD'
  );

function GetOpName(hName: THBMName):TBMOpRec;
begin
  hName := hName and nm;
  if (hName<0)or(hName>High(BMNames)) then
    Result := ''
  else
    Result := BMNames[hName];
end ;

function RegW(R: integer; var RN: integer): boolean;
var
  OS: integer;
begin
  Result := false;
  OS := getOS;
  case OS of
    $0: RN := ntReg16[R];
    $1: RN := ntReg32[R];
    else Exit;
  end;
  Result := true;
end ;

function Reg(W,R: integer; var RN: integer): boolean;
begin
  Result := false;
  case W of
    $0: RN := ntRegB[R];
    $1: if not RegW(R,RN) then Exit;
    else Exit;
  end;
  Result := true;
end ;

function JmpOfsW: boolean;
begin
  Result := false;
  if not jmpOfs(1+getOS) then Exit;
  Result := true;
end ;

const
  ntJmpCond: array[0..16-1]of THBMName = (
    hnO, hnNO, hnB, hnNB, hnE, hnNE, hnBE, hnA, hnS, hnNS, hnP, hnNP, hnL, hnGE, hnLE, hnG
  );

const
  ntArOp: array[0..8-1]of THBMName = (
    hnADD, hnOR, hnADC, hnSBB, hnAND, hnSUB, hnXOR, hnCMP
  );

const
  ntDecArOp: array[0..4-1]of THBMName = (
    hnDAA, hnDAS, hnAAA, hnAAS
  );

const
  ntIDPPS: array[0..4-1]of THBMName = (
    hnINC, hnDEC, hnPUSH, hnPOP
  );

const
  ntStrOp1: array[0..4-1]of THBMName = (
    hnMOVSB, hnMOVSW, hnCMPSB, hnCMPSW
  );

const
  ntStrOp2: array[0..8-1]of THBMName = (
    hnQ, hnQ, hnSTOSB, hnSTOSW, hnLODSB, hnLODSW, hnSCASB, hnSCASW
  );

const
  ntShftOp: array[0..8-1]of THBMName = (
    hnROL, hnROR, hnRCL, hnRCR, hnSHL, hnSHR, hnQ, hnRAR
  );

const
  ntBtOp: array[0..8-1]of THBMName = (
    hnQ, hnQ, hnQ, hnQ, hnBT, hnBTS, hnBTR, hnBTC
  );

const
  ntSReg: array[0..8-1]of THBMName = (
    hnES, hnCS, hnSS, hnDS, hnFS, hnGS, hnQ, hnQ
  );

const
  ntcallDist: array[0..2-1]of THBMName = (
    hnNEAR, hnFAR
  );

const
  ntLoopS: array[0..4-1]of THBMName = (
    hnLOOPNE, hnLOOPE, hnLOOP, hnJCXZ
  );

const
  ntGr1Op: array[0..8-1]of THBMName = (
    hnTEST, hnQ, hnNOT, hnNEG, hnMUL, hnIMUL, hnDIV, hnIDIV
  );

const
  ntGr2Op: array[0..4-1]of THBMName = (
    hnQ, hnCALL, hnJMP, hnQ
  );

const
  ntGr3Op: array[0..2-1]of THBMName = (
    hnINC, hnDEC
  );

const
  ntGr6Op: array[0..8-1]of THBMName = (
    hnSLDT, hnSTR, hnLLDT, hnLTR, hnVERR, hnVERW, hnQ, hnQ
  );

const
  ntGr7Op: array[0..8-1]of THBMName = (
    hnSGDT, hnSIDT, hnLGDT, hnLIDT, hnSMSW, hnQ, hnLMSW, hnINVLPG
  );

const
  ntCReg: array[0..8-1]of THBMName = (
    hnCR0, hnQ, hnCR2, hnCR3, hnQ, hnQ, hnQ, hnQ
  );

const
  ntDReg: array[0..8-1]of THBMName = (
    hnDR0, hnDR1, hnDR2, hnDR3, hnQ, hnQ, hnDR6, hnDR7
  );

const
  ntTReg: array[0..8-1]of THBMName = (
    hnQ, hnQ, hnQ, hnTR3, hnTR4, hnTR5, hnTR6, hnTR7
  );

function getEAV(W: integer; var M,A: integer): boolean;
begin
  Result := false;
  case W and $1 of
    $0: ;
    else W := 1+getOS;
  end;
  if not getEA(W,M,A) then Exit;
  Result := true;
end ;

function readEA(W: integer; var M: integer): boolean;
var
  A: integer;
begin
  Result := false;
  if not getEAV(W,M,A) then Exit;
  SetCmdArg(A);
  Result := true;
end ;

function imW(W: integer): boolean;
begin
  Result := false;
  case W and $1 of
    $0: if not ImmedBW(0) then Exit;
    else if not ImmedBW(1+getOS) then Exit;
  end;
  Result := true;
end ;

function imSignExt(S,W: integer): boolean;
begin
  Result := false;
  case S of
    $0: if not imW(W) then Exit;
    $1: if not imInt(0) then Exit;
    else Exit;
  end;
  Result := true;
end ;

function xchgArg(D,A1,A2: integer): boolean;
begin
  Result := false;
  case D of
    $0: begin
        SetCmdArg(A1);
        SetCmdArg(A2);
      end;
    $1: begin
        SetCmdArg(A2);
        SetCmdArg(A1);
      end;
    else Exit;
  end;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -