assembly 是否有办法使用其他二进制文件全局符号而不将其链接到

vohkndzv  于 2022-11-30  发布在  其他
关注(0)|答案(1)|浏览(120)

我试图转换一个游戏苏联PDP 11兼容机。因为它有严格的内存限制-56 K的RAM,我必须在运行时加载代码的一部分。这意味着我需要建立几个二进制模块,其中相互交叉引用符号。我使用的是GAS和LD。
是否有一种方法可以简单地使用这些工具来实现这一点?
例如,一个二进制模块文件想要加载另一个二进制模块,为此,它必须知道另一个二进制模块的大小。大小以如下符号提供:

.title OtherModule

begin:
  some code
end:

.equiv SizeOfTheOtherModuleInWords, ((end - begin) / 2)

另一个例子是,游戏中的每个关卡都单独加载,并包含从主引擎调用子程序的代码,主引擎总是驻留在内存中。
我找到了一个解决方案,通过链接器脚本。我可以使用/DISCARD/节,以排除链接文件。

OUTPUT_FORMAT("binary")
OUTPUT_ARCH(pdp11)

INPUT(core.o bootstrap.o)
OUTPUT(AKU.SAV)

FileSizeCoreWords = ((FileEndCore - FileBeginCore) / 2);

SECTIONS
{
    . = 0;
.text :
    {
        bootstrap.o (.text)
    }
.data :
    {
        bootstrap.o (.data)
    }
.bss :
    {
        bootstrap.o (.bss)
    }
/DISCARD/ :
    {
        core.o
    }
}
ujv3wf0j

ujv3wf0j1#

GNU ld有一个选项--just-symbols,它从一个已经链接的文件中加载符号。

相关问题