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

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

?? msc.c

?? 這是一個開放源代碼的與WINNT/WIN2K/WIN2003兼容的操作系統
?? C
?? 第 1 頁 / 共 5 頁
字號:
    const unsigned int*         filetab;
    const struct p_string*      p_fn;
    int				i;
    int				k;
    struct codeview_linetab*    lt_hdr;
    const unsigned int*         lt_ptr;
    int				nfile;
    int				nseg;
    union any_size		pnt;
    union any_size		pnt2;
    const struct startend*      start;
    int				this_seg;
    struct symt_compiland*      compiland;
 
    /*
     * Now get the important bits.
     */
    pnt.c = linetab;
    nfile = *pnt.s++;
    nseg = *pnt.s++;
 
    filetab = (const unsigned int*) pnt.c;
 
    /*
     * Now count up the number of segments in the file.
     */
    nseg = 0;
    for (i = 0; i < nfile; i++)
    {
        pnt2.c = linetab + filetab[i];
        nseg += *pnt2.s;
    }
 
    /*
     * Next allocate the header we will be returning.
     * There is one header for each segment, so that we can reach in
     * and pull bits as required.
     */
    lt_hdr = (struct codeview_linetab*)
        HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (nseg + 1) * sizeof(*lt_hdr));
    if (lt_hdr == NULL)
    {
        goto leave;
    }
 
    /*
     * Now fill the header we will be returning, one for each segment.
     * Note that this will basically just contain pointers into the existing
     * line table, and we do not actually copy any additional information
     * or allocate any additional memory.
     */
 
    this_seg = 0;
    for (i = 0; i < nfile; i++)
    {
        /*
         * Get the pointer into the segment information.
         */
        pnt2.c = linetab + filetab[i];
        file_segcount = *pnt2.s;
 
        pnt2.ui++;
        lt_ptr = (const unsigned int*) pnt2.c;
        start = (const struct startend*)(lt_ptr + file_segcount);
 
        /*
         * Now snarf the filename for all of the segments for this file.
         */
        if (pascal_str)
        {
            p_fn = (const struct p_string*)(start + file_segcount);
            memset(filename, 0, sizeof(filename));
            memcpy(filename, p_fn->name, p_fn->namelen);
            compiland = symt_new_compiland(module, filename);
        }
        else
            compiland = symt_new_compiland(module, (const char*)(start + file_segcount));
 
        for (k = 0; k < file_segcount; k++, this_seg++)
	{
            pnt2.c = linetab + lt_ptr[k];
            lt_hdr[this_seg].start      = start[k].start;
            lt_hdr[this_seg].end        = start[k].end;
            lt_hdr[this_seg].compiland  = compiland;
            lt_hdr[this_seg].segno      = *pnt2.s++;
            lt_hdr[this_seg].nline      = *pnt2.s++;
            lt_hdr[this_seg].offtab     = pnt2.ui;
            lt_hdr[this_seg].linetab    = (const unsigned short*)(pnt2.ui + lt_hdr[this_seg].nline);
	}
    }
 
leave:
 
  return lt_hdr;
 
}
 
/*========================================================================
 * Process CodeView symbol information.
 */
 
static unsigned int codeview_map_offset(const struct msc_debug_info* msc_dbg,
                                        unsigned int offset)
{
    int                 nomap = msc_dbg->nomap;
    const OMAP_DATA*    omapp = msc_dbg->omapp;
    int                 i;
 
    if (!nomap || !omapp) return offset;
 
    /* FIXME: use binary search */
    for (i = 0; i < nomap - 1; i++)
        if (omapp[i].from <= offset && omapp[i+1].from > offset)
            return !omapp[i].to ? 0 : omapp[i].to + (offset - omapp[i].from);
 
    return 0;
}
 
static const struct codeview_linetab*
codeview_get_linetab(const struct codeview_linetab* linetab,
                     unsigned seg, unsigned offset)
{
    /*
     * Check whether we have line number information
     */
    if (linetab)
    {
        for (; linetab->linetab; linetab++)
            if (linetab->segno == seg &&
                linetab->start <= offset && linetab->end   >  offset)
                break;
        if (!linetab->linetab) linetab = NULL;
    }
    return linetab;
}
 
static unsigned codeview_get_address(const struct msc_debug_info* msc_dbg, 
                                     unsigned seg, unsigned offset)
{
    int			        nsect = msc_dbg->nsect;
    const IMAGE_SECTION_HEADER* sectp = msc_dbg->sectp;
 
    if (!seg || seg > nsect) return 0;
    return msc_dbg->module->module.BaseOfImage +
        codeview_map_offset(msc_dbg, sectp[seg-1].VirtualAddress + offset);
}
 
static void codeview_add_func_linenum(struct module* module, 
                                      struct symt_function* func,
                                      const struct codeview_linetab* linetab,
                                      unsigned offset, unsigned size)
{
    unsigned int        i;
 
    if (!linetab) return;
    for (i = 0; i < linetab->nline; i++)
    {
        if (linetab->offtab[i] >= offset && linetab->offtab[i] < offset + size)
        {
            symt_add_func_line(module, func, linetab->compiland->source,
                               linetab->linetab[i], linetab->offtab[i] - offset);
        }
    }
}
 
static int codeview_snarf(const struct msc_debug_info* msc_dbg, const BYTE* root, 
                          int offset, int size,
                          struct codeview_linetab* linetab)
{
    struct symt_function*               curr_func = NULL;
    int                                 i, length;
    const struct codeview_linetab*      flt;
    struct symt_block*                  block = NULL;
    struct symt*                        symt;
    const char*                         name;
 
    /*
     * Loop over the different types of records and whenever we
     * find something we are interested in, record it and move on.
     */
    for (i = offset; i < size; i += length)
    {
        const union codeview_symbol* sym = (const union codeview_symbol*)(root + i);
        length = sym->generic.len + 2;
        if (length & 3) FIXME("unpadded len %u\n", length + 2);
 
        switch (sym->generic.id)
        {
        /*
         * Global and local data symbols.  We don't associate these
         * with any given source file.
         */
	case S_GDATA_V1:
	case S_LDATA_V1:
            flt = codeview_get_linetab(linetab, sym->data_v1.segment, sym->data_v1.offset);
            symt_new_global_variable(msc_dbg->module, 
                                     flt ? flt->compiland : NULL,
                                     terminate_string(&sym->data_v1.p_name), sym->generic.id == S_LDATA_V1,
                                     codeview_get_address(msc_dbg, sym->data_v1.segment, sym->data_v1.offset),
                                     0,
                                     codeview_get_type(sym->data_v1.symtype, FALSE));
	    break;
	case S_GDATA_V2:
	case S_LDATA_V2:
            flt = codeview_get_linetab(linetab, sym->data_v2.segment, sym->data_v2.offset);
            name = terminate_string(&sym->data_v2.p_name);
            if (name)
                symt_new_global_variable(msc_dbg->module, flt ? flt->compiland : NULL,
                                         name, sym->generic.id == S_LDATA_V2,
                                         codeview_get_address(msc_dbg, sym->data_v2.segment, sym->data_v2.offset),
                                         0,
                                         codeview_get_type(sym->data_v2.symtype, FALSE));
	    break;
	case S_GDATA_V3:
	case S_LDATA_V3:
            flt = codeview_get_linetab(linetab, sym->data_v3.segment, sym->data_v3.offset);
            if (*sym->data_v3.name)
                symt_new_global_variable(msc_dbg->module, flt ? flt->compiland : NULL,
                                         sym->data_v3.name,
                                         sym->generic.id == S_LDATA_V3,
                                         codeview_get_address(msc_dbg, sym->data_v3.segment, sym->data_v3.offset),
                                         0,
                                         codeview_get_type(sym->data_v3.symtype, FALSE));
	    break;
 
	case S_PUB_V1: /* FIXME is this really a 'data_v1' structure ?? */
            if (!(dbghelp_options & SYMOPT_NO_PUBLICS))
            {
                flt = codeview_get_linetab(linetab, sym->data_v1.segment, sym->data_v1.offset);
                symt_new_public(msc_dbg->module, flt ? flt->compiland : NULL,
                                terminate_string(&sym->data_v1.p_name), 
                                codeview_get_address(msc_dbg, sym->data_v1.segment, sym->data_v1.offset),
                                0, TRUE /* FIXME */, TRUE /* FIXME */);
            }
            break;
	case S_PUB_V2: /* FIXME is this really a 'data_v2' structure ?? */
            if (!(dbghelp_options & SYMOPT_NO_PUBLICS))
            {
                flt = codeview_get_linetab(linetab, sym->data_v2.segment, sym->data_v2.offset);
                symt_new_public(msc_dbg->module, flt ? flt->compiland : NULL,
                                terminate_string(&sym->data_v2.p_name), 
                                codeview_get_address(msc_dbg, sym->data_v2.segment, sym->data_v2.offset),
                                0, TRUE /* FIXME */, TRUE /* FIXME */);
            }
	    break;
 
        /*
         * Sort of like a global function, but it just points
         * to a thunk, which is a stupid name for what amounts to
         * a PLT slot in the normal jargon that everyone else uses.
         */
	case S_THUNK_V1:
            flt = codeview_get_linetab(linetab, sym->thunk_v1.segment, sym->thunk_v1.offset);
            symt_new_thunk(msc_dbg->module, flt ? flt->compiland : NULL,
                           terminate_string(&sym->thunk_v1.p_name), sym->thunk_v1.thtype,
                           codeview_get_address(msc_dbg, sym->thunk_v1.segment, sym->thunk_v1.offset),
                           sym->thunk_v1.thunk_len);
	    break;
	case S_THUNK_V3:
            flt = codeview_get_linetab(linetab, sym->thunk_v3.segment, sym->thunk_v3.offset);
            symt_new_thunk(msc_dbg->module, flt ? flt->compiland : NULL,
                           sym->thunk_v3.name, sym->thunk_v3.thtype,
                           codeview_get_address(msc_dbg, sym->thunk_v3.segment, sym->thunk_v3.offset),
                           sym->thunk_v3.thunk_len);
	    break;
 
        /*
         * Global and static functions.
         */
	case S_GPROC_V1:
	case S_LPROC_V1:
            flt = codeview_get_linetab(linetab, sym->proc_v1.segment, sym->proc_v1.offset);
            if (curr_func) FIXME("nested function\n");
            curr_func = symt_new_function(msc_dbg->module,
                                          flt ? flt->compiland : NULL,
                                          terminate_string(&sym->proc_v1.p_name),
                                          codeview_get_address(msc_dbg, sym->proc_v1.segment, sym->proc_v1.offset),
                                          sym->proc_v1.proc_len,
                                          codeview_get_type(sym->proc_v1.proctype, FALSE));
            codeview_add_func_linenum(msc_dbg->module, curr_func, flt, 
                                      sym->proc_v1.offset, sym->proc_v1.proc_len);
            symt_add_function_point(msc_dbg->module, curr_func, SymTagFuncDebugStart, sym->proc_v1.debug_start, NULL);
            symt_add_function_point(msc_dbg->module, curr_func, SymTagFuncDebugEnd, sym->proc_v1.debug_end, NULL);
	    break;
	case S_GPROC_V2:
	case S_LPROC_V2:
            flt = codeview_get_linetab(linetab, sym->proc_v2.segment, sym->proc_v2.offset);
            if (curr_func) FIXME("nested function\n");
            curr_func = symt_new_function(msc_dbg->module, 
                                          flt ? flt->compiland : NULL,
                                          terminate_string(&sym->proc_v2.p_name),
                                          codeview_get_address(msc_dbg, sym->proc_v2.segment, sym->proc_v2.offset),
                                          sym->proc_v2.proc_len,
                                          codeview_get_type(sym->proc_v2.proctype, FALSE));
            codeview_add_func_linenum(msc_dbg->module, curr_func, flt, 
                                      sym->proc_v2.offset, sym->proc_v2.proc_len);
            symt_add_function_point(msc_dbg->module, curr_func, SymTagFuncDebugStart, sym->proc_v2.debug_start, NULL);
            symt_add_function_point(msc_dbg->module, curr_func, SymTagFuncDebugEnd, sym->proc_v2.debug_end, NULL);
	    break;
	case S_GPROC_V3:
	case S_LPROC_V3:
            flt = codeview_get_linetab(linetab, sym->proc_v3.segment, sym->proc_v3.offset);
            if (curr_func) FIXME("nested function\n");
            curr_func = symt_new_function(msc_dbg->module, 
                                          flt ? flt->compiland : NULL,
                                          sym->proc_v3.name,
                                          codeview_get_address(msc_dbg, sym->proc_v3.segment, sym->proc_v3.offset),
                                          sym->proc_v3.proc_len,
                                          codeview_get_type(sym->proc_v3.proctype, FALSE));
            codeview_add_func_linenum(msc_dbg->module, curr_func, flt, 
                                      sym->proc_v3.offset, sym->proc_v3.proc_len);
            symt_add_function_point(msc_dbg->module, curr_func, SymTagFuncDebugStart, sym->proc_v3.debug_start, NULL);
            symt_add_function_point(msc_dbg->module, curr_func, SymTagFuncDebugEnd, sym->proc_v3.debug_end, NULL);
	    break;
        /*
         * Function parameters and stack variables.
         */
	case S_BPREL_V1:
            symt_add_func_local(msc_dbg->module, curr_func, 0, sym->stack_v1.offset,
                                block, codeview_get_type(sym->stack_v1.symtype, FALSE),
                                terminate_string(&sym->stack_v1.p_name));
            break;
	case S_BPREL_V2:
            symt_add_func_local(msc_dbg->module, curr_func, 0, sym->stack_v2.offset,
                                block, codeview_get_type(sym->stack_v2.symtype, FALSE),

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
激情图片小说一区| 99久久久久久| 一区精品在线播放| 在线播放欧美女士性生活| 成人污污视频在线观看| 午夜精品爽啪视频| 亚洲欧美日本在线| 国产亚洲欧美日韩日本| 日韩欧美aaaaaa| 欧美日韩一二三| 色狠狠综合天天综合综合| 日韩一区二区电影在线| 欧美性受极品xxxx喷水| 欧美中文字幕亚洲一区二区va在线 | 极品少妇一区二区| 尤物在线观看一区| 中文av一区二区| 日韩免费看的电影| 欧美日韩一级大片网址| 色哟哟一区二区三区| 成人一区二区三区| 国产精品资源在线| 久久99精品国产麻豆不卡| 五月天激情小说综合| 亚洲一区影音先锋| 亚洲精品少妇30p| 日韩毛片视频在线看| 日本一区二区三区在线不卡| 精品国产123| 日韩精品中文字幕一区| 欧美一区午夜视频在线观看 | 国产蜜臀97一区二区三区| 欧美tk—视频vk| 日韩视频免费观看高清完整版在线观看 | 国产亚洲综合av| 久久久国产精品不卡| 国产校园另类小说区| 日韩一区和二区| 精品免费国产一区二区三区四区| 欧美放荡的少妇| 日韩女同互慰一区二区| 欧美精品一区二区在线播放 | 国产精品久久毛片av大全日韩| 国产亚洲精品7777| 国产精品美女www爽爽爽| 国产精品久久久久一区| 亚洲私人影院在线观看| 亚洲三级理论片| 一区二区三区四区中文字幕| 亚洲一区免费视频| 日韩精彩视频在线观看| 日本美女一区二区| 精品无人码麻豆乱码1区2区| 国产在线视频一区二区三区| 国产成人精品三级| 成人av在线播放网址| 91亚洲国产成人精品一区二三| 91欧美激情一区二区三区成人| 91福利在线免费观看| 欧美日韩精品一区二区| 欧美va在线播放| 国产精品免费aⅴ片在线观看| 亚洲欧美日韩在线播放| 亚洲aaa精品| 狠狠狠色丁香婷婷综合激情 | 欧美不卡激情三级在线观看| 久久综合九色综合欧美98| 欧美高清在线一区二区| 亚洲最大的成人av| 蜜臀av性久久久久蜜臀av麻豆| 看片网站欧美日韩| a级高清视频欧美日韩| 在线免费一区三区| 日韩欧美成人一区二区| 亚洲婷婷综合色高清在线| 亚洲福中文字幕伊人影院| 精品一二线国产| 色综合色综合色综合色综合色综合 | 欧美激情综合网| 亚洲在线视频一区| 国产在线精品一区二区| 色婷婷国产精品久久包臀 | 欧美一区二区在线观看| 国产精品色眯眯| 日韩中文字幕亚洲一区二区va在线| 韩国成人精品a∨在线观看| 欧洲精品一区二区| 久久久国产精品麻豆| 午夜精品久久久久久久99樱桃| 国产99久久久国产精品潘金| 欧美区一区二区三区| 亚洲国产精品激情在线观看| 午夜久久久久久| 99这里只有久久精品视频| 91精品国产综合久久久蜜臀图片| 国产精品美女一区二区在线观看| 手机精品视频在线观看| www.欧美日韩| 亚洲精品在线免费播放| 亚洲一区二区欧美| 91一区二区三区在线观看| www国产成人| 丝袜国产日韩另类美女| 一本色道久久综合狠狠躁的推荐| 日韩精品在线一区| 亚洲va欧美va人人爽| 不卡视频一二三四| 久久久三级国产网站| 蜜臀久久99精品久久久画质超高清 | 欧美色图12p| 国产精品毛片高清在线完整版| 美日韩一区二区三区| 欧美亚洲综合一区| 国产精品电影一区二区| 国产精品中文字幕日韩精品| 91精品蜜臀在线一区尤物| 亚洲一区二区黄色| 色菇凉天天综合网| 亚洲欧美激情视频在线观看一区二区三区| 国产乱理伦片在线观看夜一区| 4438x亚洲最大成人网| 一区二区三区日韩精品| 99视频一区二区三区| 国产精品激情偷乱一区二区∴| 国内外成人在线| 精品日韩成人av| 免费观看在线色综合| 91精品一区二区三区久久久久久| 亚洲在线视频网站| 欧美在线free| 亚洲一区二区三区在线播放| 欧美专区日韩专区| 亚洲动漫第一页| 精品视频一区二区不卡| 亚洲国产成人av| 欧美日韩综合不卡| 五月激情综合网| 91麻豆精品国产综合久久久久久| 亚洲成a人v欧美综合天堂下载 | 成人爱爱电影网址| 国产精品福利影院| 日本大香伊一区二区三区| 亚洲午夜免费视频| 欧美精品18+| 美女视频黄免费的久久| 久久综合色婷婷| 国产成人aaa| 成人免费一区二区三区视频| 91视频观看免费| 亚洲丰满少妇videoshd| 日韩一区二区不卡| 国产成人一级电影| 亚洲裸体xxx| 欧美日本高清视频在线观看| 丝袜美腿亚洲综合| 久久久久久久电影| 99热99精品| 亚洲第一福利一区| 久久一夜天堂av一区二区三区| 国产成a人亚洲| 亚洲三级久久久| 日韩一区二区在线看片| 粉嫩嫩av羞羞动漫久久久| 亚洲精品成人天堂一二三| 7799精品视频| 国产精品888| 亚洲一区影音先锋| 久久综合久久鬼色| 91首页免费视频| 男女男精品视频| 国产精品色眯眯| 欧美疯狂性受xxxxx喷水图片| 国产精品69毛片高清亚洲| 亚洲最大的成人av| 久久久www免费人成精品| 色av一区二区| 久久69国产一区二区蜜臀| 亚洲欧美日韩一区二区 | 亚洲人成网站在线| 欧美一区二区三区在线视频| 国产91精品免费| 午夜成人免费电影| 国产蜜臀av在线一区二区三区| 欧美日韩大陆在线| 国产激情91久久精品导航| 午夜精品久久久久久久99水蜜桃| 欧美激情一区二区三区蜜桃视频| 欧美视频一区二区三区| 国产精品99久久久久久久vr| 亚洲成年人网站在线观看| 国产亚洲福利社区一区| 欧美精品久久99久久在免费线| 成人黄色小视频| 美洲天堂一区二卡三卡四卡视频| 亚洲欧美国产三级| 中文字幕不卡在线| 精品国产伦一区二区三区观看方式| 91福利小视频| 99久久免费视频.com| 韩国一区二区三区|