主题 : 魔鬼幻数0XCEFA4146 复制链接 | 浏览器收藏 | 打印
级别: 侠客
UID: 85651
精华: 0
发帖: 51
金钱: 255 两
威望: 51 点
贡献值: 0 点
综合积分: 102 分
注册时间: 2013-01-07
最后登录: 2015-09-04
楼主  发表于: 2014-04-22 09:43

 魔鬼幻数0XCEFA4146

在nboot的main()函数中,发现读取文件之后,函数校验幻数,但是为什么是CEFA4146?
void main()
{
    unsigned NkParamMagic, NkLen;
    Uart_Init();
    
    Uart_SendString("\r\nWinCE 6.0 nboot for Mini6410\r\n");


    // Initialize the NAND flash interface.
    NAND_Init();

    InitLCD();
    // Get CE Paramters, now NK Length only
    if (!LoadNandIntoRAM((unsigned char*)LOAD_ADDRESS_PHYSICAL, NAND_BYTES_PER_PAGE, LOAD_PARAM_NAND_PART_OFFSET, LOAD_PARAM_NAND_PART_SIZE, 0)) {
        Uart_SendString("Get Windows CE NK Length Error\r\n");
        for(;;);
    }
  

    NkParamMagic = ((unsigned *)LOAD_ADDRESS_PHYSICAL)[0];
    NkLen        = ((unsigned *)LOAD_ADDRESS_PHYSICAL)[1];
    if (NkParamMagic != 0xCEFA4146 || NkLen > LOAD_IMAGE_MAX_BYTE_COUNT) {
        Uart_SendString("NK Length Error\r\n");
        for(;;);
    }
    NkLen = (((NkLen - 1) >> PageSizeShift) + 1) << PageSizeShift;

    if (!LoadNandIntoRAM((unsigned char*)LOAD_ADDRESS_PHYSICAL, NkLen, LOAD_IMAGE_NAND_PART_OFFSET,  LOAD_IMAGE_NAND_PART_SIZE, 1)) {
        Uart_SendString("Load Windows CE NK Error\r\n");
        for(;;);
    }


    Uart_SendString("Launch Windows CE...\r\n");

    rINFORM3 = LCD_NUMBER;
    ((PFN_IMAGE_LAUNCH)(LOAD_ADDRESS_PHYSICAL))();
这个幻数代表的什么?难道是友善自己定义的幻数?
自由,自强,共享,共创。
级别: 论坛版主
UID: 12573
精华: 27
发帖: 8838
金钱: 46490 两
威望: 9298 点
贡献值: 27 点
综合积分: 18216 分
注册时间: 2010-01-09
最后登录: 2019-07-16
1楼  发表于: 2014-04-22 11:15
linux也有类似的东西吧
新手如何向我们反馈有效的信息,以便解决问题,见此贴:
http://www.arm9home.net/read.php?tid-14431.html

[注]: 此处签名链接仅为指引方向,而非解答问题本身.
级别: 侠客
UID: 85651
精华: 0
发帖: 51
金钱: 255 两
威望: 51 点
贡献值: 0 点
综合积分: 102 分
注册时间: 2013-01-07
最后登录: 2015-09-04
2楼  发表于: 2014-04-22 14:44
自己顶起来