我正在用C/C++编写Mac OS的NES模拟器(我已经写了一个,所以我知道基础知识)。由于许多硬件寄存器都映射到内存位置,所以我想知道是否有一些系统调用可以用来将地址映射到函数的结果:当它被访问时,函数将被调用。 (我敢肯定,我不能,但嘿,这是值得一问。)是否可以将地址映射到函数的结果?
这里是我想要做什么:
int getStatusRegisterValue()
{
return 0xCAFEBABE;
}
// obviously, more parameters than just this would be involved I suppose
int* statusRegister = syscall_to_map_function_to_address(getStatusRegisterValue);
// from here on, doing (*statusRegister) should call getStatusRegisterValue and
// return its value
*statusRegister == 0xCAFEBABE;
该项目将是我在尝试LLVM ,我的目标是重新编译ROM到LLVM字节码。这就是为什么简单的内存访问可能会触发该功能会很方便(就像真正的NES硬件一样)。解决我的问题的另外两个明显的可能性是缓存寄存器值并将它们存储在实际内存中,或者从重新编译的代码中调用函数来将内存位置映射到他们真正的内容。
谢谢!
没有C/C++这样的东西。 – 2010-06-20 16:15:10
@wowus:“C/C++”听起来像是一个总结“C++与C交互”的好方法。我还应该补充说,将会有Objective-C和一小部分涉及该语言的程序集。 – zneak 2010-06-20 16:57:37
你能展示一些示例代码吗?或用例?我无法想象这一点。 – 2010-06-20 17:09:24