LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1392|回复: 8

看下面的脚本是什么语言啊?

[复制链接]
发表于 2003-6-26 10:07:11 | 显示全部楼层 |阅读模式
我只知道这段代码是把ELF文件重新组织,进行执行,请问要看懂它,除了了解ELF文件各节区(section)的组织外,还需要什么啊?下面的脚本是C吗?那些函数是libc里的吗?

OUTPUT_FORMAT("elf32-i386", "elf32-i386",
              "elf32-i386")
OUTPUT_ARCH(i386)
ENTRY(_start)
SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/usr/i386-redhat-linux/lib);
/* Do we need any of these for elf?
   __DYNAMIC = 0;    */
SECTIONS
{
  /* Read-only sections, merged into text segment: */
  . = 0x07048000 + SIZEOF_HEADERS;
  .interp     : { *(.interp)         }
  .hash          : { *(.hash)                }
  .dynsym        : { *(.dynsym)                }
  .dynstr        : { *(.dynstr)                }
  .gnu.version   : { *(.gnu.version)        }
  .gnu.version_d   : { *(.gnu.version_d)        }
  .gnu.version_r   : { *(.gnu.version_r)        }
  .rel.dyn         :
    {
      *(.rel.init)
      *(.rel.text)
      *(.rel.text.*)
      *(.rel.gnu.linkonce.t.*)
      *(.rel.fini)
      *(.rel.rodata)
      *(.rel.rodata.*)
      *(.rel.gnu.linkonce.r.*)
      *(.rel.data)
      *(.rel.data.*)
      *(.rel.gnu.linkonce.d.*)
      *(.rel.ctors)
      *(.rel.dtors)
      *(.rel.got)
      *(.rel.sdata)
      *(.rel.sdata.*)
      *(.rel.gnu.linkonce.s.*)
      *(.rel.sbss)
      *(.rel.sbss.*)
      *(.rel.gnu.linkonce.sb.*)
      *(.rel.sdata2)
      *(.rel.sdata2.*)
      *(.rel.gnu.linkonce.s2.*)
      *(.rel.sbss2)
      *(.rel.sbss2.*)
      *(.rel.gnu.linkonce.sb2.*)
      *(.rel.bss)
      *(.rel.bss.*)
      *(.rel.gnu.linkonce.b.*)
    }
  .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.ctors)
      *(.rela.dtors)
      *(.rela.got)
      *(.rela.sdata)
      *(.rela.sdata.*)
      *(.rela.gnu.linkonce.s.*)
      *(.rela.sbss)
      *(.rela.sbss.*)
      *(.rela.gnu.linkonce.sb.*)
      *(.rela.sdata2)
      *(.rela.sdata2.*)
      *(.rela.gnu.linkonce.s2.*)
      *(.rela.sbss2)
      *(.rela.sbss2.*)
      *(.rela.gnu.linkonce.sb2.*)
      *(.rela.bss)
      *(.rela.bss.*)
      *(.rela.gnu.linkonce.b.*)
    }
  .rel.plt       : { *(.rel.plt)                }
  .rela.plt      : { *(.rela.plt)                }
  .init          :
  {
    KEEP (*(.init))
  } =0x9090
  .plt      : { *(.plt)        }
  .text      :
  {
    *(.text)
    *(.text.*)
    *(.stub)
    /* .gnu.warning sections are handled specially by elf32.em.  */
    *(.gnu.warning)
    *(.gnu.linkonce.t.*)
  } =0x9090
  .fini      :
  {
    KEEP (*(.fini))
  } =0x9090
  PROVIDE (__etext = .);
  PROVIDE (_etext = .);
  PROVIDE (etext = .);
  .rodata   : { *(.rodata) *(.rodata.*) *(.gnu.linkonce.r.*) }
  .rodata1   : { *(.rodata1) }
  .sdata2   : { *(.sdata2) *(.sdata2.*) *(.gnu.linkonce.s2.*) }
  .sbss2   : { *(.sbss2) *(.sbss2.*) *(.gnu.linkonce.sb2.*) }
  /* Adjust the address for the data segment.  We want to adjust up to
     the same address within the page on the next page up.  */
  . = ALIGN(0x1000) + (. & (0x1000 - 1));
  .data    :
  {
    *(.data)
    *(.data.*)
    *(.gnu.linkonce.d.*)
    SORT(CONSTRUCTORS)
  }
  .data1   : { *(.data1) }
  .eh_frame : { KEEP (*(.eh_frame)) }
  .gcc_except_table : { *(.gcc_except_table) }
  .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))
    /* We don't want to include the .ctor section from
       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 ) .ctors))
    KEEP (*(SORT(.ctors.*)))
    KEEP (*(.ctors))
  }
   .dtors         :
  {
    KEEP (*crtbegin.o(.dtors))
    KEEP (*(EXCLUDE_FILE (*crtend.o ) .dtors))
    KEEP (*(SORT(.dtors.*)))
    KEEP (*(.dtors))
  }
  .got                  : { *(.got.plt) *(.got) }
  .dynamic       : { *(.dynamic) }
  /* We want the small data sections together, so single-instruction offsets
     can access them all, and initialized data all before uninitialized, so
     we can shorten the on-disk segment size.  */
  .sdata     :
  {
    *(.sdata)
    *(.sdata.*)
    *(.gnu.linkonce.s.*)
  }
  _edata = .;
  PROVIDE (edata = .);
  __bss_start = .;
  .sbss      :
  {
    PROVIDE (__sbss_start = .);
    PROVIDE (___sbss_start = .);
    *(.dynsbss)
    *(.sbss)
    *(.sbss.*)
    *(.gnu.linkonce.sb.*)
    *(.scommon)
    PROVIDE (__sbss_end = .);
    PROVIDE (___sbss_end = .);
  }
  .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.  */
   . = ALIGN(32 / 8);
  }
  . = ALIGN(32 / 8);
  _end = .;
  PROVIDE (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) }
  /* 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_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) }
  /* These must appear regardless of  .  */
}:help
发表于 2003-6-26 10:44:43 | 显示全部楼层
不知道。
发表于 2003-6-26 11:12:10 | 显示全部楼层
汇编吧?
或者用宏,偶也可以把c写成上面这个样子
发表于 2003-6-26 11:13:05 | 显示全部楼层
好奇,关注
发表于 2003-6-26 19:16:52 | 显示全部楼层
看看我转的那篇文章ELF文件结构的

里面讲得比较清楚了
但是这里面使用的也不像是汇编
 楼主| 发表于 2003-6-27 09:13:03 | 显示全部楼层
哪篇ELF文章啊?
对于ELF文件的结构我还是了解的,上面的好多都是节区的引用,但是具体怎么回事,不清楚
发表于 2003-6-27 09:58:11 | 显示全部楼层
我前几天刚发的
代码是从哪里搞到的
发表于 2003-6-27 11:02:57 | 显示全部楼层
最初由 shensnow520 发表
哪篇ELF文章啊?
对于ELF文件的结构我还是了解的,上面的好多都是节区的引用,但是具体怎么回事,不清楚

在精华区,也可以在论坛索引中找到。
 楼主| 发表于 2003-6-27 11:26:24 | 显示全部楼层
我现在在看的一个做检查点的源代码,是condor系统里的一部分,其原代码可以从下面地址下载:www.cs.wisc.edu/~zandy/ckpt,ckpt.tar.gz里的一个脚本
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表