RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题

问题[debian]

Martin Hope
user_587
Asked: 2023-11-15 20:36:43 +0000 UTC

gcc 12.2(或 ld?)在 aarch64 上生成大型二进制文件或漏洞之谜

  • 7

我注意到可执行文件的大小变得比armhf 上的大。我查看了 - 现在的最小值int main (int argc, char **argv) {return 0;}(在 gcc -Wall mini.c -o mini; strip mini 之后)约为 67 KB,其中约 64 KB 被零填充。

我怀疑编译器本身不应该受到指责,因为如果你得到 mini.o,那么它的大小约为 1200 字节。

完全是这样的:

root@orangepizero2w:~/test# cat mini.c

int main (int argc, char **argv) {

return 0;

}
root@orangepizero2w:~/test# gcc -o mini mini.c
root@orangepizero2w:~/test# strip mini
root@orangepizero2w:~/test# ls -l mini
-rwxr-xr-x 1 root root 67592 ноя 15 13:29 mini
root@orangepizero2w:~/test# ldd mini
    linux-vdso.so.1 (0x0000ffff9157f000)
    libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x0000ffff91370000)
    /lib/ld-linux-aarch64.so.1 (0x0000ffff91542000)
root@orangepizero2w:~/test# gcc -c -o mini.o mini.c
root@orangepizero2w:~/test# ls -l
итого 76
-rwxr-xr-x 1 root root 67592 ноя 15 13:29 mini
-rw-r--r-- 1 root root    50 ноя 15 13:21 mini.c
-rw-r--r-- 1 root root  1272 ноя 15 13:30 mini.o
root@orangepizero2w:~/test#

问题:为什么?最重要的是——为什么?而在没有无条件预留64KB的情况下之前又是如何工作的呢?

更新:我试图查看 objdump,但我对此一无所知:

Разделы:
Idx Name               Разм      VMA               LMA               Фа  смещ.  Выр.  Флаги
  0 .interp            0000001b  0000000000000238  0000000000000238  00000238  2**0  CONTENTS, ALLOC, LOAD, READONLY, DATA
  1 .note.gnu.build-id 00000024  0000000000000254  0000000000000254  00000254  2**2  CONTENTS, ALLOC, LOAD, READONLY, DATA
  2 .note.ABI-tag      00000020  0000000000000278  0000000000000278  00000278  2**2  CONTENTS, ALLOC, LOAD, READONLY, DATA
  3 .gnu.hash          0000001c  0000000000000298  0000000000000298  00000298  2**3  CONTENTS, ALLOC, LOAD, READONLY, DATA
  4 .dynsym            000000d8  00000000000002b8  00000000000002b8  000002b8  2**3  CONTENTS, ALLOC, LOAD, READONLY, DATA
  5 .dynstr            0000008d  0000000000000390  0000000000000390  00000390  2**0  CONTENTS, ALLOC, LOAD, READONLY, DATA
  6 .gnu.version       00000012  000000000000041e  000000000000041e  0000041e  2**1  CONTENTS, ALLOC, LOAD, READONLY, DATA
  7 .gnu.version_r     00000030  0000000000000430  0000000000000430  00000430  2**3  CONTENTS, ALLOC, LOAD, READONLY, DATA
  8 .rela.dyn          000000c0  0000000000000460  0000000000000460  00000460  2**3  CONTENTS, ALLOC, LOAD, READONLY, DATA
  9 .rela.plt          00000060  0000000000000520  0000000000000520  00000520  2**3  CONTENTS, ALLOC, LOAD, READONLY, DATA
 10 .init              00000018  0000000000000580  0000000000000580  00000580  2**2  CONTENTS, ALLOC, LOAD, READONLY, CODE
 11 .plt               00000060  00000000000005a0  00000000000005a0  000005a0  2**4  CONTENTS, ALLOC, LOAD, READONLY, CODE
 12 .text              0000012c  0000000000000600  0000000000000600  00000600  2**6  CONTENTS, ALLOC, LOAD, READONLY, CODE
 13 .fini              00000014  000000000000072c  000000000000072c  0000072c  2**2  CONTENTS, ALLOC, LOAD, READONLY, CODE
 14 .rodata            00000004  0000000000000740  0000000000000740  00000740  2**2  CONTENTS, ALLOC, LOAD, READONLY, DATA
 15 .eh_frame_hdr      0000003c  0000000000000744  0000000000000744  00000744  2**2  CONTENTS, ALLOC, LOAD, READONLY, DATA
 16 .eh_frame          000000a4  0000000000000780  0000000000000780  00000780  2**3  CONTENTS, ALLOC, LOAD, READONLY, DATA
 17 .init_array        00000008  000000000001fdc8  000000000001fdc8  0000fdc8  2**3  CONTENTS, ALLOC, LOAD, DATA
 18 .fini_array        00000008  000000000001fdd0  000000000001fdd0  0000fdd0  2**3  CONTENTS, ALLOC, LOAD, DATA
 19 .dynamic           000001e0  000000000001fdd8  000000000001fdd8  0000fdd8  2**3  CONTENTS, ALLOC, LOAD, DATA
 20 .got               00000030  000000000001ffb8  000000000001ffb8  0000ffb8  2**3  CONTENTS, ALLOC, LOAD, DATA
 21 .got.plt           00000038  000000000001ffe8  000000000001ffe8  0000ffe8  2**3  CONTENTS, ALLOC, LOAD, DATA
 22 .data              00000010  0000000000020020  0000000000020020  00010020  2**3  CONTENTS, ALLOC, LOAD, DATA
 23 .bss               00000008  0000000000020030  0000000000020030  00010030  2**0  ALLOC
 24 .comment           0000001f  0000000000000000  0000000000000000  00010030  2**0  CONTENTS, READONLY

在第 16 节和第 17 节之间有一块 64 KB 的空东西(更准确地说,据我所知,62884 字节)——与问题标题相同的漏洞。

编译器生成的链接器脚本(抱歉,我无法将代码隐藏在剧透下):

 используется внутренний сценарий компоновщика:
 ==================================================
 /* Script for -pie -z combreloc */
 /* Copyright (C) 2014-2023 Free Software Foundation, Inc.
   Copying and distribution of this script, with or without modification,
   are permitted in any medium without royalty provided the copyright
   notice and this notice are preserved.  */
OUTPUT_FORMAT("elf64-littleaarch64", "elf64-bigaarch64",
          "elf64-littleaarch64")
OUTPUT_ARCH(aarch64)
ENTRY(_start)
SEARCH_DIR("=/usr/local/lib/aarch64-linux-gnu"); SEARCH_DIR("=/lib/aarch64-linux-gnu"); SEARCH_DIR("=/usr/lib/aarch64-linux-gnu"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib"); SEARCH_DIR("=/usr/aarch64-linux-gnu/lib");
SECTIONS
{
  /* Read-only sections, merged into text segment: */
  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
  .interp         : { *(.interp) }
  .note.gnu.build-id  : { *(.note.gnu.build-id) }
  .hash           : { *(.hash) }
  .gnu.hash       : { *(.gnu.hash) }
  .dynsym         : { *(.dynsym) }
  .dynstr         : { *(.dynstr) }
  .gnu.version    : { *(.gnu.version) }
  .gnu.version_d  : { *(.gnu.version_d) }
  .gnu.version_r  : { *(.gnu.version_r) }
  .rela.dyn       :
    {
      *(.rela.init)
      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
      *(.rela.fini)
      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
      *(.rela.ctors)
      *(.rela.dtors)
      *(.rela.got)
      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
      *(.rela.ifunc)
    }
  .rela.plt       :
    {
      *(.rela.plt)
      *(.rela.iplt)
    }
  .init           :
  {
    KEEP (*(SORT_NONE(.init)))
  } =0x1f2003d5
  .plt            : ALIGN(16) { *(.plt) *(.iplt) }
  .text           :
  {
    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
    *(.text.exit .text.exit.*)
    *(.text.startup .text.startup.*)
    *(.text.hot .text.hot.*)
    *(SORT(.text.sorted.*))
    *(.text .stub .text.* .gnu.linkonce.t.*)
    /* .gnu.warning sections are handled specially by elf.em.  */
    *(.gnu.warning)
  } =0x1f2003d5
  .fini           :
  {
    KEEP (*(SORT_NONE(.fini)))
  } =0x1f2003d5
  PROVIDE (__etext = .);
  PROVIDE (_etext = .);
  PROVIDE (etext = .);
  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
  .rodata1        : { *(.rodata1) }
  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
  .sframe         : ONLY_IF_RO { *(.sframe) *(.sframe.*) }
  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
  /* These sections are generated by the Sun/Oracle C++ compiler.  */
  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
  /* Adjust the address for the data segment.  We want to adjust up to
     the same address within the page on the next page up.  */
  . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE));
  /* Exception handling  */
  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
  .sframe         : ONLY_IF_RW { *(.sframe) *(.sframe.*) }
  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
  /* Thread Local Storage sections  */
  .tdata      :
   {
     PROVIDE_HIDDEN (__tdata_start = .);
     *(.tdata .tdata.* .gnu.linkonce.td.*)
   }
  .tbss       : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
  .preinit_array    :
  {
    PROVIDE_HIDDEN (__preinit_array_start = .);
    KEEP (*(.preinit_array))
    PROVIDE_HIDDEN (__preinit_array_end = .);
  }
  .init_array    :
  {
    PROVIDE_HIDDEN (__init_array_start = .);
    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
    PROVIDE_HIDDEN (__init_array_end = .);
  }
  .fini_array    :
  {
    PROVIDE_HIDDEN (__fini_array_start = .);
    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
    PROVIDE_HIDDEN (__fini_array_end = .);
  }
  .ctors          :
  {
    /* gcc uses crtbegin.o to find the start of
       the constructors, so we make sure it is
       first.  Because this is a wildcard, it
       doesn't matter if the user does not
       actually link against crtbegin.o; the
       linker won't look for a file to match a
       wildcard.  The wildcard also means that it
       doesn't matter which directory crtbegin.o
       is in.  */
    KEEP (*crtbegin.o(.ctors))
    KEEP (*crtbegin?.o(.ctors))
    /* We don't want to include the .ctor section from
       the crtend.o file until after the sorted ctors.
       The .ctor section from the crtend file contains the
       end of ctors marker and it must be last */
    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
    KEEP (*(SORT(.ctors.*)))
    KEEP (*(.ctors))
  }
  .dtors          :
  {
    KEEP (*crtbegin.o(.dtors))
    KEEP (*crtbegin?.o(.dtors))
    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
    KEEP (*(SORT(.dtors.*)))
    KEEP (*(.dtors))
  }
  .jcr            : { KEEP (*(.jcr)) }
  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
  .dynamic        : { *(.dynamic) }
  .got            : { *(.got) *(.igot) }
  . = DATA_SEGMENT_RELRO_END (24, .);
  .got.plt        : { *(.got.plt) *(.igot.plt) }
  .data           :
  {
    PROVIDE (__data_start = .);
    *(.data .data.* .gnu.linkonce.d.*)
    SORT(CONSTRUCTORS)
  }
  .data1          : { *(.data1) }
  _edata = .; PROVIDE (edata = .);
  . = .;
  __bss_start = .;
  __bss_start__ = .;
  .bss            :
  {
   *(.dynbss)
   *(.bss .bss.* .gnu.linkonce.b.*)
   *(COMMON)
   /* Align here to ensure that the .bss section occupies space up to
      _end.  Align after .bss to ensure correct alignment even if the
      .bss section disappears because there are no input sections.
      FIXME: Why do we need it? When there is no .bss section, we do not
      pad the .data section.  */
   . = ALIGN(. != 0 ? 64 / 8 : 1);
  }
  _bss_end__ = .; __bss_end__ = .;
  . = ALIGN(64 / 8);
  . = SEGMENT_START("ldata-segment", .);
  . = ALIGN(64 / 8);
  __end__ = .;
  _end = .; PROVIDE (end = .);
  . = DATA_SEGMENT_END (.);
  /* Stabs debugging sections.  */
  .stab          0 : { *(.stab) }
  .stabstr       0 : { *(.stabstr) }
  .stab.excl     0 : { *(.stab.excl) }
  .stab.exclstr  0 : { *(.stab.exclstr) }
  .stab.index    0 : { *(.stab.index) }
  .stab.indexstr 0 : { *(.stab.indexstr) }
  .comment       0 : { *(.comment) }
  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
  /* DWARF debug sections.
     Symbols in the DWARF debugging sections are relative to the beginning
     of the section so we begin them at 0.  */
  /* DWARF 1.  */
  .debug          0 : { *(.debug) }
  .line           0 : { *(.line) }
  /* GNU DWARF 1 extensions.  */
  .debug_srcinfo  0 : { *(.debug_srcinfo) }
  .debug_sfnames  0 : { *(.debug_sfnames) }
  /* DWARF 1.1 and DWARF 2.  */
  .debug_aranges  0 : { *(.debug_aranges) }
  .debug_pubnames 0 : { *(.debug_pubnames) }
  /* DWARF 2.  */
  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
  .debug_abbrev   0 : { *(.debug_abbrev) }
  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
  .debug_frame    0 : { *(.debug_frame) }
  .debug_str      0 : { *(.debug_str) }
  .debug_loc      0 : { *(.debug_loc) }
  .debug_macinfo  0 : { *(.debug_macinfo) }
  /* SGI/MIPS DWARF 2 extensions.  */
  .debug_weaknames 0 : { *(.debug_weaknames) }
  .debug_funcnames 0 : { *(.debug_funcnames) }
  .debug_typenames 0 : { *(.debug_typenames) }
  .debug_varnames  0 : { *(.debug_varnames) }
  /* DWARF 3.  */
  .debug_pubtypes 0 : { *(.debug_pubtypes) }
  .debug_ranges   0 : { *(.debug_ranges) }
  /* DWARF 5.  */
  .debug_addr     0 : { *(.debug_addr) }
  .debug_line_str 0 : { *(.debug_line_str) }
  .debug_loclists 0 : { *(.debug_loclists) }
  .debug_macro    0 : { *(.debug_macro) }
  .debug_names    0 : { *(.debug_names) }
  .debug_rnglists 0 : { *(.debug_rnglists) }
  .debug_str_offsets 0 : { *(.debug_str_offsets) }
  .debug_sup      0 : { *(.debug_sup) }
  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
}


==================================================
debian
  • 1 个回答
  • 38 Views
Martin Hope
41134
Asked: 2023-09-18 09:30:36 +0000 UTC

如何在 debian 12 上安装 pacman?

  • 5

我尝试按照互联网上任何指南中的说明进行操作: sudo apt-get -y install pacman

安装成功,但是命令pacman根本看不到

$ pacman -Ss node
-bash: pacman: command not found
debian
  • 1 个回答
  • 34 Views
Martin Hope
Artem
Asked: 2023-07-19 17:46:59 +0000 UTC

从 ~/.config 目录中删除设置以及 deb 包

  • 5

该程序使用该目录来存储设置~/.config/ProgramName。我希望该命令在完全卸载时sudo apt-get purge ProgramName也删除设置文件夹。写了这个postrm脚本:

#!/bin/sh -e

case "$1" in
    purge)
        rm -r ~/.config/ProgramName
    ;;

    *)
    ;;
esac

exit 0

删除时出错:

rm:无法删除“/root/.config/ProgramName”:没有这样的文件或目录

由于某种原因,它在超级用户文件夹中查找目录,而不是当前用户。使用命令时,rm -r $HOME/.config/AutoScreenshot一切都是一样的。

如何修复它?

debian
  • 2 个回答
  • 23 Views
Martin Hope
Сергей Рыжков
Asked: 2022-08-14 00:49:10 +0000 UTC

无法删除用户。他是,但写道他不是

  • 1

在此处输入图像描述我通过 adduser 创建了一个用户,但现在我无法删除它。写道没有这样的用户,但是当您尝试创建具有相同名称的用户时,它说它存在。该怎么办?

linux debian
  • 1 个回答
  • 53 Views
Martin Hope
Виталий
Asked: 2022-06-21 03:43:43 +0000 UTC

如何通过鼠标单击在linux debian中打开jar文件?(没有控制台)

  • 0

通过控制台(java -jar name.jar 并在添加一个 ./name.jar 后)它可以毫无问题地打开,但是使用鼠标它只能作为存档打开.. 我希望能够像在 Windows 中一样在点击时打开,如何实现这种可能性?

linux debian
  • 1 个回答
  • 71 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5