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

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

?? assembl.c

?? 反匯編disasm的源代碼 反匯編disasm的源代碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
// Free Disassembler and Assembler -- Assembler
//
// Copyright (C) 2001 Oleh Yuschuk
//
//  This program is free software; you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation; either version 2 of the License, or
//  (at your option) any later version.
//
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//
//  You should have received a copy of the GNU General Public License
//  along with this program; if not, write to the Free Software
//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

// 16.01.2002 - corrected error in processing of immediate constants.


#define STRICT

#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <dir.h>
#include <math.h>
#include <float.h>
#pragma hdrstop

#include "disasm.h"

////////////////////////////////////////////////////////////////////////////////
///////////////////////////// ASSEMBLER FUNCTIONS //////////////////////////////

// Scanner modes.
#define SA_NAME        0x0001          // Don't try to decode labels
#define SA_IMPORT      0x0002          // Allow import pseudolabel

// Types of input tokens reported by scanner.
#define SCAN_EOL       0               // End of line
#define SCAN_REG8      1               // 8-bit register
#define SCAN_REG16     2               // 16-bit register
#define SCAN_REG32     3               // 32-bit register
#define SCAN_SEG       4               // Segment register
#define SCAN_FPU       5               // FPU register
#define SCAN_MMX       6               // MMX register
#define SCAN_CR        7               // Control register
#define SCAN_DR        8               // Debug register
#define SCAN_OPSIZE    9               // Operand size modifier
#define SCAN_JMPSIZE   10              // Jump size modifier
#define SCAN_LOCAL     11              // Address on stack in form LOCAL.decimal
#define SCAN_ARG       12              // Address on stack in form ARG.decimal
#define SCAN_PTR       20              // PTR in MASM addressing statements
#define SCAN_REP       21              // REP prefix
#define SCAN_REPE      22              // REPE prefix
#define SCAN_REPNE     23              // REPNE prefix
#define SCAN_LOCK      24              // LOCK prefix
#define SCAN_NAME      25              // Command or label
#define SCAN_ICONST    26              // Hexadecimal constant
#define SCAN_DCONST    27              // Decimal constant
#define SCAN_OFS       28              // Undefined constant
#define SCAN_FCONST    29              // Floating-point constant
#define SCAN_EIP       30              // Register EIP
#define SCAN_SIGNED    31              // Keyword "SIGNED" (in expressions)
#define SCAN_UNSIGNED  32              // Keyword "UNSIGNED" (in expressions)
#define SCAN_CHAR      33              // Keyword "CHAR" (in expressions)
#define SCAN_FLOAT     34              // Keyword "FLOAT" (in expressions)
#define SCAN_DOUBLE    35              // Keyword "DOUBLE" (in expressions)
#define SCAN_FLOAT10   36              // Keyword "FLOAT10" (in expressions)
#define SCAN_STRING    37              // Keyword "STRING" (in expressions)
#define SCAN_UNICODE   38              // Keyword "UNICODE" (in expressions)
#define SCAN_MSG       39              // Pseudovariable MSG (in expressions)

#define SCAN_SYMB      64              // Any other character
#define SCAN_IMPORT    65              // Import pseudolabel
#define SCAN_ERR       255             // Definitely bad item

// Definition used by Assembler to report command matching errors.
#define MA_JMP         0x0001          // Invalid jump size modifier
#define MA_NOP         0x0002          // Wrong number of operands
#define MA_TYP         0x0004          // Bad operand type
#define MA_NOS         0x0008          // Explicit operand size expected
#define MA_SIZ         0x0010          // Bad operand size
#define MA_DIF         0x0020          // Different operand sizes
#define MA_SEG         0x0040          // Invalid segment register
#define MA_RNG         0x0080          // Constant out of expected range

typedef struct t_asmoperand {
  int            type;                 // Operand type, see beginning of file
  int            size;                 // Operand size or 0 if yet unknown
  int            index;                // Index or other register
  int            scale;                // Scale
  int            base;                 // Base register if present
  long           offset;               // Immediate value or offset
  int            anyoffset;            // Offset is present but undefined
  int            segment;              // Segment in address if present
  int            jmpmode;              // Specified jump size
} t_asmoperand;

static char      *asmcmd;              // Pointer to 0-terminated source line
static int       scan;                 // Type of last scanned element
static int       prio;                 // Priority of operation (0: highest)
static char      sdata[TEXTLEN];       // Last scanned name (depends on type)
static long      idata;                // Last scanned value
static long      double fdata;         // Floating-point number
static char      *asmerror;            // Explanation of last error, or NULL

// Simple and slightly recursive scanner shared by Assemble(). The scanner is
// straightforward and ineffective, but high speed is not a must here. As
// input, it uses global pointer to source line asmcmd. On exit, it fills in
// global variables scan, prio, sdata, idata and/or fdata. If some error is
// detected, asmerror points to error message, otherwise asmerror remains
// unchanged.
static void Scanasm(int mode) {
  int i,j,base,maxdigit;
  long decimal,hex;
  long double floating,divisor;
  char s[TEXTLEN],*pcmd;
  sdata[0]='\0';
  idata=0;
  if (asmcmd==NULL) {
    asmerror="NULL input line"; scan=SCAN_ERR; return; };
  while (*asmcmd==' ' || *asmcmd=='\t')
    asmcmd++;                          // Skip leading spaces
  if (*asmcmd=='\0' || *asmcmd==';') {
    scan=SCAN_EOL; return; };          // Empty line
  if (isalpha(*asmcmd) || *asmcmd=='_' || *asmcmd=='@') {
    sdata[0]=*asmcmd++; i=1;           // Some keyword or identifier
    while ((isalnum(*asmcmd) || *asmcmd=='_' || *asmcmd=='@') &&
      i<sizeof(sdata))
      sdata[i++]=*asmcmd++;
    if (i>=sizeof(sdata)) {
      asmerror="Too long identifier"; scan=SCAN_ERR; return; };
    sdata[i]='\0';
    while (*asmcmd==' ' || *asmcmd=='\t')
      asmcmd++;                        // Skip trailing spaces
    strcpy(s,sdata); strupr(s);
    for (j=0; j<=8; j++) {             // j==8 means "any register"
      if (strcmp(s,regname[0][j])!=0) continue;
      idata=j; scan=SCAN_REG8;         // 8-bit register
      return; };
    for (j=0; j<=8; j++) {
      if (strcmp(s,regname[1][j])!=0) continue;
      idata=j; scan=SCAN_REG16;        // 16-bit register
      return; };
    for (j=0; j<=8; j++) {
      if (strcmp(s,regname[2][j])!=0) continue;
      idata=j; scan=SCAN_REG32;        // 32-bit register
      return; };
    for (j=0; j<6; j++) {
      if (strcmp(s,segname[j])!=0) continue;
      idata=j; scan=SCAN_SEG;          // Segment register
      while (*asmcmd==' ' || *asmcmd=='\t')
        asmcmd++;                      // Skip trailing spaces
      return; };
    if (strcmp(s,"ST")==0) {
      pcmd=asmcmd; Scanasm(SA_NAME);   // FPU register
      if (scan!=SCAN_SYMB || idata!='(') {
        asmcmd=pcmd;                   // Undo last scan
        idata=0; scan=SCAN_FPU; return; };
      Scanasm(SA_NAME); j=idata;
      if ((scan!=SCAN_ICONST && scan!=SCAN_DCONST) || idata<0 || idata>7) {
        asmerror="FPU registers have indexes 0 to 7";
        scan=SCAN_ERR; return; };
      Scanasm(SA_NAME);
      if (scan!=SCAN_SYMB || idata!=')') {
        asmerror="Closing parenthesis expected";
        scan=SCAN_ERR; return; };
      idata=j; scan=SCAN_FPU; return; };
    for (j=0; j<=8; j++) {
      if (strcmp(s,fpuname[j])!=0) continue;
      idata=j; scan=SCAN_FPU;          // FPU register (alternative coding)
      return; };
    for (j=0; j<=8; j++) {
      if (strcmp(s,mmxname[j])!=0) continue;
      idata=j; scan=SCAN_MMX;          // MMX register
      return; };
    for (j=0; j<=8; j++) {
      if (strcmp(s,crname[j])!=0) continue;
      idata=j; scan=SCAN_CR;           // Control register
      return; };
    for (j=0; j<=8; j++) {
      if (strcmp(s,drname[j])!=0) continue;
      idata=j; scan=SCAN_DR;           // Debug register
      return; };
    for (j=0; j<sizeof(sizename)/sizeof(sizename[0]); j++) {
      if (strcmp(s,sizename[j])!=0) continue;
      pcmd=asmcmd; Scanasm(SA_NAME);
      if (scan!=SCAN_PTR)              // Fetch non-functional "PTR"
        asmcmd=pcmd;
      idata=j; scan=SCAN_OPSIZE;       // Operand (data) size in bytes
      return; };
    if (strcmp(s,"EIP")==0) {          // Register EIP
      scan=SCAN_EIP; idata=0; return; };
    if (strcmp(s,"SHORT")==0) {        // Relative jump has 1-byte offset
      scan=SCAN_JMPSIZE; idata=1; return; };
    if (strcmp(s,"LONG")==0) {         // Relative jump has 4-byte offset
      scan=SCAN_JMPSIZE; idata=2; return; };
    if (strcmp(s,"NEAR")==0) {         // Jump within same code segment
      scan=SCAN_JMPSIZE; idata=4; return; };
    if (strcmp(s,"FAR")==0) {          // Jump to different code segment
      scan=SCAN_JMPSIZE; idata=8; return; };
    if (strcmp(s,"LOCAL")==0 && *asmcmd=='.') {
      asmcmd++;
      while (*asmcmd==' ' || *asmcmd=='\t')
        asmcmd++;                      // Skip trailing spaces
      if (!isdigit(*asmcmd)) {
        asmerror="Integer number expected";
        scan=SCAN_ERR; return; };
      while (isdigit(*asmcmd))         // LOCAL index is decimal number!
        idata=idata*10+(*asmcmd++)-'0';
      scan=SCAN_LOCAL; return; };
    if (strcmp(s,"ARG")==0 && *asmcmd=='.') {
      asmcmd++;
      while (*asmcmd==' ' || *asmcmd=='\t')
        asmcmd++;                      // Skip trailing spaces
      if (!isdigit(*asmcmd)) {
        asmerror="Integer number expected";
        scan=SCAN_ERR; return; };
      while (isdigit(*asmcmd))         // ARG index is decimal number!
        idata=idata*10+(*asmcmd++)-'0';
      scan=SCAN_ARG; return; };
    if (strcmp(s,"REP")==0) {
      scan=SCAN_REP; return; };        // REP prefix
    if (strcmp(s,"REPE")==0 || strcmp(s,"REPZ")==0) {
      scan=SCAN_REPE; return; };       // REPE prefix
    if (strcmp(s,"REPNE")==0 || strcmp(s,"REPNZ")==0) {
      scan=SCAN_REPNE; return; };      // REPNE prefix
    if (strcmp(s,"LOCK")==0) {
      scan=SCAN_LOCK; return; };       // LOCK prefix
    if (strcmp(s,"PTR")==0) {
      scan=SCAN_PTR; return; };        // PTR in MASM addressing statements
    if (strcmp(s,"CONST")==0 || strcmp(s,"OFFSET")==0) {
      scan=SCAN_OFS; return; };        // Present but undefined offset/constant
    if (strcmp(s,"SIGNED")==0) {
      scan=SCAN_SIGNED; return; };     // Keyword "SIGNED" (in expressions)
    if (strcmp(s,"UNSIGNED")==0) {
      scan=SCAN_UNSIGNED; return; };   // Keyword "UNSIGNED" (in expressions)
    if (strcmp(s,"CHAR")==0) {
      scan=SCAN_CHAR; return; };       // Keyword "CHAR" (in expressions)
    if (strcmp(s,"FLOAT")==0) {
      scan=SCAN_FLOAT; return; };      // Keyword "FLOAT" (in expressions)
    if (strcmp(s,"DOUBLE")==0) {
      scan=SCAN_DOUBLE; return; };     // Keyword "DOUBLE" (in expressions)
    if (strcmp(s,"FLOAT10")==0) {
      scan=SCAN_FLOAT10; return; };    // Keyword "FLOAT10" (in expressions)
    if (strcmp(s,"STRING")==0) {
      scan=SCAN_STRING; return; };     // Keyword "STRING" (in expressions)
    if (strcmp(s,"UNICODE")==0) {
      scan=SCAN_UNICODE; return; };    // Keyword "UNICODE" (in expressions)
    if (strcmp(s,"MSG")==0) {
      scan=SCAN_MSG; return; };        // Pseudovariable MSG (in expressions)
    if (mode & SA_NAME) {
      idata=i; scan=SCAN_NAME;         // Don't try to decode symbolic label
      return; }
    asmerror="Unknown identifier";
    scan=SCAN_ERR; return; }
  else if (isdigit(*asmcmd)) {         // Constant
    base=0; maxdigit=0; decimal=hex=0L; floating=0.0;
    if (asmcmd[0]=='0' && toupper(asmcmd[1])=='X') {
      base=16; asmcmd+=2; };           // Force hexadecimal number
    while (1) {
      if (isdigit(*asmcmd)) {
        decimal=decimal*10+(*asmcmd)-'0';
        floating=floating*10.0+(*asmcmd)-'0';
        hex=hex*16+(*asmcmd)-'0';
        if (maxdigit==0) maxdigit=9;
        asmcmd++; }
      else if (isxdigit(*asmcmd)) {
        hex=hex*16+toupper(*asmcmd++)-'A'+10;
        maxdigit=15; }
      else break; };
    if (maxdigit==0) {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产无人区一区二区三区| 日产欧产美韩系列久久99| 亚洲成人动漫在线免费观看| 精品一区二区三区不卡| 欧美在线你懂得| 26uuu精品一区二区在线观看| 一区二区在线观看免费| 成人午夜视频在线观看| 日韩视频一区二区三区| 亚洲一区二区欧美| 91免费视频观看| 久久影视一区二区| 久久国产日韩欧美精品| 91精品欧美一区二区三区综合在| 国产精品久久久久久一区二区三区 | 欧美怡红院视频| 国产精品看片你懂得| 国内欧美视频一区二区 | 99久久精品情趣| 久久久国产精品麻豆| 老司机午夜精品99久久| 91麻豆精品久久久久蜜臀| 亚洲激情一二三区| 91九色02白丝porn| 亚洲精品日韩综合观看成人91| 成人一区二区三区| 国产女同性恋一区二区| 国产精品一区久久久久| 久久精品一区二区三区不卡牛牛| 看片的网站亚洲| 精品久久久久久久久久久久久久久 | 久久久久久久免费视频了| 美腿丝袜亚洲综合| 日韩欧美中文字幕公布| 极品销魂美女一区二区三区| 精品99一区二区三区| 国产露脸91国语对白| 国产欧美一区二区三区沐欲| 成人丝袜高跟foot| 亚洲精品一二三| 欧美日韩一区小说| 免费看日韩精品| 久久久五月婷婷| 成人免费av网站| 1024国产精品| 欧美日韩中文字幕精品| 日韩电影在线免费| 久久天堂av综合合色蜜桃网| 成人在线一区二区三区| 亚洲男女一区二区三区| 欧美妇女性影城| 国产主播一区二区三区| 国产精品另类一区| 在线国产电影不卡| 日本不卡在线视频| 久久综合久色欧美综合狠狠| 波多野结衣中文字幕一区| 一区二区在线观看视频在线观看| 欧美日韩不卡一区| 国产精品69久久久久水密桃| 一区在线观看免费| 91精品国产一区二区三区香蕉| 久久99精品一区二区三区三区| 中文字幕国产一区二区| 色狠狠av一区二区三区| 久久精品理论片| 日韩毛片精品高清免费| 日韩女优视频免费观看| 不卡av免费在线观看| 日韩电影一二三区| 国产精品蜜臀av| 欧美一级视频精品观看| www.爱久久.com| 五月天国产精品| 国产精品女人毛片| 欧美xxxx在线观看| 欧美亚洲一区二区在线观看| 国产传媒一区在线| 性欧美疯狂xxxxbbbb| 国产欧美一区在线| 777欧美精品| 一本色道久久综合亚洲精品按摩| 日本一不卡视频| 中文字幕一区二区三区在线不卡 | 欧洲一区二区三区在线| 国内精品久久久久影院薰衣草| 亚洲乱码中文字幕| 久久久99精品久久| 欧美老年两性高潮| 色欧美乱欧美15图片| 国产精品一二三四区| 麻豆国产精品视频| 亚洲chinese男男1069| 亚洲日穴在线视频| 国产精品午夜春色av| wwwwww.欧美系列| 欧美一区二区高清| 欧美肥妇bbw| 欧洲精品在线观看| 91免费看片在线观看| k8久久久一区二区三区| 丁香婷婷综合五月| 国产激情视频一区二区三区欧美| 日韩二区在线观看| 日韩成人一级片| 亚洲va欧美va国产va天堂影院| 国产精品久久久久一区二区三区| 国产亚洲欧美日韩俺去了| 欧美一区二区三区四区在线观看 | 美国精品在线观看| 日本亚洲最大的色成网站www| 亚洲在线视频一区| 亚洲综合免费观看高清完整版| 一色屋精品亚洲香蕉网站| 国产精品免费av| 日韩毛片视频在线看| 亚洲女人****多毛耸耸8| 国产精品电影院| 亚洲欧洲成人精品av97| 18涩涩午夜精品.www| 亚洲精品欧美综合四区| 亚洲午夜在线电影| 日日噜噜夜夜狠狠视频欧美人| 天天操天天干天天综合网| 欧美aaaaaa午夜精品| 狠狠色丁香久久婷婷综合_中| 国产在线精品一区二区三区不卡 | 久草中文综合在线| 国产精品资源在线看| 丁香另类激情小说| 色综合久久88色综合天天免费| 日本韩国一区二区三区视频| 欧美日韩一区成人| 久久久久久麻豆| 国产精品久久久久精k8| 亚洲福利一二三区| 精品亚洲免费视频| 成人动漫一区二区在线| 欧美一a一片一级一片| 日韩三级在线免费观看| 国产日韩欧美精品在线| 亚洲日本欧美天堂| 日韩电影在线观看电影| 成人va在线观看| 欧美视频一区二区三区| 久久免费看少妇高潮| 亚洲激情五月婷婷| 国精品**一区二区三区在线蜜桃| 99久久99精品久久久久久| 欧美色图免费看| 国产午夜久久久久| 一区二区三区久久| 国产麻豆视频一区| 欧美日韩亚洲丝袜制服| 国产亚洲短视频| 亚洲国产欧美日韩另类综合| 国产一区视频导航| 欧洲另类一二三四区| 国产女主播一区| 免费观看成人鲁鲁鲁鲁鲁视频| 不卡一二三区首页| 日韩一区二区免费在线电影| 亚洲女性喷水在线观看一区| 韩国理伦片一区二区三区在线播放| 一本大道综合伊人精品热热| 久久美女高清视频| 天堂成人国产精品一区| 99久久精品99国产精品| 26uuu欧美| 日av在线不卡| 在线观看日产精品| 中文一区一区三区高中清不卡| 免费久久精品视频| 欧美视频日韩视频| 亚洲美女视频一区| 成人性生交大片免费看在线播放 | 黄一区二区三区| 欧美在线观看一区| 日韩毛片在线免费观看| 国产激情偷乱视频一区二区三区| 欧美精品国产精品| 亚洲免费在线观看视频| 波多野结衣一区二区三区 | 美腿丝袜一区二区三区| 欧美日韩国产高清一区二区三区 | 国产麻豆日韩欧美久久| 精品三级在线观看| 日本欧美大码aⅴ在线播放| 欧美日韩亚洲国产综合| 一区二区三区欧美| 欧美亚洲国产一卡| 亚洲女与黑人做爰| 在线中文字幕一区| 夜夜嗨av一区二区三区网页| 日本福利一区二区| 一区二区三区欧美日| 91成人国产精品| 午夜精品久久久久久久久久久| 欧美三级视频在线观看| 亚洲国产综合色|