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

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

?? msc.c

?? winNT技術操作系統,國外開放的原代碼和LIUX一樣
?? C
?? 第 1 頁 / 共 5 頁
字號:
/*
 * File msc.c - read VC++ debug information from COFF and eventually
 * from PDB files.
 *
 * Copyright (C) 1996,      Eric Youngdale.
 * Copyright (C) 1999-2000, Ulrich Weigand.
 * Copyright (C) 2004,      Eric Pouech.
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library 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
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
 
/*
 * Note - this handles reading debug information for 32 bit applications
 * that run under Windows-NT for example.  I doubt that this would work well
 * for 16 bit applications, but I don't think it really matters since the
 * file format is different, and we should never get in here in such cases.
 *
 * TODO:
 *	Get 16 bit CV stuff working.
 *	Add symbol size to internal symbol table.
 */
 
#include "config.h"
#include "wine/port.h"
 
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
 
#include <string.h>
#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif
#ifndef PATH_MAX
#define PATH_MAX MAX_PATH
#endif
#include <stdarg.h>
#include "windef.h"
#include "winbase.h"
#include "winreg.h"
#include "winternl.h"
 
#include <pseh/pseh.h>
 
#include "wine/debug.h"
#include "dbghelp_private.h"
#include "mscvpdb.h"
 
WINE_DEFAULT_DEBUG_CHANNEL(dbghelp_msc);
 
#define MAX_PATHNAME_LEN 1024
 
/*========================================================================
 * Debug file access helper routines
 */
 
static _SEH_FILTER(page_fault)
{
    if (_SEH_GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION)
        return _SEH_EXECUTE_HANDLER;
    return _SEH_CONTINUE_SEARCH;
}
 
static void dump(const void* ptr, unsigned len)
{
    int         i, j;
    BYTE        msg[128];
    const char* hexof = "0123456789abcdef";
    const BYTE* x = (const BYTE*)ptr;
 
    for (i = 0; i < len; i += 16)
    {
        sprintf(msg, "%08x: ", i);
        memset(msg + 10, ' ', 3 * 16 + 1 + 16);
        for (j = 0; j < min(16, len - i); j++)
        {
            msg[10 + 3 * j + 0] = hexof[x[i + j] >> 4];
            msg[10 + 3 * j + 1] = hexof[x[i + j] & 15];
            msg[10 + 3 * j + 2] = ' ';
            msg[10 + 3 * 16 + 1 + j] = (x[i + j] >= 0x20 && x[i + j] < 0x7f) ?
                x[i + j] : '.';
        }
        msg[10 + 3 * 16] = ' ';
        msg[10 + 3 * 16 + 1 + 16] = '\0';
        FIXME("%s\n", msg);
    }
}
 
/*========================================================================
 * Process CodeView type information.
 */
 
#define MAX_BUILTIN_TYPES	0x0480
#define FIRST_DEFINABLE_TYPE    0x1000
 
static struct symt*     cv_basic_types[MAX_BUILTIN_TYPES];
 
#define SymTagCVBitField        (SymTagMax + 0x100)
struct codeview_bitfield
{
    struct symt         symt;
    unsigned            subtype;
    unsigned            bitposition;
    unsigned            bitlength;
};
 
struct cv_defined_module
{
    BOOL                allowed;
    unsigned int        num_defined_types;
    struct symt**       defined_types;
 
    struct codeview_bitfield* bitfields;
    unsigned            num_bitfields;
    unsigned            used_bitfields;
};
/* FIXME: don't make it static */
#define CV_MAX_MODULES          32
static struct cv_defined_module cv_zmodules[CV_MAX_MODULES];
static struct cv_defined_module*cv_current_module;
 
static void codeview_init_basic_types(struct module* module)
{
    /*
     * These are the common builtin types that are used by VC++.
     */
    cv_basic_types[T_NOTYPE] = NULL;
    cv_basic_types[T_ABS]    = NULL;
    cv_basic_types[T_VOID]   = &symt_new_basic(module, btVoid,  "void", 0)->symt;
    cv_basic_types[T_CHAR]   = &symt_new_basic(module, btChar,  "char", 1)->symt;
    cv_basic_types[T_SHORT]  = &symt_new_basic(module, btInt,   "short int", 2)->symt;
    cv_basic_types[T_LONG]   = &symt_new_basic(module, btInt,   "long int", 4)->symt;
    cv_basic_types[T_QUAD]   = &symt_new_basic(module, btInt,   "long long int", 8)->symt;
    cv_basic_types[T_UCHAR]  = &symt_new_basic(module, btUInt,  "unsigned char", 1)->symt;
    cv_basic_types[T_USHORT] = &symt_new_basic(module, btUInt,  "unsigned short", 2)->symt;
    cv_basic_types[T_ULONG]  = &symt_new_basic(module, btUInt,  "unsigned long", 4)->symt;
    cv_basic_types[T_UQUAD]  = &symt_new_basic(module, btUInt,  "unsigned long long", 8)->symt;
    cv_basic_types[T_REAL32] = &symt_new_basic(module, btFloat, "float", 4)->symt;
    cv_basic_types[T_REAL64] = &symt_new_basic(module, btFloat, "double", 8)->symt;
    cv_basic_types[T_RCHAR]  = &symt_new_basic(module, btInt,   "signed char", 1)->symt;
    cv_basic_types[T_WCHAR]  = &symt_new_basic(module, btWChar, "wchar_t", 2)->symt;
    cv_basic_types[T_INT4]   = &symt_new_basic(module, btInt,   "INT4", 4)->symt;
    cv_basic_types[T_UINT4]  = &symt_new_basic(module, btUInt,  "UINT4", 4)->symt;
 
    cv_basic_types[T_32PVOID]   = &symt_new_pointer(module, cv_basic_types[T_VOID])->symt;
    cv_basic_types[T_32PCHAR]   = &symt_new_pointer(module, cv_basic_types[T_CHAR])->symt;
    cv_basic_types[T_32PSHORT]  = &symt_new_pointer(module, cv_basic_types[T_SHORT])->symt;
    cv_basic_types[T_32PLONG]   = &symt_new_pointer(module, cv_basic_types[T_LONG])->symt;
    cv_basic_types[T_32PQUAD]   = &symt_new_pointer(module, cv_basic_types[T_QUAD])->symt;
    cv_basic_types[T_32PUCHAR]  = &symt_new_pointer(module, cv_basic_types[T_UCHAR])->symt;
    cv_basic_types[T_32PUSHORT] = &symt_new_pointer(module, cv_basic_types[T_USHORT])->symt;
    cv_basic_types[T_32PULONG]  = &symt_new_pointer(module, cv_basic_types[T_ULONG])->symt;
    cv_basic_types[T_32PUQUAD]  = &symt_new_pointer(module, cv_basic_types[T_UQUAD])->symt;
    cv_basic_types[T_32PREAL32] = &symt_new_pointer(module, cv_basic_types[T_REAL32])->symt;
    cv_basic_types[T_32PREAL64] = &symt_new_pointer(module, cv_basic_types[T_REAL64])->symt;
    cv_basic_types[T_32PRCHAR]  = &symt_new_pointer(module, cv_basic_types[T_RCHAR])->symt;
    cv_basic_types[T_32PWCHAR]  = &symt_new_pointer(module, cv_basic_types[T_WCHAR])->symt;
    cv_basic_types[T_32PINT4]   = &symt_new_pointer(module, cv_basic_types[T_INT4])->symt;
    cv_basic_types[T_32PUINT4]  = &symt_new_pointer(module, cv_basic_types[T_UINT4])->symt;
}
 
static int numeric_leaf(int* value, const unsigned short int* leaf)
{
    unsigned short int type = *leaf++;
    int length = 2;
 
    if (type < LF_NUMERIC)
    {
        *value = type;
    }
    else
    {
        switch (type)
        {
        case LF_CHAR:
            length += 1;
            *value = *(const char*)leaf;
            break;
 
        case LF_SHORT:
            length += 2;
            *value = *(const short*)leaf;
            break;
 
        case LF_USHORT:
            length += 2;
            *value = *(const unsigned short*)leaf;
            break;
 
        case LF_LONG:
            length += 4;
            *value = *(const int*)leaf;
            break;
 
        case LF_ULONG:
            length += 4;
            *value = *(const unsigned int*)leaf;
            break;
 
        case LF_QUADWORD:
        case LF_UQUADWORD:
	    FIXME("Unsupported numeric leaf type %04x\n", type);
            length += 8;
            *value = 0;    /* FIXME */
            break;
 
        case LF_REAL32:
	    FIXME("Unsupported numeric leaf type %04x\n", type);
            length += 4;
            *value = 0;    /* FIXME */
            break;
 
        case LF_REAL48:
	    FIXME("Unsupported numeric leaf type %04x\n", type);
            length += 6;
            *value = 0;    /* FIXME */
            break;
 
        case LF_REAL64:
	    FIXME("Unsupported numeric leaf type %04x\n", type);
            length += 8;
            *value = 0;    /* FIXME */
            break;
 
        case LF_REAL80:
	    FIXME("Unsupported numeric leaf type %04x\n", type);
            length += 10;
            *value = 0;    /* FIXME */
            break;
 
        case LF_REAL128:
	    FIXME("Unsupported numeric leaf type %04x\n", type);
            length += 16;
            *value = 0;    /* FIXME */
            break;
 
        case LF_COMPLEX32:
	    FIXME("Unsupported numeric leaf type %04x\n", type);
            length += 4;
            *value = 0;    /* FIXME */
            break;
 
        case LF_COMPLEX64:
	    FIXME("Unsupported numeric leaf type %04x\n", type);
            length += 8;
            *value = 0;    /* FIXME */
            break;
 
        case LF_COMPLEX80:
	    FIXME("Unsupported numeric leaf type %04x\n", type);
            length += 10;
            *value = 0;    /* FIXME */
            break;
 
        case LF_COMPLEX128:
	    FIXME("Unsupported numeric leaf type %04x\n", type);
            length += 16;
            *value = 0;    /* FIXME */
            break;
 
        case LF_VARSTRING:
	    FIXME("Unsupported numeric leaf type %04x\n", type);
            length += 2 + *leaf;
            *value = 0;    /* FIXME */
            break;
 
        default:
	    FIXME("Unknown numeric leaf type %04x\n", type);
            *value = 0;
            break;
        }
    }
 
    return length;
}
 
/* convert a pascal string (as stored in debug information) into
 * a C string (null terminated).
 */
static const char* terminate_string(const struct p_string* p_name)
{
    static char symname[256];
 
    memcpy(symname, p_name->name, p_name->namelen);
    symname[p_name->namelen] = '\0';
 
    return (!*symname || strcmp(symname, "__unnamed") == 0) ? NULL : symname;
}
 
static struct symt*  codeview_get_type(unsigned int typeno, BOOL allow_special)
{
    struct symt*        symt = NULL;
 
    /*
     * Convert Codeview type numbers into something we can grok internally.
     * Numbers < FIRST_DEFINABLE_TYPE are all fixed builtin types.
     * Numbers from FIRST_DEFINABLE_TYPE and up are all user defined (structs, etc).
     */
    if (typeno < FIRST_DEFINABLE_TYPE)
    {
        if (typeno < MAX_BUILTIN_TYPES)
	    symt = cv_basic_types[typeno];
    }
    else
    {
        unsigned        mod_index = typeno >> 24;
        unsigned        mod_typeno = typeno & 0x00FFFFFF;
        struct cv_defined_module*       mod;
 
        mod = (mod_index == 0) ? cv_current_module : &cv_zmodules[mod_index];
 
        if (mod_index >= CV_MAX_MODULES || !mod->allowed) 
            FIXME("Module of index %d isn't loaded yet (%x)\n", mod_index, typeno);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
xfplay精品久久| 亚洲欧美影音先锋| 欧美激情综合五月色丁香小说| 亚洲国产精品成人综合色在线婷婷| 中文字幕永久在线不卡| 亚洲一二三区不卡| 久久av中文字幕片| 色综合天天综合网国产成人综合天| 国产一区高清在线| 91黄色免费版| 欧美久久一二区| 国产精品毛片高清在线完整版 | 亚洲精品videosex极品| 亚洲国产成人91porn| youjizz久久| 久久久欧美精品sm网站| 日韩不卡一区二区三区 | 91激情五月电影| 欧美激情在线一区二区三区| 捆绑调教一区二区三区| 7777精品伊人久久久大香线蕉| 亚洲日本青草视频在线怡红院| 国产电影一区在线| 久久综合国产精品| 国精产品一区一区三区mba视频| 制服视频三区第一页精品| 一区二区三区精密机械公司| 91网站在线播放| 中文字幕日韩精品一区| 波多野洁衣一区| 中文字幕一区在线| 91在线一区二区三区| 亚洲欧洲色图综合| 成人精品小蝌蚪| 亚洲视频在线一区观看| 99久久精品一区二区| 最新国产精品久久精品| 成人短视频下载| 中文字幕五月欧美| 91蝌蚪porny| 亚洲精品日韩综合观看成人91| 色久综合一二码| 亚洲图片欧美视频| 日韩欧美一二三区| 国产成人精品一区二区三区四区 | 久久久久久免费| 成人美女在线视频| 亚洲激情自拍视频| 欧美丰满少妇xxxbbb| 蜜桃久久久久久久| 久久综合给合久久狠狠狠97色69| 国产成人精品三级| 亚洲摸摸操操av| 在线观看91精品国产麻豆| 男女男精品网站| 国产人久久人人人人爽| 91农村精品一区二区在线| 亚洲私人黄色宅男| 欧美精品久久99| 国产精品77777| 亚洲色图在线视频| 3d动漫精品啪啪| 国产麻豆成人精品| 国产精品久久久一本精品| 91在线视频免费91| 日本aⅴ免费视频一区二区三区| 精品国产露脸精彩对白 | 国产一区二区三区国产| 亚洲欧美色图小说| 欧美成人三级电影在线| 99riav久久精品riav| 日韩国产欧美在线视频| 欧美经典三级视频一区二区三区| 91久久精品一区二区| 精品一区二区三区免费视频| 亚洲视频一区二区免费在线观看 | 日韩成人av影视| 中文字幕在线视频一区| 5858s免费视频成人| 99在线精品一区二区三区| 青草国产精品久久久久久| 国产精品三级视频| 日韩免费性生活视频播放| 一本到不卡精品视频在线观看| 精品一区二区三区免费播放| 一区二区三区四区在线播放| 久久中文字幕电影| 欧美美女一区二区| 99久久99精品久久久久久 | 成人av网站免费| 男女性色大片免费观看一区二区| 中文字幕人成不卡一区| 精品国产免费人成在线观看| 欧美日韩一级片在线观看| 99久久精品免费看国产| 激情都市一区二区| 日本伊人色综合网| 亚洲制服丝袜av| 亚洲品质自拍视频| 国产精品黄色在线观看| 久久久影视传媒| 日韩欧美二区三区| 在线播放中文字幕一区| 在线影视一区二区三区| 成人亚洲精品久久久久软件| 麻豆成人免费电影| 麻豆成人av在线| 日本亚洲欧美天堂免费| 午夜伊人狠狠久久| 亚洲va韩国va欧美va精品| 亚洲激情中文1区| 亚洲婷婷国产精品电影人久久| 亚洲国产精品黑人久久久| 国产亚洲一区字幕| 久久美女高清视频| 国产欧美精品区一区二区三区| 久久一日本道色综合| 欧美大白屁股肥臀xxxxxx| 欧美一二三四在线| 日韩美女在线视频| 久久久国产精华| 国产亚洲一区字幕| 国产精品久久二区二区| 亚洲欧美日韩电影| 一区二区三区成人| 亚洲成人动漫在线观看| 五月激情综合色| 青青草97国产精品免费观看无弹窗版| 日本sm残虐另类| 国产一区欧美二区| 成人a级免费电影| 色域天天综合网| 欧美精品日韩精品| 久久色在线观看| 成人欧美一区二区三区视频网页| 亚洲精品国产成人久久av盗摄| 亚洲成人黄色小说| 国产一区二区按摩在线观看| 国产一区二区不卡在线| 91蜜桃传媒精品久久久一区二区| 欧美自拍偷拍一区| 欧美精品777| 国产亚洲欧美色| 亚洲男人天堂av网| 久久国产人妖系列| 99re成人在线| 日韩一区二区三区免费看| 欧美国产日本视频| 午夜私人影院久久久久| 精品无人码麻豆乱码1区2区 | 国产精品视频yy9299一区| 亚洲免费av高清| 久久超碰97人人做人人爱| 99久久久久免费精品国产| 欧美精品乱人伦久久久久久| 国产蜜臀97一区二区三区| 亚洲国产成人av网| 国产成人在线视频免费播放| 91国偷自产一区二区三区观看| 欧美成人精品福利| 亚洲美女一区二区三区| 国产尤物一区二区在线| 欧美日韩成人在线| 中文字幕一区二区三区不卡| 蜜臀av一区二区三区| 91美女蜜桃在线| 久久综合999| 亚洲gay无套男同| 粉嫩嫩av羞羞动漫久久久| 在线不卡中文字幕播放| 亚洲精品亚洲人成人网 | 国产欧美一区二区三区在线看蜜臀| 亚洲精品日日夜夜| 成人小视频免费在线观看| 欧美一区二区三区免费在线看| 成人免费在线视频| 激情成人午夜视频| 91精品蜜臀在线一区尤物| 亚洲丝袜美腿综合| eeuss鲁一区二区三区| 久久综合丝袜日本网| 蜜桃av一区二区三区| 欧美日韩国产高清一区二区三区| 国产精品美女久久久久av爽李琼| 麻豆91在线观看| 日韩欧美国产麻豆| 美国十次了思思久久精品导航| 欧美日韩亚洲综合| 亚洲丰满少妇videoshd| 一本色道**综合亚洲精品蜜桃冫| 国产精品天美传媒| 丁香一区二区三区| 国产欧美一区二区三区在线看蜜臀| 久久aⅴ国产欧美74aaa| 日韩一区二区三区免费看| 欧美96一区二区免费视频| 欧美一区二区三区男人的天堂| 视频一区二区国产| 欧美精品一二三四| 首页国产丝袜综合|