簡體   English   中英

如何通過取消引用內存中的另一個地址來取消引用內存中的特定地址?

[英]How to dereference a specific address in memory through dereferencing another address in memory?

我在項目中使用引導加載程序作為hex和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”中的值

在0x00020000,您可以放置​​知道您的0x00040000“擴展”的代碼的起點。 然后,無需任何其他限制,您的引導程序將照常引導該代碼,並且該代碼(以下簡稱為“輔助引導程序”)將引導您放置在0x00040000以下的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM