如何通过解除引用内存中的另一个地址来取消引用内存中的特定地址?

时间:2016-08-10 09:56:34

标签: c++ c assembly embedded bootloader

我在我的项目中使用bootloader作为十六进制和s19文件,因此我不允许修改其内容。在此引导加载程序中,有一个部分通过以下方式实现,以验证我的应用程序是否是有效的应用程序:

#define CHECK_PATTERN_ADDRESS ((int32)0x00020000)
#define VALID_PATTERN             ((int16)0xE900)
#define VALID_PATTERN_MASK        ((int16)0xFF00)

    int16    pattern_data = *(int16 *)CHECK_PATTERN_ADDRESS;
    if ((pattern_data & VALID_PATTERN_MASK) == VALID_PATTERN)
    {
        //Valid application
    }
    else
    {
        //Not Valid application
    }

从上面的代码中,为了使引导程序将我的应用程序视为有效,需要将有效模式放在上述地址“0x00020000”中。

在下载应用程序时,此模式将直接加载到此地址。

这是通过使用包含此模式的程序集文件并通过链接器文件指定将在内存中加载的地址来完成的。

因此,在我的应用程序下载过程中,当前有效模式已成功加载到上述地址“0x00020000”中。

主要约束是:

引导加载程序应在此特定地址“0x00020000”中找到有效模式

问题是:

我需要在另一个地址中添加我的有效模式“让我们说0x00040000”,而DLL将继续从请求的地址“0x00020000”中取消引用数据。

但是,我可以通过汇编文件将任何数据添加到原始地址“0x00020000”,或直接将任何特定的十六进制数据添加到此地址。

问题是:

我可以在此地址“0x00020000”中加载什么,这样当引导加载程序在其代码中使用它时“如上所述”,它将在另一个地址“0x00040000”中加载值

1 个答案:

答案 0 :(得分:1)

在0x00020000,您可以设置知道您的0x00040000"扩展"的代码的起点。然后,在没有任何进一步中断的情况下,您的引导加载程序将通常启动该代码,并且该代码(将其称为" secodary引导加载程序")将引导您放置在0x00040000下的代码。 / p>