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

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

?? decomp_action.c

?? 我自己寫的flash player decompiler,不是幡匯編器
?? C
?? 第 1 頁 / 共 5 頁
字號:
#include <stdio.h>#include <sys/types.h>#include "decomp_action.h"static unsigned 	char *  	action_block;static ssize_t 	action_len=0;static size_t	ptr_offset=0;static char *false_str="false";static char *true_str="true";static char *null_str="NULL";static char *undef_str="undefined";static struct mem_chain *mem_head=NULL;static sigjmp_buf jmpbuf;static signed int this_errno=0;static int print_code=0;static print_buffer my_buffer;static int gIndent = 0;char indentBuf[256];int byteorder;my_dictionary *dictionary;static reg_array *reg_global=NULL;static reg_array *reg_current=NULL;static struct ActionRecord *action_save=NULL;static Stack stack = NULL;static  uint32_t dictionary_count=0;/*funciton2的6個自動寄存器預定義值*/char *arNames[] = {"this", "arguments", "super", "_root", "_parent", "_global"};/*6個自動寄存器true測試位*/unsigned int arFlags[] = {0x0001, 0x0004, 0x0010, 0x0040, 0x0080, 0x0100};/*6個自動寄存器false測試位*/unsigned int arNotFlags[] = {0x0002, 0x0008, 0x0020, 0x0000, 0x0000, 0x0000};/*--------------------add_mem_chain--------------------------*/////////////////////////////////////////////////////////////////////               add_mem_chain函數                              ////                                                              //// 用于將calloc系統調用分配的內存掛接到臨時鏈表中,待退出時釋放  //// ptr指向分配的內存區域,type指定類型,類型值將用來標示這個內存  //// 的釋放方式,size可以用來表示長度,該長度的意義根據type的不同   //// 而不同,add_mem_chain只是簡單的0將size保存在鏈表節點的size成員//// 中                                                           ////////////////////////////////////////////////////////////////////void * add_mem_chain(void *ptr,int type,ssize_t size) {    struct mem_chain *tmp_node;    tmp_node=Malloc(sizeof(struct mem_chain));    memset(tmp_node,0,sizeof(struct mem_chain));    tmp_node->ptr=ptr;    tmp_node->size=size;    tmp_node->type=type;    tmp_node->next=mem_head;    mem_head=tmp_node;    return(tmp_node);}/*--------------------del_mem_chain----------------------------*////////////////////////////////////////////////////////////////////////                  從臨時內存鏈表中取下內存節點                   ////  該函數負責釋放內存鏈表節點,而不釋放節點上掛接的內存區域        ////  ptr指針標示要取下哪個內存區域,如果在鏈表中不能找到該區域       ////  則返回NULL表示錯誤,部分函數會將函數內部動態分配和使用的內存    ////  掛接到臨時鏈表中,以防備函數中途失敗導致不能釋放內存            ////  這些函數會在成功返回前將內存從鏈表中取下                       ///////////////////////////////////////////////////////////////////////void * del_mem_chain(void *ptr) {    struct mem_chain **tmp_node=&mem_head,*free_node=NULL;    void * str=NULL;    while(*tmp_node) {        if(ptr==(*tmp_node)->ptr) {            str=ptr;            free_node=(*tmp_node);            (*tmp_node)=(*tmp_node)->next;            break;        }        tmp_node=&((*tmp_node)->next);    }    if(free_node)        free(free_node);    return(str);}/*------------------------my_readBit------------------------*/////////////////////////////////////////////////////////////////////////                      讀bit位函數                                 //// 從一個字節數據中讀指定連續bit位,如讀(char)val的第2和第3bit的值   //// 要讀如的bit的位置必須是連續的,mask為位掩碼                       //// example:                                                         ////         result=my_readBit(val,"01100000");                       ////////////////////////////////////////////////////////////////////////uint8_t my_readBit(uint8_t val,const char *mask) {    uint32_t n=0,ck=0;    uint8_t v=0,last='0';    int fir_local=IMPOSSIBLE_BIT_LOCAL,i=0;    if(!mask||(n=strlen(mask))!=8)        err_debug(ERR_ARGUMENT,"my_readBit:invalid argument!");    for(i=(n-1);i>=0;i--) {        if(last!=mask[i]) {            if(++ck>2)                err_debug(ERR_ARGUMENT,"my_readBit:Invalid mask argument:\"%s\"",mask);            last=mask[i];        }        if(mask[i]=='1') {            if(fir_local==IMPOSSIBLE_BIT_LOCAL)                fir_local=(n-i-1);            if((1<<(n-i-1)) & val)                v|=1<<(n-i-1-fir_local);        } else        if(mask[i]=='0') {}            else                err_debug(ERR_ARGUMENT,"my_readBit:Invalid mask argument:\"%s\"",mask);    }    if(ck>2)        err_debug(ERR_ARGUMENT,"my_readBit:Invalid mask argument:\"%s\"",mask);    return (v);}////////////////////////////////////////////////////////////              Malloc內存動態分配函數                  ////                                                      ////            加入了錯誤處理的malloc函數                ////                                                      /////////////////////////////////////////////////////////////*------------------------Malloc------------------------*/void * Malloc(size_t thislen) {    void *ptr;    if(thislen<=0) {        err_debug(ERR_ARGUMENT,"Malloc:wrong argument!");    }    if(thislen>BUFFER_MAX_SIZE) {        err_debug(ERR_ARGUMENT,"Malloc:wrong argument!");    }RE_MALLOC:    if((ptr=malloc(thislen))==NULL) {        if(errno==EINTR)            goto RE_MALLOC;        else            err_debug(ERR_MEMORY,"Malloc:Cannot allocate memory!");    }    memset(ptr,0,thislen);    return(ptr);}/*----------------------Realloc------------------------*////////////////////////////////////////////////////////////               Realloc重新內存分配函數               ////                                                     ////                  加入了錯誤處理                     ////                                                     ////                                                     ///////////////////////////////////////////////////////////void *Realloc(void *oldptr,size_t thislen) {    void *ptr;    if(thislen<=0||oldptr==NULL) {        err_debug(ERR_ARGUMENT,"Realloc:wrong argument!");    }    if(thislen>BUFFER_MAX_SIZE) {        err_debug(ERR_ARGUMENT,"Realloc:wrong argument!");    }RE_ALLOC:    if((ptr=realloc(oldptr,thislen))==NULL) {        if(errno==EINTR)            goto RE_ALLOC;        else            err_debug(ERR_MEMORY,"Realloc:Cannot allocate memory!");    }    return(ptr);}/*--------------------re_allocate_buffer-----------------*////////////////////////////////////////////////////////////////                  re_allocate_buffer                     ////                                                         ////      用于輸出緩沖在空間不足時區重新分配內存             ////      并拷貝已有數據                                     ////      thislen參數指明要重新分配的空間的大小              ////      返回值為分配到的空間size                           ///////////////////////////////////////////////////////////////size_t re_allocate_buffer(size_t thislen) {    char *ptr=NULL;    uint32_t old_cur=0;    if(thislen<0||thislen>=BUFFER_MAX_SIZE) {        err_debug(ERR_ARGUMENT,"re_allocate_buffer:wrong argument!");    }    /*如果分配過內存,并且要重新分配的長度等于0則釋放已有內存*/    if(thislen==0) {        if(my_flags!=BUFFER_UN_INIT && my_ptr)            free(my_ptr);        INIT_BUFFER;        return(0);    }    /*如果沒有分配過內存,則調用Malloc分配內存*/    if(my_flags==BUFFER_UN_INIT) {        old_cur=0;        ptr=(char *)Malloc(thislen);    } else {        /*否則調用Realloc重新分配內存*/        old_cur=my_cur;        ptr=(char *)Realloc(my_ptr,thislen);    }    /*清零比原有內存區多出來的分配的空間*/    if(thislen>old_cur)        memset((ptr+old_cur),0,thislen-old_cur);    my_ptr=ptr;    my_len=thislen;    my_cur=old_cur;    my_flags=BUFFER_INIT;    return (thislen);}/*---------------------my_printf-------------------------*//////////////////////////////////////////////////////////////                 打印輸出到內存緩沖區函數              ////                                                       ////                完全兼容printf函數調用方式             ////         該函數發現緩沖區空間不足時重新分配緩沖區      ////         并且復制已有數據到新的緩沖區中                ////         復制工作是靠realloc函數實現的                 ////         該函數調用方式和printf函數相同,               ////         返回值是打印的字節數                          ////                                                       /////////////////////////////////////////////////////////////int my_printf(const char *fmt,...) {    va_list ap;    int i;    size_t tmp_len;    /*如果沒有初始化過內存緩沖區則分配基本大小(BUFFER_DEF_SIZE)的緩沖區*/    if(my_flags==BUFFER_UN_INIT) {        if(re_allocate_buffer(BUFFER_DEF_SIZE)!=BUFFER_DEF_SIZE)            err_debug(ERR_CALL,"my_printf:re_allocate call failure!");    }    /*如果調用BUFFER_WILL_FULL宏發現緩沖區空間不足則增加BUFFER_STEP_SIZE字節*/    while(BUFFER_WILL_FULL) {        tmp_len=my_len+BUFFER_STEP_SIZE;        if(re_allocate_buffer(tmp_len)!=tmp_len)            err_debug(ERR_CALL,"my_printf:re_allocate call failure!");    }    /*打印內存函數vsnprintf會保證不會寫多于剩余緩沖區大小的字節*/RE_PRINT:    va_start(ap,fmt);    i=vsnprintf(my_cur_ptr,my_remain_len,fmt,ap);    va_end(ap);    /*如果vsnprintf返回值大于或者等于剩余的空間數則說明還有剩余內容未打印*/    /*則重新多分配buffer_step_size的內存再次調用vsnprintf語句,直至*/    /*起始地址加上vsnprintf的返回值小于當前剩余的內存數為止*/    if((my_cur+i)>=my_len-2) {        tmp_len=my_len+(BUFFER_STEP_SIZE>i?BUFFER_STEP_SIZE:(i+BUFFER_STEP_SIZE));        if(re_allocate_buffer(tmp_len)!=tmp_len)            err_debug(ERR_CALL,"my_printf:re_allocate call failure!");        goto RE_PRINT;    }    /*更新當前緩沖區空閑區域的起始位置*/    my_cur+=i;    return(i);}/*-----------------------My_readDouble--------------------------*/////////////////////////////////////////////////////////////////////      從輸入的p-code內存中讀一個double(8byte)                 ////                   因為字節序的原因要重新更新位置             ////                                                              ////////////////////////////////////////////////////////////////////double My_readDouble() {    char data[8];    if(!TEST_SPACE(sizeof(double))) {        err_debug(ERR_INPUT,"My_readDouble:no enough input");    }    data[4] = My_readUInt8();    data[5] = My_readUInt8();    data[6] = My_readUInt8();    data[7] = My_readUInt8();    data[0] = My_readUInt8();    data[1] = My_readUInt8();    data[2] = My_readUInt8();    data[3] = My_readUInt8();    return *((double *)data);}/*--------------------My_readString------------------------------*//////////////////////////////////////////////////////////////////////                  從輸入P-code的內存中讀一個字符串             ////                  如果字符串中包含制表符,回車,換行則轉換成     ////                  轉義子符\t,\n或\r                            /////////////////////////////////////////////////////////////////////char *My_readString() {    int len = 0, buflen = 256;    char c, *buf, *p;    buf = (char *)Malloc(sizeof(char)*256);    p = buf;    while((c=(char)My_readUInt8()) != '\0'&& !block_eof()) {        if(len >= buflen-2) {            buf = (char *)Realloc(buf, sizeof(char)*(buflen+256));            buflen += 256;            p = buf+len;        }        switch(c) {        case '\n':            *(p++) = '\\';            *(p++) = 'n';            ++len;            break;        case '\t':            *(p++) = '\\';            *(p++) = 't';            ++len;            break;        case '\r':

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕乱码亚洲精品一区| 久久精品国产999大香线蕉| 蜜乳av一区二区三区| eeuss鲁一区二区三区| 欧美精品一卡两卡| 亚洲美女在线一区| 国产成人精品一区二| 日韩一卡二卡三卡四卡| 亚洲另类春色国产| 国产乱国产乱300精品| 777色狠狠一区二区三区| 亚洲日本在线看| 国产盗摄精品一区二区三区在线| 日韩一区二区免费在线电影| 亚洲图片一区二区| 一本久久综合亚洲鲁鲁五月天 | 欧美一区二区私人影院日本| 亚洲视频在线一区二区| 成人午夜激情影院| 欧美电影免费观看高清完整版在线观看 | 午夜精品福利在线| 欧美精品久久一区| 亚洲永久免费视频| 日本韩国欧美三级| 亚洲精品国产精品乱码不99| 欧美国产一区二区| 国产成人精品亚洲日本在线桃色| 日韩一区二区三区精品视频| 免费看精品久久片| 日韩午夜三级在线| 精品一区二区三区欧美| 欧美猛男gaygay网站| 亚洲h在线观看| 欧美一区二区视频在线观看2022| 轻轻草成人在线| 91精品国产一区二区| 久久狠狠亚洲综合| 久久久精品日韩欧美| 成人一区二区在线观看| 国产精品成人免费| 91国产免费看| 免费看日韩精品| www久久精品| 成人免费高清在线观看| 一区二区三区在线视频播放| 久久电影国产免费久久电影 | 亚洲一区二区欧美激情| 日本道免费精品一区二区三区| 亚洲欧美激情插| 欧美三级电影网| 久久国产成人午夜av影院| 国产欧美日韩一区二区三区在线观看 | 国产在线一区二区| 国产日韩在线不卡| 91国模大尺度私拍在线视频| 日本视频一区二区三区| 久久久一区二区三区捆绑**| 不卡的看片网站| 一区二区三区在线免费| 91精品国产91热久久久做人人| 激情综合色综合久久综合| 日本一区二区三区四区| 欧美视频一区二区三区在线观看| 日日夜夜一区二区| 国产精品三级av在线播放| 欧美日韩中文字幕一区| 国产精品综合在线视频| 亚洲尤物在线视频观看| 国产视频一区二区在线观看| 在线观看日韩av先锋影音电影院| 日本不卡的三区四区五区| 国产视频一区不卡| 午夜日韩在线观看| 欧美伊人久久久久久午夜久久久久| 亚洲国产va精品久久久不卡综合| 日韩欧美第一区| 色欲综合视频天天天| 精品无人码麻豆乱码1区2区 | 91看片淫黄大片一级在线观看| 午夜不卡在线视频| 综合亚洲深深色噜噜狠狠网站| 日韩欧美视频一区| 欧洲一区二区三区在线| 国产激情视频一区二区三区欧美 | 亚洲成人免费观看| 欧美国产欧美综合| 精品久久久久久久人人人人传媒| 精品国产乱码久久久久久蜜臀| 亚洲色图欧美偷拍| 欧美一区二区视频网站| 97超碰欧美中文字幕| 国产在线不卡一卡二卡三卡四卡| 亚洲综合清纯丝袜自拍| 欧美国产丝袜视频| 国产亚洲欧美激情| 欧美videofree性高清杂交| 欧美日韩的一区二区| 972aa.com艺术欧美| 成人国产精品免费网站| 久久99精品一区二区三区| 日韩国产一区二| 亚洲一区二区三区视频在线播放 | 7878成人国产在线观看| 日本大香伊一区二区三区| 风流少妇一区二区| 亚洲图片欧美色图| 中文字幕亚洲一区二区va在线| 久久久久久久久久电影| 久久一二三国产| 日韩欧美视频一区| 精品国产91洋老外米糕| 欧美成人国产一区二区| 精品国产伦一区二区三区免费 | 欧美人xxxx| 在线不卡免费av| 91.xcao| 51午夜精品国产| 精品国产自在久精品国产| 精品裸体舞一区二区三区| 337p粉嫩大胆色噜噜噜噜亚洲| 日韩三级在线观看| 亚洲精品一区二区三区影院| 精品国产乱码久久久久久蜜臀 | 色诱亚洲精品久久久久久| 91国内精品野花午夜精品| 欧美丝袜第三区| 欧美一区二区人人喊爽| 久久久久成人黄色影片| 亚洲欧洲日韩在线| 亚洲电影激情视频网站| 青青草成人在线观看| 国产一区二区在线观看视频| 国产91精品在线观看| 91视频一区二区| 欧美人成免费网站| 国产人成一区二区三区影院| 中文字幕一区二区在线播放| 亚洲精品国产精华液| 毛片一区二区三区| 国产黄人亚洲片| 欧美日韩中文精品| 国产调教视频一区| 亚洲综合色在线| 九九视频精品免费| 一本久久综合亚洲鲁鲁五月天| 欧美精品精品一区| 欧美国产欧美综合| 日韩高清在线不卡| 波多野洁衣一区| 宅男在线国产精品| 国产精品久久二区二区| 天天综合日日夜夜精品| 丁香婷婷综合五月| 日韩欧美一级在线播放| 日韩理论片一区二区| 麻豆精品国产传媒mv男同| 色综合久久久久综合| 99国产精品久| 麻豆一区二区在线| 成人高清免费观看| 欧美日韩一区二区三区视频| 久久女同性恋中文字幕| 亚洲高清不卡在线| 成人一级黄色片| 日韩你懂的电影在线观看| 亚洲欧美日韩国产另类专区| 久久成人麻豆午夜电影| 欧美亚洲日本国产| 国产精品狼人久久影院观看方式| 奇米色777欧美一区二区| 91在线播放网址| 久久久国际精品| 蜜桃视频在线观看一区二区| 91美女福利视频| 中文字幕国产精品一区二区| 久久国产人妖系列| 欧美精品v日韩精品v韩国精品v| 中文av一区二区| 国产盗摄精品一区二区三区在线| 日韩欧美国产小视频| 午夜伊人狠狠久久| 欧美亚洲图片小说| 一区二区三国产精华液| av中文字幕一区| 中文字幕一区二区三区视频| 国产美女视频91| 蜜桃91丨九色丨蝌蚪91桃色| 在线免费av一区| 亚洲品质自拍视频| 成人丝袜18视频在线观看| 2023国产精华国产精品| 美女视频一区二区| 日韩欧美一区二区视频| 免费在线看成人av| 日韩午夜激情视频| 久久国产剧场电影| 久久婷婷国产综合国色天香| 国产伦精品一区二区三区在线观看 | 在线影视一区二区三区| 亚洲精品乱码久久久久|