c++ - Sprite 文件格式

标签 c++ compiler-construction simulation elf spim

我正在尝试将使用 g++ 编译的 elf 文件的 hexdump 手动加载到我设计的处理器模拟中。一个标准的 elf 文件有 30 个部分,我正在加载所有 30 个部分,并考虑到它们的正确内存位置偏移。然后,我在 .text 部分 (00400130) 的开头启动我的程序计数器,但程序似乎没有正确运行。我已经使用 SPIM 作为黄金标准相对彻底地验证了我的处理器设计。奇怪的是,如果我将汇编文件加载到 SPIM 中,然后将软件生成的反汇编的 .text.data 部分加载到我处理器的内存,程序运行。这与我想做的不同,因为我想:

  • 写一个c++程序
  • 使用mipseb-linux-g++(交叉编译器)编译
  • hex 将所有部分转储到它们自己的文件中
  • 读取文件并将内容加载到处理器“内存”
  • 运行程序

我应该在 ELF 文件的什么地方放置我的程序计数器?我现在把它放在 .text 的开头。另外,我是否只需要包含 .text.data 就可以让我的程序正常工作?我在这里做错了什么?

最佳答案

ELF 头应该包含入口地址,该地址不一定与.text 区域中的首地址相同。使用 objdump -f 查看文件的入口点是什么 -- 它将被称为“起始地址”。

格式描述here - 你应该使用 program headers 而不是 section headers 将 ELF 图像加载到内存中(我怀疑有 30 个程序头),入口点将由 ELF header 中的 e_entry 字段描述。

关于c++ - Sprite 文件格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3102232/

相关文章:

c++ - 信号 returnPressed() 和 editingFinished() 不适用于 QLineEdit

c# - 在.net 中编译成.exe 的注释?

linux - 用于 boost 的旧 gcc 版本

javascript - Web 浏览器中的模拟

c++ - PythonQt 的智能指针

c++ - 强行杀死线程 C++ win32

c++ - 如何在处理 Windows 事件时保持 Qt Widgets 对键盘和鼠标的响应?

c++ - 将 'using' 指令与部分重载 : gcc feature or intel bug? 相结合

python - 多处理策略-共享嵌套对象

r - 在 R 中针对不同的初始条件模拟 ODE 模型