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

📄 assembler.cpp

📁 flash文件的解码程序
💻 CPP
字号:
#include <stdio.h>#include <stdlib.h>#include <string.h>#include "compile.h"#include "assembler.h"extern FILE *yyin;int yyparse();int len;Buffer asmBuffer;int nLabels;struct label{  char *name;  int offset;};struct label labels[256];int findLabel(char *label){  int i;	  for(i=0; i<nLabels; ++i)  {    if(strcmp(label, labels[i].name) == 0)      return i;  }  return -1;}void addLabel(char *label){  int i = findLabel(label);  if(i == -1)  {    labels[nLabels].name = strdup(label);    labels[nLabels].offset = len;    ++nLabels;  }  else    labels[i].offset = len;}int bufferBranchTarget(Buffer output, char *label){  int i = findLabel(label);  if(i == -1)  {    i = nLabels;    addLabel(label);  }  return bufferWriteS16(output, i);}void bufferPatchTargets(Buffer buffer){  int l, i=0;  unsigned char *output = (unsigned char *)buffer->buffer;  while(i<len)  {    if(output[i] & 0x80) /* then it's a multisbyte instruction */    {      if(output[i] == SWFACTION_BRANCHALWAYS ||	 output[i] == SWFACTION_BRANCHIFTRUE)      {	int target, offset;	i += 3; /* plus instruction plus two-sbyte length */	target = output[i];	offset = labels[target].offset - (i+2);	output[i] = offset & 0xff;	output[++i] = (offset>>8) & 0xff;	++i;      }      else      {	++i;	l = output[i];	++i;	l += output[i]<<8;	i += l+1;      }    }    else      ++i;  }}

⌨️ 快捷键说明

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