gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 05:33:32 25 4
gpt4 key购买 nike

我在我的项目中使用引导加载程序作为 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 下的代码。

关于c++ - 如何通过取消引用内存中的另一个地址来取消引用内存中的特定地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38870023/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com