Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.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_Gcc_Operating System_Kernel - Fatal编程技术网

C 我的二进制文件中的这些额外字节是什么?

C 我的二进制文件中的这些额外字节是什么?,c,gcc,operating-system,kernel,C,Gcc,Operating System,Kernel,我正在用C编写一个小型操作系统。我已经编写了一个引导加载程序,现在我正在尝试获取一个简单的C文件(“内核”),以便使用gcc进行编译: intmain(void){返回0;} 我使用以下命令编译该文件: gcc kernel.c -o kernel.o -nostdlib -nostartfiles 我使用链接器使用以下命令创建最终图像: ld kernel.o -o kernel.bin -T linker.ld --oformat=binary linker.ld文件的内容如下: SE

我正在用C编写一个小型操作系统。我已经编写了一个引导加载程序,现在我正在尝试获取一个简单的C文件(“内核”),以便使用
gcc
进行编译:

intmain(void){返回0;}
我使用以下命令编译该文件:

gcc kernel.c -o kernel.o -nostdlib -nostartfiles
我使用链接器使用以下命令创建最终图像:

ld kernel.o -o kernel.bin -T linker.ld --oformat=binary
linker.ld
文件的内容如下:

SECTIONS { . = 0x7e00; .text ALIGN (0x00) : { *(.text) } } 但是,我不知道其他117个字节是干什么用的。分解它们似乎会产生一堆毫无意义的垃圾。额外字节的存在让我怀疑我是否做错了什么

我应该担心吗


这些是附加部分,没有剥离也没有丢弃。您希望您的
linker.ld
文件如下所示:

SECTIONS
{
    . = 0x7e00;

    .text ALIGN (0x00) :
    {
        *(.text)
    }

    /DISCARD/ :
    {
        *(.comment)
        *(.eh_frame_hdr)
        *(.eh_frame)
    }
}

我知道要从
objdump-t kernel.o的输出中丢弃哪些部分,很简单,您使用的是gcc,它总是在将控制权传递给main之前放置其初始化代码。

启动代码上有什么我不知道,但它们在那里。正如您可能看到的,二进制文件上还有一条注释“GNU”,您不能使用objdump-s-j“section name”打印特定扇区。

噢,是的,我知道生成的代码需要在保护模式下运行。引导加载程序将负责将CPU切换到保护模式。@Aftnix:我正在生成一个平面二进制文件。不应该有ELF头。在:strip--strip all-R.note-R.comment kernel.bin之后如何?也许这是调试信息?尝试类似的方法:ld kernel.o-o--strip all kernel.bin-T linker.ld--oformat=binary
SECTIONS
{
    . = 0x7e00;

    .text ALIGN (0x00) :
    {
        *(.text)
    }

    /DISCARD/ :
    {
        *(.comment)
        *(.eh_frame_hdr)
        *(.eh_frame)
    }
}