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

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

?? assembl.c

?? 反匯編disasm的源代碼 反匯編disasm的源代碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
  i=pd->len-1;                         // Last byte of command itself
  if (rep) i++;                        // REPxx prefixes count as extra byte
  // In some cases at least one operand must have explicit size declaration (as
  // in MOV [EAX],1). This preliminary check does not include all cases.
  if (pd->bits==WW || pd->bits==WS || pd->bits==WP) {
    if (datasize==0) {
      strcpy(errtext,"Please specify operand size"); goto error; }
    else if (datasize>1)
      tcode[i]|=0x01;                  // WORD or DWORD size of operands
    tmask[i]|=0x01; }
  else if (pd->bits==W3) {
    if (datasize==0) {
      strcpy(errtext,"Please specify operand size"); goto error; }
    else if (datasize>1)
      tcode[i]|=0x08;                  // WORD or DWORD size of operands
    tmask[i]|=0x08; };
  // Present suffix of 3DNow! command as immediate byte operand.
  if ((pd->type & C_TYPEMASK)==C_NOW) {
    immsize=1;
    immediate=(pd->code>>16) & 0xFF; };
  // Process operands again, this time constructing the code.
  anydisp=anyimm=anyjmp=0;
  for (j=0; j<3; j++) {                // Up to 3 operands
    op=aop+j;
    if (j==0) arg=pd->arg1;
    else if (j==1) arg=pd->arg2;
    else arg=pd->arg3;
    if (arg==NNN) break;               // All operands processed
    switch (arg) {
      case REG:                        // Integer register in Reg field
      case RG4:                        // Integer 4-byte register in Reg field
      case RMX:                        // MMX register MMx
      case R3D:                        // 3DNow! register MMx
      case CRX:                        // Control register CRx
      case DRX:                        // Debug register DRx
        hasrm=1;
        if (op->index<8) {
          tcode[i+1]|=(char)(op->index<<3); tmask[i+1]|=0x38; };
        break;
      case RCM:                        // Integer register in command byte
      case RST:                        // FPU register (ST(i)) in command byte
        if (op->index<8) {
          tcode[i]|=(char)op->index; tmask[i]|=0x07; };
        break;
      case RAC:                        // Accumulator (AL/AX/EAX, implicit)
      case RAX:                        // AX (2-byte, implicit)
      case RDX:                        // DX (16-bit implicit port address)
      case RCL:                        // Implicit CL register (for shifts)
      case RS0:                        // Top of FPU stack (ST(0))
      case MDE:                        // Destination in string op's ([EDI])
      case C01:                        // Implicit constant 1 (for shifts)
        break;                         // Simply skip implicit operands
      case MSO:                        // Source in string op's ([ESI])
      case MXL:                        // XLAT operand ([EBX+AL])
        if (op->segment!=SEG_UNDEF && op->segment!=SEG_DS)
          segment=op->segment;
        break;
      case MRG:                        // Memory/register in ModRM byte
      case MRJ:                        // Memory/reg in ModRM as JUMP target
      case MR1:                        // 1-byte memory/register in ModRM byte
      case MR2:                        // 2-byte memory/register in ModRM byte
      case MR4:                        // 4-byte memory/register in ModRM byte
      case RR4:                        // 4-byte memory/register (register only)
      case MR8:                        // 8-byte memory/MMX register in ModRM
      case RR8:                        // 8-byte MMX register only in ModRM
      case MRD:                        // 8-byte memory/3DNow! register in ModRM
      case RRD:                        // 8-byte memory/3DNow! (register only)
        hasrm=1;
        if (op->type!=MRG) {           // Register in ModRM byte
          tcode[i+1]|=0xC0; tmask[i+1]|=0xC0;
          if (op->index<8) {
            tcode[i+1]|=(char)op->index; tmask[i+1]|=0x07; };
          break;
        };                             // Note: NO BREAK, continue with address
      case MMA:                        // Memory address in ModRM byte for LEA
      case MML:                        // Memory in ModRM byte (for LES)
      case MMS:                        // Memory in ModRM byte (as SEG:OFFS)
      case MM6:                        // Memory in ModRm (6-byte descriptor)
      case MMB:                        // Two adjacent memory locations (BOUND)
      case MD2:                        // Memory in ModRM byte (16-bit integer)
      case MB2:                        // Memory in ModRM byte (16-bit binary)
      case MD4:                        // Memory in ModRM byte (32-bit integer)
      case MD8:                        // Memory in ModRM byte (64-bit integer)
      case MDA:                        // Memory in ModRM byte (80-bit BCD)
      case MF4:                        // Memory in ModRM byte (32-bit float)
      case MF8:                        // Memory in ModRM byte (64-bit float)
      case MFA:                        // Memory in ModRM byte (80-bit float)
      case MFE:                        // Memory in ModRM byte (FPU environment)
      case MFS:                        // Memory in ModRM byte (FPU state)
      case MFX:                        // Memory in ModRM byte (ext. FPU state)
        hasrm=1; displacement=op->offset; anydisp=op->anyoffset;
        if (op->base<0 && op->index<0) {
          dispsize=4;                  // Special case of immediate address
          if (op->segment!=SEG_UNDEF && op->segment!=SEG_DS)
            segment=op->segment;
          tcode[i+1]|=0x05;
          tmask[i+1]|=0xC7; }
        else if (op->index<0 && op->base!=REG_ESP) {
          tmask[i+1]|=0xC0;            // SIB byte unnecessary
          if (op->offset==0 && op->anyoffset==0 && op->base!=REG_EBP)
            ;                          // [EBP] always requires offset
          else if ((constsize & 1)!=0 &&
            ((op->offset>=-128 && op->offset<128) || op->anyoffset!=0)
          ) {
            tcode[i+1]|=0x40;          // Disp8
            dispsize=1; }
          else {
            tcode[i+1]|=0x80;          // Disp32
            dispsize=4; };
          if (op->base<8) {
            if (op->segment!=SEG_UNDEF && op->segment!=addr32[op->base].defseg)
              segment=op->segment;
            tcode[i+1]|=
              (char)op->base;          // Note that case [ESP] has base<0.
            tmask[i+1]|=0x07; }
          else segment=op->segment; }
        else {                         // SIB byte necessary
          hassib=1;
          if (op->base==REG_EBP &&     // EBP as base requires offset, optimize
            op->index>=0 && op->scale==1 && op->offset==0 && op->anyoffset==0) {
            op->base=op->index; op->index=REG_EBP; };
          if (op->index==REG_ESP &&    // ESP cannot be an index, reorder
            op->scale<=1) {
            op->index=op->base; op->base=REG_ESP; op->scale=1; };
          if (op->base<0 &&            // No base means 4-byte offset, optimize
            op->index>=0 && op->scale==2 &&
            op->offset>=-128 && op->offset<128 && op->anyoffset==0) {
            op->base=op->index; op->scale=1; };
          if (op->index==REG_ESP) {    // Reordering was unsuccessfull
            strcpy(errtext,"Invalid indexing mode");
            goto error; };
          if (op->base<0) {
            tcode[i+1]|=0x04;
            dispsize=4; }
          else if (op->offset==0 && op->anyoffset==0 && op->base!=REG_EBP)
            tcode[i+1]|=0x04;          // No displacement
          else if ((constsize & 1)!=0 &&
            ((op->offset>=-128 && op->offset<128) || op->anyoffset!=0)
          ) {
            tcode[i+1]|=0x44;          // Disp8
            dispsize=1; }
          else {
            tcode[i+1]|=0x84;          // Disp32
            dispsize=4; };
          tmask[i+1]|=0xC7;            // ModRM completed, proceed with SIB
          if (op->scale==2) tcode[i+2]|=0x40;
          else if (op->scale==4) tcode[i+2]|=0x80;
          else if (op->scale==8) tcode[i+2]|=0xC0;
          tmask[i+2]|=0xC0;
          if (op->index<8) {
            if (op->index<0) op->index=0x04;
            tcode[i+2]|=(char)(op->index<<3);
            tmask[i+2]|=0x38; };
          if (op->base<8) {
            if (op->base<0) op->base=0x05;
            if (op->segment!=SEG_UNDEF && op->segment!=addr32[op->base].defseg)
              segment=op->segment;
            tcode[i+2]|=(char)op->base;
            tmask[i+2]|=0x07; }
          else segment=op->segment; };
        break;
      case IMM:                        // Immediate data (8 or 16/32)
      case IMU:                        // Immediate unsigned data (8 or 16/32)
      case VXD:                        // VxD service (32-bit only)
        if (datasize==0 && pd->arg2==NNN && (pd->bits==SS || pd->bits==WS))
          datasize=4;
        if (datasize==0) {
          strcpy(errtext,"Please specify operand size");
          goto error; };
        immediate=op->offset; anyimm=op->anyoffset;
        if (pd->bits==SS || pd->bits==WS) {
          if (datasize>1 && (constsize & 2)!=0 &&
            ((immediate>=-128 && immediate<128) || op->anyoffset!=0)) {
            immsize=1; tcode[i]|=0x02; }
          else immsize=datasize;
          tmask[i]|=0x02; }
        else immsize=datasize;
        break;
      case IMX:                        // Immediate sign-extendable byte
      case IMS:                        // Immediate byte (for shifts)
      case IM1:                        // Immediate byte
        if (immsize==2)                // To accomodate ENTER instruction
          immediate=(immediate & 0xFFFF) | (op->offset<<16);
        else immediate=op->offset;
        anyimm|=op->anyoffset;
        immsize++; break;
      case IM2:                        // Immediate word (ENTER/RET)
        immediate=op->offset; anyimm=op->anyoffset;
        immsize=2; break;
      case IMA:                        // Immediate absolute near data address
        if (op->segment!=SEG_UNDEF && op->segment!=SEG_DS)
          segment=op->segment;
        displacement=op->offset; anydisp=op->anyoffset;
        dispsize=4; break;
      case JOB:                        // Immediate byte offset (for jumps)
        jmpoffset=op->offset; anyjmp=op->anyoffset;
        jmpsize=1; break;
      case JOW:                        // Immediate full offset (for jumps)
        jmpoffset=op->offset; anyjmp=op->anyoffset;
        jmpsize=4; break;
      case JMF:                        // Immediate absolute far jump/call addr
        displacement=op->offset; anydisp=op->anyoffset; dispsize=4;
        immediate=op->segment; anyimm=op->anyoffset; immsize=2;
        break;
      case SGM:                        // Segment register in ModRM byte
        hasrm=1;
        if (op->index<6) {
          tcode[i+1]|=(char)(op->index<<3); tmask[i+1]|=0x38; };
        break;
      case SCM:                        // Segment register in command byte
        if (op->index==SEG_FS || op->index==SEG_GS) {
          tcode[0]=0x0F; tmask[0]=0xFF;
          i=1;
          if (strcmp(name,"PUSH")==0)
            tcode[i]=(char)((op->index<<3) | 0x80);
          else
            tcode[i]=(char)((op->index<<3) | 0x81);
          tmask[i]=0xFF; }
        else if (op->index<6) {
          if (op->index==SEG_CS && strcmp(name,"POP")==0) {
            strcpy(errtext,"Unable to POP CS");
            goto error; };
          tcode[i]=(char)((tcode[i] & 0xC7) | (op->index<<3)); }
        else {
          tcode[i]&=0xC7;
          tmask[i]&=0xC7; };
        break;
      case PRN:                        // Near return address (pseudooperand)
      case PRF:                        // Far return address (pseudooperand)
      case PAC:                        // Accumulator (AL/AX/EAX, pseudooperand)
      case PAH:                        // AH (in LAHF/SAHF, pseudooperand)
      case PFL:                        // Lower byte of flags (pseudooperand)
      case PS0:                        // Top of FPU stack (pseudooperand)
      case PS1:                        // ST(1) (pseudooperand)
      case PCX:                        // CX/ECX (pseudooperand)
      case PDI:                        // EDI (pseudooperand in MMX extentions)
        break;                         // Simply skip preudooperands
      default:                         // Undefined type of operand
        strcpy(errtext,"Internal Assembler error");
      goto error;
    };
  };
  // Gather parts of command together in the complete command.
  j=0;
  if (lock!=0) {                       // Lock prefix specified
    model->code[j]=0xF0;
    model->mask[j]=0xFF; j++; };
  if (datasize==2 && pd->bits!=FF) {   // Data size prefix necessary
    model->code[j]=0x66;
    model->mask[j]=0xFF; j++; };
  if (addrsize==2) {                   // Address size prefix necessary
    model->code[j]=0x67;
    model->mask[j]=0xFF; j++; };
  if (segment!=SEG_UNDEF) {            // Segment prefix necessary
    if (segment==SEG_ES) model->code[j]=0x26;
    else if (segment==SEG_CS) model->code[j]=0x2E;
    else if (segment==SEG_SS) model->code[j]=0x36;
    else if (segment==SEG_DS) model->code[j]=0x3E;
    else if (segment==SEG_FS) model->code[j]=0x64;
    else if (segment==SEG_GS) model->code[j]=0x65;
    else { strcpy(errtext,"Internal Assembler error"); goto error; };
    model->mask[j]=0xFF; j++; };
  if (dispsize>0) {
    memcpy(tcode+i+1+hasrm+hassib,&displacement,dispsize);
    if (anydisp==0) memset(tmask+i+1+hasrm+hassib,0xFF,dispsize); };
  if (immsize>0) {
    if (immsize==1) l=0xFFFFFF00L;
    else if (immsize==2) l=0xFFFF0000L;
    else l=0L;
    if ((immediate & l)!=0 && (immediate & l)!=l) {
      strcpy(errtext,"Constant does not fit into operand");
      goto error; };
    memcpy(tcode+i+1+hasrm+hassib+dispsize,&immediate,immsize);
    if (anyimm==0) memset(tmask+i+1+hasrm+hass

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
...av二区三区久久精品| 日韩精品一区二区三区视频播放 | 一区二区在线电影| 91麻豆精东视频| 亚洲五码中文字幕| 欧美精品tushy高清| 日精品一区二区| 欧美一级片免费看| 黄网站免费久久| 欧美国产精品一区二区三区| 成人免费视频免费观看| 亚洲精品国产精品乱码不99| 9191成人精品久久| 韩国欧美一区二区| 国产精品久久久久影院色老大| 91农村精品一区二区在线| 亚洲成av人片一区二区三区| 精品国产一二三区| 99久久久精品免费观看国产蜜| 玉米视频成人免费看| 日韩精品在线看片z| 91丨九色丨蝌蚪丨老版| 婷婷中文字幕一区三区| 久久久精品日韩欧美| 欧洲精品在线观看| 黑人精品欧美一区二区蜜桃| 亚洲精品视频在线看| 欧美成人精品二区三区99精品| 99国产精品久久久久久久久久| 首页国产欧美日韩丝袜| 国产日本一区二区| 精品视频1区2区| 国产999精品久久久久久| 亚洲国产日韩a在线播放| 久久久五月婷婷| 欧美日韩美女一区二区| 丁香婷婷综合色啪| 日本成人在线电影网| 亚洲欧美一区二区三区孕妇| 日韩欧美综合在线| 色婷婷激情综合| 国产成人免费视频一区| 日本欧美肥老太交大片| 亚洲男人都懂的| 国产欧美精品在线观看| 日韩精品一区国产麻豆| 欧美色成人综合| www.色精品| 国产iv一区二区三区| 免费人成在线不卡| 视频一区欧美日韩| 国产精品家庭影院| 久久精品夜色噜噜亚洲a∨| 欧美高清精品3d| 日本高清视频一区二区| 国产999精品久久久久久| 久久99久久99精品免视看婷婷| 五月天丁香久久| 一区二区三区日韩| 中文字幕一区在线观看视频| 久久久久国产精品麻豆| 欧美一区二区三区在线电影| 欧美色图一区二区三区| 国产成a人亚洲精| 激情文学综合网| 麻豆成人免费电影| 日韩专区一卡二卡| 午夜影视日本亚洲欧洲精品| 亚洲高清不卡在线| 亚洲第一福利视频在线| 亚洲成精国产精品女| 亚洲一区二区欧美日韩| 亚洲最新视频在线观看| 亚洲欧美日韩国产成人精品影院| 国产精品毛片大码女人| 亚洲国产精品t66y| 中文字幕 久热精品 视频在线| 国产亚洲污的网站| 国产亚洲欧美在线| 国产欧美一区二区精品仙草咪| 欧美精品一区二区三区蜜臀| 亚洲精品在线一区二区| 精品少妇一区二区三区免费观看| 欧美videos中文字幕| 26uuu亚洲婷婷狠狠天堂| 精品人在线二区三区| 久久亚洲私人国产精品va媚药| 久久一区二区视频| 亚洲国产精品精华液2区45| 中文幕一区二区三区久久蜜桃| 国产精品精品国产色婷婷| 亚洲免费观看高清完整版在线观看| 亚洲欧美激情视频在线观看一区二区三区 | 国产一区二区三区最好精华液| 国产一区啦啦啦在线观看| 国产成人午夜精品5599| 从欧美一区二区三区| 色综合久久99| 日韩丝袜情趣美女图片| 26uuu亚洲| 亚洲欧美日本韩国| 午夜私人影院久久久久| 狠狠网亚洲精品| av激情亚洲男人天堂| 在线观看视频欧美| 日韩欧美一区二区视频| 国产精品美女久久久久久2018| 伊人开心综合网| 久久精品国产精品亚洲综合| voyeur盗摄精品| 91精品国产综合久久小美女| 国产日韩成人精品| 亚洲一区欧美一区| 国产乱子轮精品视频| 色欧美88888久久久久久影院| 制服丝袜中文字幕一区| 国产日韩欧美综合在线| 一区二区三区日韩欧美| 国内成人自拍视频| 91原创在线视频| 日韩一区二区三区在线观看| 亚洲欧洲三级电影| 蜜臀av一区二区三区| 91视频观看视频| 久久综合狠狠综合| 亚洲一区二区在线免费看| 激情丁香综合五月| 欧美日韩国产一级| 欧美激情一区三区| 日韩二区在线观看| av电影一区二区| 国产欧美一区二区在线| 亚洲成人免费av| 不卡av电影在线播放| 精品少妇一区二区三区在线播放| 亚洲免费色视频| 国产麻豆成人精品| 91精品国产一区二区人妖| 亚洲人成小说网站色在线| 精品写真视频在线观看| 91精品国产一区二区三区 | 精品国产百合女同互慰| 一区二区三区欧美激情| av中文字幕不卡| 久久久久亚洲蜜桃| 美女视频黄 久久| 欧美日韩精品综合在线| 亚洲免费观看高清完整版在线观看 | 狠狠色狠狠色综合| 制服丝袜中文字幕一区| 亚洲综合男人的天堂| 91美女在线视频| 国产欧美日韩亚州综合| 国产最新精品免费| 日韩欧美你懂的| 免费成人美女在线观看.| 在线不卡欧美精品一区二区三区| 亚洲一级片在线观看| 91免费小视频| 国产精品传媒入口麻豆| 六月丁香婷婷久久| 欧美大胆人体bbbb| 奇米四色…亚洲| 91精品久久久久久蜜臀| 日韩成人免费看| 日韩一级完整毛片| 卡一卡二国产精品| 日韩免费性生活视频播放| 亚洲成在线观看| 3d动漫精品啪啪| 免费不卡在线观看| 欧美电视剧免费全集观看| 老司机精品视频一区二区三区| 日韩女优制服丝袜电影| 久久99精品国产.久久久久久| 欧美精品一区二区三区视频| 国产乱理伦片在线观看夜一区| 久久精品免视看| 成人污视频在线观看| 亚洲欧洲成人精品av97| 91国在线观看| 日韩av成人高清| 日韩欧美一区二区视频| 国内精品国产三级国产a久久| 日本一区二区三区免费乱视频 | 狠狠久久亚洲欧美| 久久精品一区二区| 99国产精品99久久久久久| 怡红院av一区二区三区| 欧美日韩国产成人在线免费| 蜜臀av性久久久久蜜臀aⅴ四虎 | 欧美激情一区二区在线| 99久久99久久久精品齐齐| 亚洲永久免费视频| 日韩欧美激情在线| 成人一区二区三区中文字幕| 亚洲综合久久av| 精品成人一区二区三区| 9l国产精品久久久久麻豆| 日韩福利电影在线|