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

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

?? assembl.c

?? 反匯編disasm的源代碼 反匯編disasm的源代碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
          r[reg]+=idata;
          Scanasm(0); }
        else r[reg]++; }               // Simple register
      else if (scan==SCAN_LOCAL) {
        r[REG_EBP]++;
        op->offset-=idata*4;
        Scanasm(0); }
      else if (scan==SCAN_ARG) {
        r[REG_EBP]++;
        op->offset+=(idata+1)*4;
        Scanasm(0); }
      else if (scan==SCAN_ICONST || scan==SCAN_DCONST) {
        offset=idata; Scanasm(0);
        if (scan==SCAN_SYMB && idata=='*') {
          Scanasm(0);                  // Try scale*index
          if (scan==SCAN_ERR) return;
          if (sign=='-') {
            asmerror="Unable to subtract register"; scan=SCAN_ERR; return; };
          if (scan==SCAN_REG16) {
            asmerror="Sorry, 16-bit addressing is not supported";
            scan=SCAN_ERR; return; };
          if (scan!=SCAN_REG32) {
            asmerror="Syntax error"; scan=SCAN_ERR; return; };
          if (offset==6 || offset==7 || offset>9) {
            asmerror="Invalid scale"; scan=SCAN_ERR; return; };
          r[idata]+=offset;
          Scanasm(0); }
        else {
          if (sign=='-') op->offset-=offset;
          else op->offset+=offset;
        }; }
      else if (scan==SCAN_OFS) {
        Scanasm(0);
        if (scan==SCAN_SYMB && idata=='*') {
          asmerror="Undefined scale is not allowed"; scan=SCAN_ERR; return; }
        else {
          op->anyoffset=1;
        }; }
      else break;                      // None of expected address elements
      if (scan==SCAN_SYMB && idata==']') break;
      sign='?';
    };
    if (scan==SCAN_ERR) return;
    if (scan!=SCAN_SYMB || idata!=']') {
      asmerror="Syntax error";
      scan=SCAN_ERR; return; };
    // Process XLAT address separately.
    if (xlataddr!=0) {                 // XLAT address in form [EBX+AX]
      for (i=0; i<=8; i++) {           // Check which registers used
        if (i==REG_EBX) continue;
        if (r[i]!=0) break; };
      if (i<=8 || r[REG_EBX]!=1 || op->offset!=0 || op->anyoffset!=0) {
        asmerror="Invalid address"; scan=SCAN_ERR; return; };
      op->type=MXL; }
    // Determine scale, index and base.
    else {
      j=0;                             // Number of used registers
      for (i=0; i<=8; i++) {
        if (r[i]==0)
          continue;                    // Unused register
        if (r[i]==3 || r[i]==5 || r[i]==9) {
          if (op->index>=0 || op->base>=0) {
            if (j==0) asmerror="Invalid scale";
            else asmerror="Too many registers";
            scan=SCAN_ERR; return; };
          op->index=op->base=i;
          op->scale=r[i]-1; }
        else if (r[i]==2 || r[i]==4 || r[i]==8) {
          if (op->index>=0) {
            if (j<=1) asmerror="Only one register may be scaled";
            else asmerror="Too many registers";
            scan=SCAN_ERR; return; };
          op->index=i; op->scale=r[i]; }
        else if (r[i]==1) {
          if (op->base<0)
            op->base=i;
          else if (op->index<0) {
            op->index=i; op->scale=1; }
          else {
            asmerror="Too many registers";
            scan=SCAN_ERR; return;
          }; }
        else {
          asmerror="Invalid scale"; scan=SCAN_ERR; return; };
        j++;
      };
      op->type=MRG;
    }; }
  else {
    asmerror="Unrecognized operand"; scan=SCAN_ERR; return; };
  // In general, address modifier is allowed only with address expression which
  // is a constant, a far address or a memory expression. More precise check
  // will be done later in Assemble().
  if (op->jmpmode!=0 && op->type!=IMM && op->type!=JMF && op->type!=MRG) {
    asmerror="Jump address modifier is not allowed";
    scan=SCAN_ERR; return; };
  Scanasm(0);                          // Fetch next token from input line
};

// Function assembles text into 32-bit 80x86 machine code. It supports imprecise
// operands (for example, R32 stays for any general-purpose 32-bit register).
// This allows to search for incomplete commands. Command is precise when all
// significant bytes in model.mask are 0xFF. Some commands have more than one
// decoding. By calling Assemble() with attempt=0,1... and constsize=0,1,2,3 one
// gets also alternative variants (bit 0x1 of constsize is responsible for size
// of address constant and bit 0x2 - for immediate data). However, only one
// address form is generated ([EAX*2], but not [EAX+EAX]; [EBX+EAX] but not
// [EAX+EBX]; [EAX] will not use SIB byte; no DS: prefix and so on). Returns
// number of bytes in assembled code or non-positive number in case of detected
// error. This number is the negation of the offset in the input text where the
// error encountered. Unfortunately, BC 4.52 is unable to compile the switch
// (arg) in this code when any common subexpression optimization is on. The
// next #pragma statement disables all optimizations.

//#pragma option -Od                     // No optimizations, or BC 4.52 crashes

int Assemble(char *cmd,ulong ip,t_asmmodel *model,int attempt,
  int constsize,char *errtext) {
  int i,j,k,namelen,nameok,arg,match,datasize,addrsize,bytesize,minop,maxop;
  int rep,lock,segment,jmpsize,jmpmode,longjump;
  int hasrm,hassib,dispsize,immsize;
  int anydisp,anyimm,anyjmp;
  long l,displacement,immediate,jmpoffset;
  char name[32],*nameend;
  char tcode[MAXCMDSIZE],tmask[MAXCMDSIZE];
  t_asmoperand aop[3],*op;             // Up to 3 operands allowed
  const t_cmddata *pd;
  if (model!=NULL) model->length=0;
  if (cmd==NULL || model==NULL || errtext==NULL) {
    if (errtext!=NULL) strcpy(errtext,"Internal OLLYDBG error");
    return 0; };                       // Error in parameters
  asmcmd=cmd;
  rep=lock=0; errtext[0]='\0';
  Scanasm(SA_NAME);
  if (scan==SCAN_EOL)                  // End of line, nothing to assemble
    return 0;
  while (1) {                          // Fetch all REPxx and LOCK prefixes
    if (scan==SCAN_REP || scan==SCAN_REPE || scan==SCAN_REPNE) {
      if (rep!=0) {
        strcpy(errtext,"Duplicated REP prefix"); goto error; };
      rep=scan; }
    else if (scan==SCAN_LOCK) {
      if (lock!=0) {
        strcpy(errtext,"Duplicated LOCK prefix"); goto error; };
      lock=scan; }
    else break;                        // No more prefixes
    Scanasm(SA_NAME); };
  if (scan!=SCAN_NAME || idata>16) {
    strcpy(errtext,"Command mnemonic expected"); goto error; };
  nameend=asmcmd;
  strupr(sdata);
  // Prepare full mnemonic (including repeat prefix, if any).
  if (rep==SCAN_REP) sprintf(name,"REP %s",sdata);
  else if (rep==SCAN_REPE) sprintf(name,"REPE %s",sdata);
  else if (rep==SCAN_REPNE) sprintf(name,"REPNE %s",sdata);
  else strcpy(name,sdata);
  Scanasm(0);
  // Parse command operands (up to 3). Note: jump address is always the first
  // (and only) operand in actual command set.
  for (i=0; i<3; i++) {
    aop[i].type=NNN;                   // No operand
    aop[i].size=0;                     // Undefined size
    aop[i].index=-1;                   // No index
    aop[i].scale=0;                    // No scale
    aop[i].base=-1;                    // No base
    aop[i].offset=0;                   // No offset
    aop[i].anyoffset=0;                // No offset
    aop[i].segment=SEG_UNDEF;          // No segment
    aop[i].jmpmode=0; };               // No jump size modifier
  Parseasmoperand(aop+0);
  jmpmode=aop[0].jmpmode;
  if (jmpmode!=0) jmpmode|=0x80;
  if (scan==SCAN_SYMB && idata==',') {
    Scanasm(0);
    Parseasmoperand(aop+1);
    if (scan==SCAN_SYMB && idata==',') {
      Scanasm(0);
      Parseasmoperand(aop+2);
    };
  };
  if (scan==SCAN_ERR) {
    strcpy(errtext,asmerror); goto error; };
  if (scan!=SCAN_EOL) {
    strcpy(errtext,"Extra input after operand"); goto error; };
  // If jump size is not specified, function tries to use short jump. If
  // attempt fails, it retries with long form.
  longjump=0;                          // Try short jump on the first pass
retrylongjump:
  nameok=0;
  // Some commands allow different number of operands. Variables minop and
  // maxop accumulate their minimal and maximal counts. The numbers are not
  // used in assembly process but allow for better error diagnostics.
  minop=3; maxop=0;
  // Main assembly loop: try to find the command which matches all operands,
  // but do not process operands yet.
  namelen=strlen(name);
  for (pd=cmddata; pd->mask!=0; pd++) {
    if (pd->name[0]=='&') {            // Mnemonic depends on operand size
      j=1;
      datasize=2;
      addrsize=4;
      while (1) {                      // Try all mnemonics (separated by ':')
        for (i=0; pd->name[j]!='\0' && pd->name[j]!=':'; j++) {
          if (pd->name[j]=='*') {
            if (name[i]=='W') { datasize=2; i++; }
            else if (name[i]=='D') { datasize=4; i++; }
            else if (sizesens==0) datasize=2;
            else datasize=4; }
          else if (pd->name[j]==name[i]) i++;
          else break;
        };
        if (name[i]=='\0' && (pd->name[j]=='\0' || pd->name[j]==':'))
          break;                       // Bingo!
        while (pd->name[j]!='\0' && pd->name[j]!=':')
          j++;
        if (pd->name[j]==':') {
          j++; datasize=4; }           // Retry with 32-bit mnenonic
        else {
          i=0; break;                  // Comparison failed
        };
      };
      if (i==0) continue; }
    else if (pd->name[0]=='$') {       // Mnemonic depends on address size
      j=1;
      datasize=0;
      addrsize=2;
      while (1) {                      // Try all mnemonics (separated by ':')
        for (i=0; pd->name[j]!='\0' && pd->name[j]!=':'; j++) {
          if (pd->name[j]=='*') {
            if (name[i]=='W') { addrsize=2; i++; }
            else if (name[i]=='D') { addrsize=4; i++; }
            else if (sizesens==0) addrsize=2;
            else addrsize=4; }
          else if (pd->name[j]==name[i]) i++;
          else break;
        };
        if (name[i]=='\0' && (pd->name[j]=='\0' || pd->name[j]==':'))
          break;                       // Bingo!
        while (pd->name[j]!='\0' && pd->name[j]!=':')
          j++;
        if (pd->name[j]==':') {
          j++; addrsize=4; }           // Retry with 32-bit mnenonic
        else {
          i=0; break;                  // Comparison failed
        };
      };
      if (i==0) continue; }
    else {                             // Compare with all synonimes
      j=k=0;
      datasize=0;                      // Default settings
      addrsize=4;
      while (1) {
        while (pd->name[j]!=',' && pd->name[j]!='\0') j++;
        if (j-k==namelen && strnicmp(name,pd->name+k,namelen)==0) break;
        k=j+1; if (pd->name[j]=='\0') break;
        j=k; };
      if (k>j) continue;
    };
    // For error diagnostics it is important to know whether mnemonic exists.
    nameok++;
    if (pd->arg1==NNN || pd->arg1>=PSEUDOOP)
       minop=0;
    else if (pd->arg2==NNN || pd->arg2>=PSEUDOOP) {
       if (minop>1) minop=1;
       if (maxop<1) maxop=1; }
    else if (pd->arg3==NNN || pd->arg3>=PSEUDOOP) {
       if (minop>2) minop=2;
       if (maxop<2) maxop=2; }
    else
      maxop=3;
    // Determine default and allowed operand size(s).
    if (pd->bits==FF) datasize=2;      // Forced 16-bit size
    if (pd->bits==WW || pd->bits==WS || pd->bits==W3 || pd->bits==WP)
      bytesize=1;                      // 1-byte size allowed
    else
      bytesize=0;                      // Word/dword size only

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99re在线视频这里只有精品| 精品国产乱码久久久久久久久| av一区二区三区四区| 国产精品一区二区黑丝 | zzijzzij亚洲日本少妇熟睡| 国产福利一区在线观看| 国产成人精品亚洲777人妖| 国产91丝袜在线18| 成人av电影免费观看| 99精品欧美一区二区蜜桃免费| 99久久99久久久精品齐齐| 成人黄色av电影| 日本精品免费观看高清观看| 欧美在线播放高清精品| 欧美亚洲丝袜传媒另类| 欧美日韩一二三区| 日韩无一区二区| 国产午夜亚洲精品不卡| 亚洲国产高清aⅴ视频| 成人免费在线观看入口| 亚洲国产精品精华液网站| 青青青伊人色综合久久| 国产精品亚洲专一区二区三区| 国产精品一二三| 91麻豆精东视频| 欧美伦理影视网| 精品国精品自拍自在线| 国产精品网曝门| 亚洲国产成人av好男人在线观看| 五月天中文字幕一区二区| 免费看日韩精品| 夫妻av一区二区| 欧美亚洲禁片免费| 日韩一区二区三区在线| 欧美国产综合色视频| 亚洲综合丁香婷婷六月香| 美日韩一级片在线观看| 成人黄色777网| 欧美日韩高清在线播放| 久久免费看少妇高潮| 亚洲欧美日韩一区二区| 成人午夜短视频| 在线视频一区二区三| 欧美一区二区三区在线观看 | 精品理论电影在线| 中文字幕一区二区日韩精品绯色| 亚洲va国产va欧美va观看| 国产乱码精品一品二品| 欧美三级三级三级爽爽爽| 精品国产免费久久| 一区二区欧美精品| 国产成人啪免费观看软件| 在线观看欧美精品| 久久午夜电影网| 亚洲成av人片在www色猫咪| 国产老女人精品毛片久久| 欧美三级日韩三级| 国产精品久久久久久亚洲伦| 日本不卡中文字幕| 色欲综合视频天天天| 久久青草欧美一区二区三区| 亚洲aaa精品| 91小宝寻花一区二区三区| 久久综合九色综合97婷婷| 亚洲国产wwwccc36天堂| 成人激情黄色小说| 久久亚洲影视婷婷| 日韩黄色免费电影| 在线中文字幕不卡| 国产精品乱码人人做人人爱 | 成人在线一区二区三区| 日韩一区二区在线观看视频播放| 亚洲丝袜自拍清纯另类| 国产美女精品在线| 51久久夜色精品国产麻豆| 亚洲欧美一区二区三区极速播放 | 日韩成人av影视| 一本色道久久综合狠狠躁的推荐| 国产亚洲综合色| 老色鬼精品视频在线观看播放| 99精品一区二区三区| 国产日韩欧美综合在线| 麻豆91精品视频| 欧美精品99久久久**| 亚洲精品成人精品456| av成人动漫在线观看| 欧美激情自拍偷拍| 国产宾馆实践打屁股91| 精品国产亚洲在线| 久久国产福利国产秒拍| 欧美日本不卡视频| 亚洲网友自拍偷拍| 在线免费观看日本欧美| 亚洲欧美偷拍三级| 91色porny蝌蚪| 国产精品久久久久久久裸模| 成人一区二区三区中文字幕| 久久久美女毛片| 国产精品一区二区在线观看网站| 精品国产乱码久久久久久免费| 麻豆精品在线看| 日韩欧美一区在线| 国内成人精品2018免费看| 日韩免费在线观看| 国产一区在线看| 久久精品亚洲麻豆av一区二区| 国产传媒日韩欧美成人| 国产午夜精品理论片a级大结局| 国产乱码字幕精品高清av| 精品国产乱子伦一区| 国产一区二区三区美女| 久久精品亚洲精品国产欧美| 成人免费高清视频| 成人免费在线播放视频| 在线精品亚洲一区二区不卡| 亚洲第一福利一区| 正在播放亚洲一区| 九九精品一区二区| 日本一区二区三区视频视频| 99久久99久久精品国产片果冻| 亚洲男人的天堂一区二区| 欧美三级视频在线观看| 麻豆精品新av中文字幕| 久久精品一区二区| 91蜜桃在线观看| 午夜精品福利一区二区三区蜜桃| 国产精品国产三级国产专播品爱网| 国产**成人网毛片九色 | 国产精品成人午夜| 91黄色免费版| 美女视频免费一区| 国产精品毛片a∨一区二区三区| 一本色道a无线码一区v| 婷婷一区二区三区| 国产婷婷一区二区| 日本韩国欧美在线| 激情文学综合网| 一区二区三区在线高清| 日韩美女主播在线视频一区二区三区 | 中文字幕综合网| 欧美区一区二区三区| 极品少妇xxxx偷拍精品少妇| 国产精品久久一卡二卡| 欧美精选午夜久久久乱码6080| 久久99精品国产.久久久久久| 国产精品久久久99| 这里只有精品免费| av在线不卡免费看| 免费成人小视频| 国产精品二三区| 欧美电视剧在线观看完整版| 成人黄色在线视频| 美女精品一区二区| 中文字幕一区二区三区不卡| 日韩一区二区精品葵司在线| 99精品桃花视频在线观看| 蜜桃视频一区二区三区| 亚洲欧美福利一区二区| 精品少妇一区二区三区在线播放 | 中文字幕一区二区三| 欧美一区二区二区| 91碰在线视频| 国产一区二区久久| 午夜激情一区二区三区| 中文字幕一区二区三区av| 精品奇米国产一区二区三区| 在线免费不卡电影| 大美女一区二区三区| 美女脱光内衣内裤视频久久影院| 亚洲男人天堂av网| 亚洲国产精品成人久久综合一区| 这里是久久伊人| 日本韩国一区二区三区视频| 丁香激情综合五月| 激情伊人五月天久久综合| 舔着乳尖日韩一区| 亚洲色图欧美偷拍| 国产欧美精品区一区二区三区| 欧美一区二区三区的| 欧美视频在线播放| 91影院在线免费观看| 成人一区在线观看| 国产精品亚洲专一区二区三区 | 亚洲一区二区精品久久av| 中文字幕欧美区| 久久久久亚洲蜜桃| 欧美xxxxxxxx| 日韩一区二区麻豆国产| 欧美精品在线一区二区| 日韩精品中文字幕在线一区| 91激情五月电影| 色94色欧美sute亚洲线路一久| 成人丝袜18视频在线观看| 国产乱码精品一品二品| 久久成人免费网站| 久久99久久久久| 日韩成人伦理电影在线观看| 午夜av一区二区三区| 性做久久久久久免费观看| 午夜影院久久久|