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

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

?? disasm.c

?? 反匯編disasm的源代碼 反匯編disasm的源代碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
        da->adrconst=addr;
        if (addr==0) da->zeroconst=1;
        seg=addr16[c & 0x07].defseg;
        Memadr(seg,addr16[c & 0x07].descr,addr,dsize);
      };
    };
  }
  // Next possibility: immediate 32-bit address.
  else if (c==0x05) {                  // Special case of immediate address
    dispsize=4;
    if (size<6)
      da->error=DAE_CROSS;             // Disp32 outside the memory block
    else if (mode>=DISASM_DATA) {
      da->adrconst=addr=*(ulong *)(cmd+2);
      if (pfixup==NULL) pfixup=cmd+2;
      da->fixupsize+=4;
      if (addr==0) da->zeroconst=1;
      seg=SEG_DS;
      Memadr(seg,"",addr,dsize);
    }; }
  // Next possibility: 32-bit address with SIB byte.
  else if ((c & 0x07)==0x04) {         // SIB addresation
    sib=cmd[2]; hassib=1;
    *s='\0';
    if (c==0x04 && (sib & 0x07)==0x05) {
      dispsize=4;                      // Immediate address without base
      if (size<7)
        da->error=DAE_CROSS;           // Disp32 outside the memory block
      else {
        da->adrconst=addr=*(ulong *)(cmd+3);
        if (pfixup==NULL) pfixup=cmd+3;
        da->fixupsize+=4;
        if (addr==0) da->zeroconst=1;
        if ((sib & 0x38)!=0x20) {      // Index register present
          da->indexed=1;
          if (type==MRJ) da->jmptable=addr; };
        seg=SEG_DS;
      }; }
    else {                             // Base and, eventually, displacement
      if ((c & 0xC0)==0x40) {          // 8-bit displacement
        dispsize=1;
        if (size<4) da->error=DAE_CROSS;
        else {
          da->adrconst=addr=(signed char)cmd[3];
          if (addr==0) da->zeroconst=1;
        }; }
      else if ((c & 0xC0)==0x80) {     // 32-bit displacement
        dispsize=4;
        if (size<7)
          da->error=DAE_CROSS;         // Disp32 outside the memory block
        else {
          da->adrconst=addr=*(ulong *)(cmd+3);
          if (pfixup==NULL) pfixup=cmd+3;
          da->fixupsize+=4;
          if (addr==0) da->zeroconst=1;
          // Most compilers use address of type [index*4+displacement] to
          // address jump table (switch). But, for completeness, I allow all
          // cases which include index with scale 1 or 4, base or both.
          if (type==MRJ) da->jmptable=addr;
        }; };
      da->indexed=1;
      j=sib & 0x07;
      if (mode>=DISASM_FILE) {
        strcpy(s,regname[2][j]);
        seg=addr32[j].defseg;
      };
    };
    if ((sib & 0x38)!=0x20) {          // Scaled index present
      if ((sib & 0xC0)==0x40) da->indexed=2;
      else if ((sib & 0xC0)==0x80) da->indexed=4;
      else if ((sib & 0xC0)==0xC0) da->indexed=8;
      else da->indexed=1;
    };
    if (mode>=DISASM_FILE && da->error==DAE_NOERR) {
      if ((sib & 0x38)!=0x20) {        // Scaled index present
        if (*s!='\0') strcat(s,"+");
        strcat(s,addr32[(sib>>3) & 0x07].descr);
        if ((sib & 0xC0)==0x40) {
          da->jmptable=0;              // Hardly a switch!
          strcat(s,"*2"); }
        else if ((sib & 0xC0)==0x80)
          strcat(s,"*4");
        else if ((sib & 0xC0)==0xC0) {
          da->jmptable=0;              // Hardly a switch!
          strcat(s,"*8");
        };
      };
      Memadr(seg,s,addr,dsize);
    };
  }
  // Last possibility: 32-bit address without SIB byte.
  else {                               // No SIB
    if ((c & 0xC0)==0x40) {
      dispsize=1;
      if (size<3) da->error=DAE_CROSS; // Disp8 outside the memory block
      else {
        da->adrconst=addr=(signed char)cmd[2];
        if (addr==0) da->zeroconst=1;
      }; }
    else if ((c & 0xC0)==0x80) {
      dispsize=4;
      if (size<6)
        da->error=DAE_CROSS;           // Disp32 outside the memory block
      else {
        da->adrconst=addr=*(ulong *)(cmd+2);
        if (pfixup==NULL) pfixup=cmd+2;
        da->fixupsize+=4;
        if (addr==0) da->zeroconst=1;
        if (type==MRJ) da->jmptable=addr;
      };
    };
    da->indexed=1;
    if (mode>=DISASM_FILE && da->error==DAE_NOERR) {
      seg=addr32[c & 0x07].defseg;
      Memadr(seg,addr32[c & 0x07].descr,addr,dsize);
    };
  };
};

// Disassemble implicit source of string operations and, if available, dump
// address and contents.
static void DecodeSO(void) {
  if (mode<DISASM_FILE) return;        // No need to decode
  if (datasize==1) da->memtype=DEC_BYTE;
  else if (datasize==2) da->memtype=DEC_WORD;
  else if (datasize==4) da->memtype=DEC_DWORD;
  da->indexed=1;
  Memadr(SEG_DS,regname[addrsize==2?1:2][REG_ESI],0L,datasize);
};

// Disassemble implicit destination of string operations and, if available,
// dump address and contents. Destination always uses segment ES, and this
// setting cannot be overridden.
static void DecodeDE(void) {
  int seg;
  if (mode<DISASM_FILE) return;        // No need to decode
  if (datasize==1) da->memtype=DEC_BYTE;
  else if (datasize==2) da->memtype=DEC_WORD;
  else if (datasize==4) da->memtype=DEC_DWORD;
  da->indexed=1;
  seg=segprefix; segprefix=SEG_ES;     // Fake Memadr by changing segment prefix
  Memadr(SEG_DS,regname[addrsize==2?1:2][REG_EDI],0L,datasize);
  segprefix=seg;                       // Restore segment prefix
};

// Decode XLAT operand and, if available, dump address and contents.
static void DecodeXL(void) {
  if (mode<DISASM_FILE) return;        // No need to decode
  da->memtype=DEC_BYTE;
  da->indexed=1;
  Memadr(SEG_DS,(addrsize==2?"BX+AL":"EBX+AL"),0L,1);
};

// Decode immediate operand of size constsize. If sxt is non-zero, byte operand
// should be sign-extended to sxt bytes. If type of immediate constant assumes
// this, small negative operands may be displayed as signed negative numbers.
// Note that in most cases immediate operands are not shown in comment window.
static void DecodeIM(int constsize,int sxt,int type) {
  int i;
  signed long data;
  ulong l;
  char name[TEXTLEN],comment[TEXTLEN];
  immsize+=constsize;                    // Allows several immediate operands
  if (mode<DISASM_DATA) return;
  l=1+hasrm+hassib+dispsize+(immsize-constsize);
  data=0;
  if (size<l+constsize)
    da->error=DAE_CROSS;
  else if (constsize==1) {
    if (sxt==0) data=(uchar)cmd[l];
    else data=(signed char)cmd[l];
    if (type==IMS && ((data & 0xE0)!=0 || data==0)) {
      da->warnings|=DAW_SHIFT;
      da->cmdtype|=C_RARE;
    }; }
  else if (constsize==2) {
    if (sxt==0) data=*(ushort *)(cmd+l);
    else data=*(short *)(cmd+l); }
  else {
    data=*(long *)(cmd+l);
    if (pfixup==NULL) pfixup=cmd+l;
    da->fixupsize+=4; };
  if (sxt==2) data&=0x0000FFFF;
  if (data==0 && da->error==0) da->zeroconst=1;
  // Command ENTER, as an exception from Intel's rules, has two immediate
  // constants. As the second constant is rarely used, I exclude it from
  // search if the first constant is non-zero (which is usually the case).
  if (da->immconst==0)
    da->immconst=data;
  if (mode>=DISASM_FILE && da->error==DAE_NOERR) {
    if (mode>=DISASM_CODE && type!=IMU)
      i=Decodeaddress(data,name,TEXTLEN-nresult-24,comment);
    else {
      i=0; comment[0]='\0'; };
    if (i!=0 && symbolic!=0) {
      strcpy(da->result+nresult,name); nresult+=i; }
    else if (type==IMU || type==IMS || type==IM2 || data>=0 || data<NEGLIMIT)
      nresult+=sprintf(da->result+nresult,"%lX",data);
    else
      nresult+=sprintf(da->result+nresult,"-%lX",-data);
    if (addcomment && comment[0]!='\0') strcpy(da->comment,comment);
  };
};

// Decode VxD service name (always 4-byte).
static void DecodeVX(void) {
  ulong l,data;
  immsize+=4;                          // Allows several immediate operands
  if (mode<DISASM_DATA) return;
  l=1+hasrm+hassib+dispsize+(immsize-4);
  if (size<l+4) {
    da->error=DAE_CROSS;
    return; };
  data=*(long *)(cmd+l);
  if (data==0 && da->error==0) da->zeroconst=1;
  if (da->immconst==0)
    da->immconst=data;
  if (mode>=DISASM_FILE && da->error==DAE_NOERR) {
    if ((data & 0x00008000)!=0 && memicmp("VxDCall",da->result,7)==0)
      memcpy(da->result,lowercase?"vxdjump":"VxDJump",7);
    nresult+=sprintf(da->result+nresult,"%lX",data);
  };
};

// Decode implicit constant 1 (used in shift commands). This operand is so
// insignificant that it is never shown in comment window.
static void DecodeC1(void) {
  if (mode<DISASM_DATA) return;
  da->immconst=1;
  if (mode>=DISASM_FILE) nresult+=sprintf(da->result+nresult,"1");
};

// Decode immediate absolute data address. This operand is used in 8080-
// compatible commands which allow to move data from memory to accumulator and
// back. Note that bytes ModRM and SIB never appear in commands with IA operand.
static void DecodeIA(void) {
  ulong addr;
  if (size<1+addrsize) {
    da->error=DAE_CROSS; return; };
  dispsize=addrsize;
  if (mode<DISASM_DATA) return;
  if (datasize==1) da->memtype=DEC_BYTE;
  else if (datasize==2) da->memtype=DEC_WORD;
  else if (datasize==4) da->memtype=DEC_DWORD;
  if (addrsize==2)
    addr=*(ushort *)(cmd+1);
  else {
    addr=*(ulong *)(cmd+1);
    if (pfixup==NULL) pfixup=cmd+1;
    da->fixupsize+=4; };
  da->adrconst=addr;
  if (addr==0) da->zeroconst=1;
  if (mode>=DISASM_FILE) {
    Memadr(SEG_DS,"",addr,datasize);
  };
};

// Decodes jump relative to nextip of size offsize.
static void DecodeRJ(ulong offsize,ulong nextip) {
  int i;
  ulong addr;
  char s[TEXTLEN];
  if (size<offsize+1) {
    da->error=DAE_CROSS; return; };
  dispsize=offsize;                    // Interpret offset as displacement
  if (mode<DISASM_DATA) return;
  if (offsize==1)
    addr=(signed char)cmd[1]+nextip;
  else if (offsize==2)
    addr=*(signed short *)(cmd+1)+nextip;
  else
    addr=*(ulong *)(cmd+1)+nextip;
  if (datasize==2)
    addr&=0xFFFF;
  da->jmpconst=addr;
  if (addr==0) da->zeroconst=1;
  if (mode>=DISASM_FILE) {
    if (offsize==1) nresult+=sprintf(da->result+nresult,
      "%s ",(lowercase==0?"SHORT":"short"));
    if (mode>=DISASM_CODE)
      i=Decodeaddress(addr,s,TEXTLEN,da->comment);
    else
      i=0;
    if (symbolic==0 || i==0)
      nresult+=sprintf(da->result+nresult,"%08lX",addr);
    else
      nresult+=sprintf(da->result+nresult,"%.*s",TEXTLEN-nresult-25,s);
    if (symbolic==0 && i!=0 && da->comment[0]=='\0')
      strcpy(da->comment,s);
    ;
  };
};

// Decode immediate absolute far jump address. In flat model, such addresses
// are not used (mostly because selector is specified directly in the command),
// so I neither decode as symbol nor comment it. To allow search for selector
// by value, I interprete it as an immediate constant.
static void DecodeJF(void) {
  ulong addr,seg;
  if (size<1+addrsize+2) {
    da->error=DAE_CROSS; return; };
  dispsize=addrsize; immsize=2;        // Non-trivial but allowed interpretation
  if (mode<DISASM_DATA) return;
  if (addrsize==2) {
    addr=*(ushort *)(cmd+1);
    seg=*(ushort *)(cmd+3); }
  else {
    addr=*(ulong *)(cmd+1);
    seg=*(ushort *)(cmd+5); };
  da->jmpconst=addr;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产精品精华液ab| 日韩欧美一区二区视频| 国产一区二区主播在线| 青青草原综合久久大伊人精品| 一区二区三区欧美亚洲| 洋洋av久久久久久久一区| 日韩美女啊v在线免费观看| 国产精品视频在线看| 中文字幕欧美国产| 中文字幕乱码久久午夜不卡| 中文一区二区完整视频在线观看| 国产欧美一区二区三区鸳鸯浴| 国产欧美一区视频| 中文字幕在线一区免费| 一区二区三区在线免费视频| 一区二区不卡在线视频 午夜欧美不卡在| 亚洲卡通动漫在线| 亚洲.国产.中文慕字在线| 亚洲午夜免费电影| 免费观看在线综合色| 国内精品写真在线观看| 成人av手机在线观看| 91碰在线视频| 51精品国自产在线| 久久综合色综合88| 亚洲人成在线播放网站岛国| 亚洲国产精品久久一线不卡| 久久精品国产成人一区二区三区| 国产米奇在线777精品观看| 成人avav影音| 欧美丝袜丝交足nylons| 精品国产乱码久久久久久免费| 亚洲国产精品成人久久综合一区 | 亚洲a一区二区| 激情av综合网| 日本高清视频一区二区| 精品久久久久久综合日本欧美 | 国产精品久久久久久亚洲毛片| 亚洲欧美一区二区三区孕妇| 日韩电影免费在线看| 成人午夜精品一区二区三区| 欧美日韩在线播放一区| 国产欧美日韩亚州综合| 亚洲福利一二三区| 欧美三级日韩在线| 欧美韩国一区二区| 蜜桃精品视频在线| 91色视频在线| 国产欧美精品一区| 免费不卡在线观看| 91九色02白丝porn| 国产欧美中文在线| 久久99国产精品尤物| 欧美日韩一区二区三区在线 | 中文字幕一区二区三区四区| 日日夜夜精品免费视频| 91啦中文在线观看| 国产精品色眯眯| 韩国成人在线视频| 8v天堂国产在线一区二区| 亚洲欧美激情小说另类| 国产suv精品一区二区三区| 3atv在线一区二区三区| 亚洲一区二区精品视频| 99国产精品视频免费观看| 国产亚洲午夜高清国产拍精品 | 久久这里都是精品| 五月天一区二区| 欧美性一级生活| 一区二区三区四区不卡视频| 一本色道综合亚洲| 亚洲美女淫视频| 99久久精品费精品国产一区二区| 久久美女高清视频| 国产在线播放一区| 精品美女在线观看| 久久丁香综合五月国产三级网站| 欧美日韩一区高清| 日韩福利电影在线| 精品久久国产字幕高潮| 狠狠色综合色综合网络| 久久久电影一区二区三区| 国产精品影视在线| 国产精品你懂的| 99久久婷婷国产精品综合| 中文字幕一区二区不卡| 色综合色综合色综合色综合色综合| 亚洲欧美综合在线精品| 在线日韩一区二区| 亚洲国产精品久久久久婷婷884 | 国产丝袜在线精品| 成人精品视频.| 亚洲精品国产一区二区精华液| 91极品美女在线| 亚洲va欧美va人人爽午夜| 欧美日韩成人激情| 国产精品自在欧美一区| 国产精品污www在线观看| 色婷婷国产精品综合在线观看| 亚洲成人免费视| 久久婷婷久久一区二区三区| 国产91在线观看丝袜| 亚洲愉拍自拍另类高清精品| 欧美另类z0zxhd电影| 国产精品亚洲专一区二区三区 | 亚洲图片欧美激情| 欧美视频在线一区| 久久99精品久久久久婷婷| 国产精品毛片大码女人| 337p亚洲精品色噜噜狠狠| 国产成人亚洲综合a∨婷婷图片| 亚洲色图丝袜美腿| 欧美大黄免费观看| 色综合久久九月婷婷色综合| 日韩国产欧美在线观看| 久久精品免视看| 在线看国产一区| 韩国毛片一区二区三区| 一区二区三区在线视频观看| 26uuu国产在线精品一区二区| 色呦呦网站一区| 国产一区二区三区观看| 亚洲福中文字幕伊人影院| 欧美国产综合色视频| 欧美丰满美乳xxx高潮www| 9i在线看片成人免费| 老司机精品视频导航| 亚洲精品免费电影| 欧美激情一区二区| 欧美精品一区二区三区一线天视频| 在线国产亚洲欧美| av激情成人网| 风间由美性色一区二区三区| 日本中文字幕一区二区有限公司| 自拍偷自拍亚洲精品播放| 精品国产乱码久久久久久闺蜜 | 久久久91精品国产一区二区精品| 欧美日韩在线播放一区| 色综合网站在线| 欧美另类久久久品| av网站免费线看精品| 国产成人a级片| 韩国av一区二区三区| 日韩成人精品在线| 亚欧色一区w666天堂| 亚洲无人区一区| 一个色在线综合| 一区二区三区毛片| 亚洲欧美日韩一区二区| 国产精品久久久久婷婷二区次| 精品成人在线观看| 精品国产精品网麻豆系列| 欧美电影免费提供在线观看| 日韩欧美色综合| 日韩午夜在线观看| 欧美成人三级在线| 久久久精品影视| 国产精品三级电影| 国产精品国产三级国产aⅴ原创| 国产欧美日韩中文久久| 国产欧美日韩在线视频| 亚洲欧洲另类国产综合| 一区二区三区精密机械公司| 一区二区三区中文字幕在线观看| 亚洲图片欧美一区| 免费观看91视频大全| 国内精品视频一区二区三区八戒| 国产乱人伦偷精品视频免下载| 国产在线视视频有精品| 国产91精品入口| 91视频国产资源| 日本电影欧美片| 777奇米四色成人影色区| 欧美一区二区三区在线观看视频| 欧美精品一区二区三区久久久| 国产欧美精品一区aⅴ影院| 亚洲精品国产a| 日韩成人免费看| 成人在线一区二区三区| 91一区在线观看| 欧美区一区二区三区| 精品国产乱码久久久久久闺蜜| 国产精品萝li| 图片区小说区区亚洲影院| 黄色日韩三级电影| 色老汉av一区二区三区| 欧美一级夜夜爽| 国产精品三级电影| 午夜日韩在线观看| 国产91色综合久久免费分享| 欧洲av在线精品| 国产欧美日韩久久| 天天影视涩香欲综合网| 粉嫩一区二区三区性色av| 欧美日本视频在线| 亚洲国产精品精华液ab| 美女一区二区三区| 色婷婷av久久久久久久| 久久精品视频在线看| 亚洲国产欧美在线人成|