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

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

?? dumprom.cpp

?? dumprom source code,use for learning the dumprom.exe tool for wince
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
            return (*i).first;
    }
    return 0;
}

#define IMGOFSINCREMENT 0x1000
void ScanRom()
{
    set<DWORD> romhdrs;
    // future: fix iterating over memblocks, now it does not handle 'holes' in the memory range very well.
    int romnr= 0;
    for (DWORD romofs= (g_mem.FirstAddress()+IMGOFSINCREMENT-1)&~(IMGOFSINCREMENT-1); romofs<g_mem.LastAddress(); romofs+=IMGOFSINCREMENT)
    {
        DWORD *rom= (DWORD*)g_mem.GetPtr(romofs);
        if (rom==NULL)
            continue;
        if (rom[ROM_SIGNATURE_OFFSET/sizeof(DWORD)]==ROM_SIGNATURE)
        {
            if (rom[0] == 0xea0003fe)
                g_regions.MarkRegion(romofs, 4, "JUMP to kernel start");
            if (b_wm2005_rom)
                g_regions.MarkRegion(g_mem.GetOfs(&rom[16]), 12, "'ECEC' -> %08lx %08lx", rom[17], rom[18]);
            else
                g_regions.MarkRegion(g_mem.GetOfs(&rom[16]), 8, "'ECEC' -> %08lx", rom[17]);

            if (romhdrs.find(rom[17])==romhdrs.end())
            {
                DumpRomHdr(romnr++, rom[17]);

                romhdrs.insert(rom[17]);    // keep track of multiple pointers to same header.
            }
        }
    }
}

// parse string of format: <ofs>:<len>:<desc>
//                     or: <start>-<end>:<desc>
bool ParseRegionSpec(const string& spec, DWORD& start, DWORD& length, string& description)
{
    string::size_type pos_colon= spec.find(':');
    string::size_type pos_2ndcolon= spec.find(':', pos_colon+1);
    string::size_type pos_dash= spec.find('-');

    if (pos_colon==spec.npos || (pos_2ndcolon==spec.npos && pos_dash==spec.npos))
        return false;

    if (pos_dash==spec.npos)  // it is <ofs>:<len>:<desc>
    {
        start= strtoul(spec.substr(0, pos_colon).c_str(), 0, 0);
        length= strtoul(spec.substr(pos_colon+1, pos_2ndcolon-pos_colon-1).c_str(), 0, 0);
        description= spec.substr(pos_2ndcolon+1);
        return true;
    }
    else if (pos_dash < pos_colon)   // it is <ofs>-<end>:<desc>
    {
        start= strtoul(spec.substr(0, pos_dash).c_str(), 0, 0);
        DWORD end= strtoul(spec.substr(pos_dash+1, pos_colon-pos_dash-1).c_str(), 0, 0);
        length= end-start;
        description= spec.substr(pos_colon+1);
        return true;
    }
    else
        return false;
}

struct B000FFHeader {
    char signature[7];
    DWORD imgstart;
    DWORD imglength;

    DWORD blockstart;
    DWORD blocklength;
    DWORD blockchecksum;
    BYTE data[1];
};
DWORD GetFileSize(FILE *f)
{
    fseek(f, 0, SEEK_END);
    return ftell(f);
}

typedef enum { FT_B000FF, FT_NBF, FT_BIN } FileType;

bool isNBFHeader(char *hdr)
{
    return  (hdr[10]=='-' && hdr[15]=='-' && hdr[19]=='-');
}
bool DetermineFileType(FILE *f, DWORD& start, DWORD& length, FileType& type)
{
    BYTE buf[32];
    fseek(f, 0, SEEK_SET);
    if (1!=fread(buf, 32, 1, f))
    {
        perror("fread");
        return false;
    }
    fseek(f, 0, SEEK_END);
    DWORD filesize= ftell(f);

    if (strnicmp((char*)buf, "B000FF", 6)==0)
    {
        B000FFHeader *hdr= (B000FFHeader *)buf;
        type= FT_B000FF;
    
        start= 7+5*4;
        length= hdr->blocklength;

        if (hdr->imglength!=hdr->blocklength || hdr->imgstart!=hdr->blockstart)
            return false;

        return true;
    }
    else if (isNBFHeader((char*)buf))
    {
        type= FT_NBF;
        start= 0x20;
        length= filesize-start;
        return true;
    }
    else {
        type= FT_BIN;
        start= 0;
        length= filesize;
        return true;
    }
}

bool ReadDword(FILE *f, DWORD offset, DWORD& dword)
{
    if (fseek(f, offset, SEEK_SET))
        return false;

    if (1!=fread(&dword, sizeof(DWORD), 1, f))
        return false;

    return true;
}

// this function tries to determine where in the file the image starts.
// it first checks the filetype, checks for ECEC -> knownvalue
// else scan file for 'ECEC', then returns ofs-0x40
bool DetermineImageOffset(FILE *f, DWORD& imagestart, DWORD& imagelength)
{
    FileType type;
    if (DetermineFileType(f, imagestart, imagelength, type))
    {
        DWORD sig;
        if (ReadDword(f, imagestart+0x40, sig)
            && sig==ROM_SIGNATURE)
            return true;
    }
    // scan for ECEC

    fseek(f, 0, SEEK_SET);

    BYTE buf[65536+4];
    memset(buf, 0, 4);
    DWORD ofs=0;
    while(1)
    {
        DWORD nRead= fread(buf+4, 1, 65536, f);
        for (BYTE *p= buf ; p<buf+nRead+4 ; p++)
            if (*(DWORD*)p==ROM_SIGNATURE)
            {
                imagestart= ofs+(p-buf-4)-0x40;
                imagelength= GetFileSize(f)-imagestart;
                return true;
            }
        memcpy(buf, buf+nRead, 4);
        ofs += nRead;
    }
    return false;
}
// this function tries to find what offset the image is loaded at in ROM.
bool DetermineLoadOffset(FILE *f, DWORD imagestart, DWORD imagelength, DWORD& offset)
{
    int max= -1;
    DWORD maxbase= 0;

    map<DWORD, int> bases;

    bool res= false;
#define IMGOFSINCREMENT 0x1000
    // imgofs is scanning for 'ECEC' headers
    for (DWORD imgofs= 0 ; (imgofs + IMGOFSINCREMENT)<imagelength ; imgofs+=IMGOFSINCREMENT)
    {
        DWORD sig;
        if (!ReadDword(f, imagestart+imgofs+64, sig))
            goto err_exit;
        if (sig!=ROM_SIGNATURE)
            continue;

        DWORD romhdr;
        if (!ReadDword(f, imagestart+imgofs+68, romhdr))
            goto err_exit;
        // find imgbase, such that imgbase+imgofs== romhdr[8] = file[romhdr-imgbase+imagestart+8]
        for (DWORD imgbase=(romhdr+imagestart- imagelength)&~0xfff ; imgbase< romhdr+imagestart ; imgbase+=0x1000)
        {
            DWORD physfirst;
            if (!ReadDword(f, romhdr+imagestart-imgbase+8, physfirst))
                continue;
            if (physfirst==imgofs+imgbase)
            {
                printf("img %08lx : hdr=%08lx base=%08lx  commandlineoffset=%08lx\n", imgofs, romhdr, imgbase, imgbase-imagestart);
                bases[imgbase]++;
                if (bases[imgbase] > max)
                {
                    max= bases[imgbase];
                    maxbase= imgbase;
                }
            }
        }
    }
    if (max>0)
    {
        offset= maxbase-imagestart;
        res= true;
    }   
err_exit:
    return res;
}

void usage()
{
    printf("Usage: dumprom [options] imagefile [offset [imagefile offset ...]]\n");
    printf("   -d <dirpath>  - save found files/modules to this path\n");
    printf("   -v            - verbose : print alignment, struct contents\n");
    printf("   -q            - quiet : don't print anything\n");
    printf("   -n            - don't use negative rva fix\n");
    printf("   -u <ofs>L<len>:desc   - add user defined memory regions to complete image\n");
    printf("   -x <offset>   - process XIP chain at offset\n");
    printf("   -i <offset>   - specifiy image start offset\n");
    printf("   -3            - use wince3.x decompression\n");
    printf("   -4            - use wince4.x decompression [ default ]\n");
    printf("   -5            - use wince4.x decompress, and e32rom for wm2005\n");
}

typedef vector<string> stringlist;

#define HANDLEULOPTION(var, type) (argv[i][2] ? var= (type)strtoul(argv[i]+2, 0, 0) : i+1<argc ? var= (type)strtoul(argv[++i], 0, 0) : 0)
#define HANDLESTROPTION(var) (argv[i][2] ? var= argv[i]+2 : i+1<argc ? var= argv[++i] : 0)

int main( int argc, char *argv[])
{
    bool bQuiet= false;
    char *imagefilename=NULL;
    stringlist userregions;
    DWORD dwXipOffset= 0;
    char *userregionstr= NULL;

    FILE *f= NULL;

    bool bHaveImageStart= false;
    DWORD imagestart=0, imagelength=0;

    int argsfound=0;
    for (int i=1 ; i<argc ; i++)
    {
        if (argv[i][0]=='-')
            switch(argv[i][1])
            {
                case 'd':
                    HANDLESTROPTION(g_outputdirectory);
                    break;
                case 'v':
                    g_verbose++;
                    break;
                case 'q':
                    bQuiet= true;
                    break;
                case 'u':
                    if (HANDLESTROPTION(userregionstr))
                        userregions.push_back(userregionstr);
                    break;
                case 'x':
                    HANDLEULOPTION(dwXipOffset, DWORD);
                    break;
                case 'i':
                    if (HANDLEULOPTION(imagestart, DWORD))
                        bHaveImageStart= true;
                    break;
                case 'n': 
                    b_use_negative_rva= false;
                    break;
                case '5':
                    cedecompress= CEDecompressROM;
                    b_wm2005_rom= true;
                    break;
                case '4':
                    cedecompress= CEDecompressROM;
                    break;
                case '3':
                    cedecompress= CEDecompress;
                    g_iswince3rom= true;
                    break;
                default:
                    usage();
                    return 1;
            }
        else if (argsfound&1) {
            DWORD loadoffset= strtoul(argv[i],0,0);
            if (!g_mem.LoadFile(loadoffset, imagefilename, 0, 0))
                return 1;
            argsfound++;
        }
        else {
            imagefilename= argv[i];
            if (f) fclose(f);
            f= fopen(imagefilename, "rb");
            if (f==NULL)
            {
                perror(imagefilename);
                return 1;
            }
            argsfound++;
        }
    }
    if (argsfound&1) {
        
        if (bHaveImageStart)
            imagelength= GetFileSize(f);
        if (!bHaveImageStart && !DetermineImageOffset(f, imagestart, imagelength))
        {
            printf("unable to determine image start offset\n");
            return 1;
        }

        DWORD loadoffset;
        if (!DetermineLoadOffset(f, imagestart, imagelength, loadoffset))
        {
            printf("unable to determine loading offset for %s\n", imagefilename);
            return 1;
        }
        if (!g_mem.LoadFile(loadoffset, imagefilename, 0, 0))
            return 1;
    }
    if (f) fclose(f);
    if (argsfound==0) {
        usage();
        return 1;
    }

    ScanRom();

//  ... not working yet.
//    if (dwXipOffset==0)
//      dwXipOffset= FindXipRegion();
    if (dwXipOffset)
        DumpXIPChain(dwXipOffset);

    for (stringlist::iterator i= userregions.begin() ; i!= userregions.end() ; ++i)
    {
        DWORD start, length;
        string description;
        if (ParseRegionSpec(*i, start, length, description))
            g_regions.MarkRegion(start, length, "%s", description.c_str());
    }

    if (!bQuiet)
        g_regions.DumpMemoryMap();
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久久日产精品| 国产欧美一区二区三区在线老狼| 成人国产精品免费观看动漫 | 欧美高清在线精品一区| 精品福利二区三区| 日韩欧美一区二区久久婷婷| 日韩你懂的在线观看| 日韩欧美中文字幕公布| 精品久久久久久久久久久久久久久久久| 欧美日韩国产大片| 在线播放视频一区| 精品国产欧美一区二区| 久久综合久久综合久久综合| 久久精子c满五个校花| 久久婷婷久久一区二区三区| 国产欧美一区二区三区在线看蜜臀 | 性欧美疯狂xxxxbbbb| 日日夜夜精品免费视频| 捆绑调教美女网站视频一区| 国模少妇一区二区三区| 成人免费视频播放| 欧美亚洲综合网| 日韩一区二区在线看片| 国产清纯美女被跳蛋高潮一区二区久久w| 中文字幕不卡在线观看| 亚洲一区二区三区国产| 美女视频黄频大全不卡视频在线播放| 国产在线精品免费av| 成人免费电影视频| 这里是久久伊人| 国产精品私人自拍| 午夜国产不卡在线观看视频| 国产在线国偷精品免费看| 91蝌蚪国产九色| 日韩免费看网站| 亚洲日本乱码在线观看| 日韩高清不卡一区二区| 波多野结衣中文字幕一区| 欧美性色aⅴ视频一区日韩精品| 欧美电影免费观看高清完整版在线观看 | 国产精品911| 欧美日韩精品一区二区三区四区| 精品国产三级电影在线观看| 一区二区三区国产精华| 国产麻豆精品视频| 欧美精品丝袜中出| 日韩理论在线观看| 国产酒店精品激情| 欧美一二三四在线| 亚洲成人动漫av| 99久久婷婷国产| www激情久久| 免费不卡在线观看| 欧美酷刑日本凌虐凌虐| 怡红院av一区二区三区| 成人av资源网站| 久久午夜免费电影| 裸体歌舞表演一区二区| 欧美另类videos死尸| 一区二区三区在线免费视频| 成人av在线影院| 国产视频一区二区三区在线观看| 秋霞影院一区二区| 欧美久久久久中文字幕| 亚洲成人免费在线| 欧美视频在线观看一区| 亚洲精品水蜜桃| 色狠狠一区二区| 亚洲欧美日韩国产成人精品影院 | 亚洲精品乱码久久久久久黑人| 精久久久久久久久久久| 欧美电影在线免费观看| 性欧美大战久久久久久久久| 在线观看国产精品网站| 亚洲精品欧美在线| 欧美专区亚洲专区| 亚洲午夜久久久久久久久电影网 | 夜夜精品浪潮av一区二区三区| 成人av电影免费观看| 久久精品一区蜜桃臀影院| 国产精品一区二区三区网站| 久久久www免费人成精品| 久久99久久久久| 久久久国产一区二区三区四区小说 | 久久99国产精品免费网站| 欧美精品亚洲二区| 精油按摩中文字幕久久| 久久久久久久久久美女| 粗大黑人巨茎大战欧美成人| 亚洲三级电影全部在线观看高清| 99久久综合99久久综合网站| 亚洲精品免费在线观看| 欧美日韩一级大片网址| 乱中年女人伦av一区二区| 久久久久久久久久久久电影 | 精品一区二区三区久久久| 日韩精品一区国产麻豆| 国产精品77777竹菊影视小说| 亚洲国产精品二十页| 91日韩精品一区| 亚洲午夜视频在线| 欧美大片一区二区| 成人黄色小视频在线观看| 一区二区视频免费在线观看| 欧美一级理论性理论a| 国产乱码字幕精品高清av| 一区精品在线播放| 日韩一级成人av| 成人免费观看av| 日韩黄色在线观看| 国产精品色婷婷| 欧美一区二区福利在线| 国产高清精品在线| 亚洲电影视频在线| 国产精品久久久久永久免费观看| 欧美日韩日日夜夜| 成人午夜视频免费看| 全国精品久久少妇| 一区二区三区鲁丝不卡| 久久久国产精品不卡| 欧美伦理电影网| 一本大道综合伊人精品热热 | 欧美中文一区二区三区| 国产乱色国产精品免费视频| 亚洲123区在线观看| 国产精品美女久久久久久2018| 91精品国产综合久久久久久久久久 | 菠萝蜜视频在线观看一区| 免费精品视频在线| 国产欧美在线观看一区| 欧美电影免费观看高清完整版| 99re这里只有精品首页| 欧美国产97人人爽人人喊| 日韩一区二区三区高清免费看看| 精品精品欲导航| 中文字幕国产一区| 一区二区三区在线观看国产| 国产精品家庭影院| 欧美国产日韩一二三区| 精品精品欲导航| 欧美一级在线观看| 欧美精品aⅴ在线视频| 欧美色视频一区| 欧美特级限制片免费在线观看| 成人动漫一区二区| 不卡视频一二三四| av一区二区三区四区| 国产1区2区3区精品美女| 精品一区二区免费| 首页综合国产亚洲丝袜| 午夜视频在线观看一区二区三区| 亚洲午夜视频在线| 午夜电影一区二区三区| 午夜欧美2019年伦理 | 欧美二区乱c少妇| 欧美精品视频www在线观看| 欧美日韩在线一区二区| 欧美日韩精品专区| 日韩亚洲欧美在线| 日韩欧美的一区| 久久久蜜臀国产一区二区| 中文字幕精品一区二区三区精品| 国产无遮挡一区二区三区毛片日本| 欧美精品一区二区在线播放 | 欧美日韩国产一二三| 欧美色爱综合网| 日韩一区二区电影| 久久久亚洲精品一区二区三区| 国产欧美一区二区精品性色超碰| 国产片一区二区三区| 自拍偷自拍亚洲精品播放| 亚洲综合清纯丝袜自拍| 视频一区在线视频| 韩国三级电影一区二区| yourporn久久国产精品| 在线亚洲免费视频| 日韩写真欧美这视频| 国产婷婷色一区二区三区四区 | 色综合色狠狠综合色| 欧美日韩在线播放三区| 精品国产一区二区精华| 国产精品色眯眯| 日韩电影在线观看一区| 高清在线观看日韩| 欧美在线你懂的| 久久先锋资源网| 亚洲午夜视频在线| 国产.欧美.日韩| 欧美丰满嫩嫩电影| 国产精品第13页| 蜜桃av一区二区三区| 99麻豆久久久国产精品免费优播| 欧美美女一区二区在线观看| 国产日韩欧美综合一区| 亚洲成人午夜影院| 99re这里只有精品6| 精品免费日韩av| 亚洲成人av中文| 91在线高清观看| 久久这里只有精品首页|