Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何添加两个“;“目标”;使用链接器脚本_C_Assembly_Linker_Bootloader_Linker Scripts - Fatal编程技术网

C 如何添加两个“;“目标”;使用链接器脚本

C 如何添加两个“;“目标”;使用链接器脚本,c,assembly,linker,bootloader,linker-scripts,C,Assembly,Linker,Bootloader,Linker Scripts,正如我之前所说,我的ASM和C技能都不符合要求,所以请耐心等待我 我正在用C编写一个引导加载程序,已经开始遇到512字节的限制,但我不知道如何配置链接器脚本,将我的文件分成两个512b段,以便从另一个段加载。我当前的链接器脚本如下所示: 链接器 ENTRY(main); SECTIONS { . = 0x7C00; .text : AT(0x7C00) { _text = .; *(.text); _text

正如我之前所说,我的ASM和C技能都不符合要求,所以请耐心等待我

我正在用C编写一个引导加载程序,已经开始遇到512字节的限制,但我不知道如何配置链接器脚本,将我的文件分成两个512b段,以便从另一个段加载。我当前的链接器脚本如下所示:

链接器

ENTRY(main);
SECTIONS
{    
    . = 0x7C00;    
    .text : AT(0x7C00)
    {
        _text = .;
        *(.text);
        _text_end = .;
    }
    .data :
    {
        _data = .;
        *(.bss);
        *(.bss*);
        *(.data);
        *(.rodata*);
        *(COMMON)
        _data_end = .;
    }    
    .sig : AT(0x7DFE)    
    {        
        SHORT(0xaa55);
    }    
    /DISCARD/ :
    {
        *(.note*);
        *(.iplt*);
        *(.igot*);
        *(.rel*);
        *(.comment);
    }
}
然而,尽管我试图在网上研究它们,但我一辈子都无法理解这一点,无法继续我正在尝试做的事情

我可以在汇编中实现我想做的事情,但我更愿意把这个项目完全放在C中

非常感谢您的帮助


为了澄清这一点(因为我最初的陈述在回想起来似乎相当荒谬),我需要一种方法将一个填充到512b的编译文件加载到一个二进制文件中,并使用神奇的单词present,然后对另一个文件执行相同的操作,而不使用神奇的单词,最终结果是一个二进制文件

是否有原因让它出现在一个链接中,而不是两个单独的程序中,您将自己合并和/或单独构建一个,然后将字节作为数据链接到另一个。如果您可以在汇编中执行,那么您可以在C中执行,两者都被链接。在链接器脚本中,您可以指定从哪些文件获取节。这将允许您只考虑引导加载程序文件的前512个字节和其他部分的部分。有关详细信息,请参阅手册。@fuz我该如何做?@TTG正如old_timer所说,最简单的方法是使用两个单独的链接器脚本生成两个单独的二进制文件(一个用于前512字节,另一个用于剩余字节)。然后,分别链接它们,并将结果与
cat
连接起来。