c - 内存地址仿真或模拟
问题描述
我在堆栈中看到的其他帖子很少,但没有一个真正回答我的问题。是否可以模拟或以某种方式映射或具有模拟特定内存地址的驱动程序,否则主机上不存在这些地址?
我正在查看我需要排除故障的一段嵌入式代码,但它从我的电脑上不存在的内存空间读取值。我可以更改地址的一个实例,但是那些不存在的收件人在代码上到处都是,因此将它们全部更改是不切实际的。
解决方案
可以让代码运行以用于测试目的,但它的容易程度取决于两件事:代码引用地址的准确程度以及内存访问应该做什么?
一般来说,您可以编写一个库来模拟其他硬件。编写这样一个库可能是容易和困难之间的任何事情,这取决于这些访问应该做什么。在一个简单的情况下,访问不会以需要模拟的方式相互影响。在更困难的情况下,您可能需要某种状态机来跟踪正在发生的事情。在中等情况下,可能需要记住早期访问中的一些值,但不需要更复杂的状态机。
但是,编写一个库可能还不够。您还需要使您正在排除故障的代码使用该库。在实践中,代码需要调用库提供的函数。如果内存访问已经通过一些函数调用完成,你可以简单地在你的库中拥有这些函数的你自己的版本。否则,需要更多的努力。
如果访问不是通过函数调用而是直接引用地址,一种解决方案可能是尝试编写正则表达式来匹配引用。如果您有正则表达式匹配所有或至少大部分,您可以使用它们和一些工具(如 sed)自动或多或少地用函数调用替换引用。
推荐阅读
- c# - Microsoft.AspNetCore.Authentication.JwtBearer 的应用程序依赖项清单错误中指定的程序集
- node.js - 每个用户是否可以在 MongoDB 上拥有自己的数据库?
- neo4j - neo4j - 通过 apoc.load.jdbcUpdate 将数据导出到 SQL/MS Access
- kotlin - 有人知道如何根据文章实现 okhttp oauth 令牌刷新吗?
- android - 如何在 android 中使用 Augmented Faces Sceneform API 将 3d 模型正确放置在 Face 上?
- python - 如果文件已在使用中,如何强制删除文件
- docker - memsql/cluster-in-a-box 最新镜像无法启动容器
- javascript - jQuery 调用 on() on() 在调用 click() 后动态生成它
- angular - Angular 12 材质垫抽屉自动隐藏
- amazon-web-services - 在不同账户中执行 Athena 查询后无法查看 S3 存储桶中的结果?