elfedit(1) 맨 페이지 - 윈디하나의 솔라나라

개요

섹션
맨 페이지 이름
검색(S)

elfedit(1)

elfedit(1)                       User Commands                      elfedit(1)

NAME
       elfedit - examine or edit ELF files

SYNOPSIS
       elfedit [-adrV] [-e cmd] [-L path]
            [-o default | simple | canon | num] [infile] [outfile]

DESCRIPTION
       elfedit  is a tool for examining or modifying the contents of an exist‐
       ing ELF object. Access is provided to most of the ELF data contained in
       an object, including the ELF  header,  section  header  table,  program
       header  table,  dynamic  section,  hardware  and software capabilities,
       string tables, and symbol tables.

   Syntax
       elfedit processes commands from the command line (-e  option)  or  from
       standard  input. If standard input is a terminal, elfedit provides ter‐
       minal editing capabilities, as well as  extensive  command  completion.
       ELF  uses  many  standard symbolic names for special integer values and
       bit masks. elfedit is aware  of  most  possible  completions  for  such
       names. You can press TAB at any point while entering an elfedit command
       to  cause  elfedit to display a usage message and any known completions
       for the text at the current cursor.


       elfedit functionality is organized in the form of modules. Each  module
       delivers a set of commands, focused on related functionality. A command
       is specified by combining the module and command names with a colon (:)
       delimiter,  with  no  intervening white space. For example, dyn:runpath
       refers to the runpath command provided by the dyn module. Module  names
       must  be  unique.  The  command  names within a given module are unique
       within that module, but the same command names can be used in more than
       one module.


       Some modules designate one of their commands to be the default  command
       for  that  module.  This  command is run when the user specifies only a
       module name. Most elfedit modules supply a command  named  dump,  which
       produces  the same information displayed by the elfdump utility for the
       part of the ELF file covered by the module. It is common for  a  module
       to specify dump as its default command.


       The  syntax used to execute an elfedit command is intended to be famil‐
       iar to anyone who uses UNIX command  line  utilities.  It  consists  of
       white  space delimited tokens. The first token is the command name. Op‐
       tions, which are arguments that start with  the  hyphen  (-)  character
       follow  the  command.  Plain  arguments  (operands) follow the options.
       There can be 0 or more options and operands for a given command, but if
       they are present, options always precede plain arguments.  The  special
       option,  --,  (two  hyphens)  can be used to delimit the end of the op‐
       tions. When it is encountered, any remaining arguments  are  considered
       to be plain arguments even if they start with a -.


       The interpretation of the characters in an elfedit token depends on the
       style of quoting used:

       Unquoted

           Outside  of  single (') or double (") quotes, backslash (\) acts as
           an escape character. When a backslash character  is  seen,  elfedit
           ignores  it,  and treats the character following it literally (even
           if the following character is itself a backslash). This feature can
           be used to insert a white space character into a string argument to
           a command without having it split the string into two separate  to‐
           kens. Similarly, it can be used to insert a quote or backslash as a
           literal character.


       Single Quotes

           Within single quotes ('), white space characters do not delimit to‐
           kens,  and  are interpreted as literal characters within the token.
           Double quote (") and backslash (\) characters  are  interpreted  as
           literal characters, and have no special meaning.


       Double Quotes

           Within double quotes ("), white space characters do not delimit to‐
           kens.  Single quote characters are interpreted literally and do not
           have a quoting function. Backslash (\) is an escape character which
           operates similarly to the way it is used in the C programming  lan‐
           guage within a string literal:


           \a       alert (bell)


           \b       backspace


           \f       form feed


           \n       newline


           \r       return


           \t       horizontal tab


           \v       vertical tab


           \\       backslash


           \'       single quote


           \"       double quote


           \ooo     An  octal constant, where ooo is one to three octal digits
                    (0...7)

           Any other character following a backslash is an error.



       The core commands belong to an internal module  named  sys.  All  other
       modules  are packaged as dynamically loadable sharable objects. elfedit
       loads modules on demand, when a command that requires it  is  executed,
       or  as the result of executing the sys:load command. Due to its special
       built in status, and because its commands are used heavily, elfedit al‐
       lows you to specify commands from the sys module without including  the
       sys:  prefix,  for example, load rather than sys:load. To access a com‐
       mand from any other module, you must specify the full module:cmd form.


       elfedit is delivered with the following standard modules:

       cap        Capabilities Section


       dyn        Dynamic Section


       ehdr       ELF Header


       phdr       Program Header Array


       reloc      Relocation Section


       shdr       Section Header Array


       str        String Table Section


       sym        Symbol Table Section


       syminfo    Symbol Information Section


       sys        Core built in elfedit commands


   Status And Command Documentation
       Status And Command Documentation


       The status (sys:status) command displays information about the  current
       elfedit session:

           o      Input and output files


           o      Option setting


           o      Module search path


           o      Modules loaded



       Included  with  every  elfedit module is extensive online documentation
       for every command, in a format similar to UNIX manual pages.  The  help
       (sys:help)  command  is used to display this information. To learn more
       about elfedit, start elfedit and use the  help  command  without  argu‐
       ments:

         % elfedit
         > help



       elfedit displays a welcome message with more information about elfedit,
       and on how to use the help system.


       To obtain summary information for a module:

         > help module



       To  obtain  the full documentation for a specific command provided by a
       module:

         > help module:command



       Using the dyn module and dyn:runpath commands as examples:

         > help dyn
         > help dyn:runpath



       help (sys:help) can be used to obtain help on itself:

         > help help


   Module Search Path
       elfedit modules are implemented as sharable objects which are loaded on
       demand. When a module is required, elfedit searches a  module  path  in
       order  to  locate  the  sharable object that implements the module. The
       path is a sequence of directory names delimited by  colon  (:)  charac‐
       ters.  In  addition to normal characters, the path can also contain any
       of the following tokens:

       %e    Expands to the ELFCLASS (32, 64) of the elfedit command.


       %E    Expands to the 64-bit ELFCLASS. This  is  equivalent  to  %e  for
             64-bit  versions  of elfedit, but expands to the empty string for
             32-bit versions.


       %i    Expands to the current instruction set  architecture  (ISA)  name
             (sparc, sparcv9, i386, amd64) of the elfedit command.


       %I    Expands  to  the  64-bit ISA. This is equivalent to %i for 64-bit
             versions of elfedit, but expands to the empty string  for  32-bit
             versions.


       %o    Expands to the value of the built in default module path. This is
             useful  for  appending  or  prepending directories to the default
             path.


       %r    Root of file system tree holding the elfedit program. On a  stan‐
             dard  system,  this  is simply the standard system root directory
             (/). On a development system, where the copy of  elfedit  can  be
             installed elsewhere, the use of %r can be used to ensure that the
             matching set of modules are used.


       %%    Expands to a single % character



       The  default  module  search path for elfedit, which makes use of these
       tokens, can be displayed:

         % elfedit -e status



       The default search path can be changed by setting the ELFEDIT_PATH  en‐
       vironment  variable,  or  by  using  the -L command line option. If you
       specify both, the environment variable supersedes the -L option.

OPTIONS
       The following options are supported:

       -a

           Enable autoprint mode. When autoprint is  enabled,  elfedit  prints
           the modified values that result when the ELF file is modified. This
           output  is  shown in the current output style, which can be changed
           using the -o option. The default output style is the style used  by
           the  elfdump(1) utility. autoprint mode is the default when elfedit
           is used interactively (when stdin and stdout are terminals). There‐
           fore, the -a option only has meaning when elfedit is used  in  non-
           interactive  contexts.  To disable autoprint in an interactive ses‐
           sion, use the elfedit command:

             > set a off



       -d

           If set, this option causes elfedit to issue informational  messages
           describing  its  internal  operations and details of the ELF object
           being processed. This can be useful when a  deep  understanding  of
           the operation being carried out is desired.


       -e cmd

           Specifies an edit command. Multiple -e options can be specified. If
           edit  commands are present on the command line, elfedit operates in
           batch mode. After opening the file, elfedit executes  each  command
           in  the  order  given,  after  which the modified file is saved and
           elfedit exits. Batch mode is useful for  performing  simple  opera‐
           tions from shell scripts and makefiles.


       -L path

           Sets  default  path  for  locating elfedit modules. Modules are de‐
           scribed in Module Search Path section of this manual page.


       -o default | simple | canon | num

           The style used to display ELF data.  This  option  establishes  the
           current  style  for  the session. It can be changed from within the
           elfedit session by using the set (sys:set) command, or by providing
           -o options to the individual commands executed within the session.

           default          The default style is to display output in a format
                            intended for human viewing. This style is  similar
                            to that used by the elfdump utility.


           num              Integer  values  are always shown in integer form.
                            Strings are shown as the integer offset  into  the
                            containing string table.


           simple, canon    When  displaying strings from within the ELF file,
                            only the string is displayed. Integer  values  are
                            displayed  as  symbolic constants if possible, and
                            in integer form otherwise. No titles, headers,  or
                            other supplemental output is shown.

                            The  simple, and canon styles differ in their dis‐
                            play of symbolic constants. When simple is  speci‐
                            fied,  symbolic  constants are shown in their most
                            commonly used form. When canon is specified,  sym‐
                            bolic  constants  are  displayed  in  their  fully
                            canonical form,  found  in  /usr/include/sys/elf.h
                            and  /usr/include/sys/link.h.  The canonical style
                            is recommended for use in shell scripts and  other
                            contexts in which stability of the reported output
                            is required.



       -r

           Read-only  mode. The input file is opened for read-only access, and
           the results of the edit session are not saved. elfedit does not al‐
           low the outfile argument when -r is specified.  Read-only  mode  is
           highly  recommended  when there is no intention to modify the file.
           In addition to providing extra protection against accidental  modi‐
           fication, it allows for the examination of files for which the user
           does not have write permission.


       -V
       --version

           Print version information and immediately exit.



       -?
       --help

           Print usage message and immediately exit.



OPERANDS
       The following operands are supported:

       infile

           Input file containing an ELF object to process.

           This can be an executable (ET_EXEC), shared object (ET_DYN), or re‐
           locatable  object  file,  (ET_REL).  Archives are not directly sup‐
           ported. To edit an object in an archive, you must extract  the  ob‐
           ject, edit the copy, and then insert it back into the archive.

           If  no  infile is present, elfedit runs in a limited mode that only
           allows executing commands from the sys: module. This mode  is  pri‐
           marily  to allow access to the command documentation available from
           the help (sys:help) command.

           If infile is present, and no outfile is given,  elfedit  edits  the
           file  in  place, and writes the results into the same file, causing
           the original file contents to be overwritten. It is usually  recom‐
           mended  that  elfedit  not be used in this mode, and that an output
           file be specified. Once the resulting file has been tested and val‐
           idated, it can be moved into the place of the original file.

           The -r option can be used to open infile for read-only access. This
           can be useful for examining an existing file that you do  not  wish
           to modify.


       outfile

           Output  file.  If  both  infile  and outfile are present, infile is
           opened for read-only access, and the modified object  contents  are
           written to outfile.


USAGE
       When supported by the system, elfedit runs as a 64-bit application, ca‐
       pable  of  processing  files  greater  than  or equal to 2 Gbytes (2^31
       bytes).


       At startup, elfedit uses libelf to open the input file and cache a copy
       of its contents in memory for editing. It can then execute one or  more
       commands.  A session finishes by optionally writing the modified object
       to the output file, and then exiting.


       If no infile is present, elfedit runs in a limited mode that  only  al‐
       lows  executing commands from the sys module. This mode is primarily to
       allow access to the  command  documentation  available  from  the  help
       (sys:help) command.


       If  one  or more -e options are specified, the commands they supply are
       executed in the order given.  elfedit  adds  implicit  calls  to  write
       (sys:write)  and  quit  (sys:quit) immediately following the given com‐
       mands, causing the output file to be written and the elfedit process to
       exit. This form of use is convenient in shell scripts and makefiles.


       If no -e options are specified, elfedit reads commands from  stdin  and
       executes  them in the order given. The caller must explicitly issue the
       write (sys:write) and quit (sys:quit) commands to save their  work  and
       exit when running in this mode.

EXIT STATUS
       The following exit values are returned:

       0    Successful completion.


       1    A fatal error occurred.


       2    Invalid command line options were specified.


EXAMPLES
       In the following examples, interactive use of elfedit is shown with the
       shell  prompt  (%) and the elfedit prompt (>). Neither of these charac‐
       ters should be entered by the user.

       Example 1 Changing the Runpath of an Executable



       The following example presupposes an  executable  named  prog,  is  in‐
       stalled  in  a  bin  directory  that  has an adjacent lib directory for
       sharable objects. The following command sets the runpath of  that  exe‐
       cutable to the lib directory:


         % elfedit -e 'dyn:runpath $ORIGIN/../lib' prog




       The  use  of single quotes with the argument to the -e option is neces‐
       sary to ensure that the shell passes the entire command as a single ar‐
       gument to elfedit.



       Alternatively, the same operation can be done using elfedit in its non-
       batch mode:


         % elfedit prog
         > dyn:runpath $ORIGIN/../lib
               index  tag         value
                [30]  RUNPATH     0x3e6      $ORIGIN/../lib
         > write
         > quit




       The addition or modification of elements such as runpath or needed  en‐
       tries  might only be achievable when padding exists within the objects.
       See Notes.

       Example 2 Removing a Hardware Capability Bit



       Objects that require optional hardware support to run are built with  a
       capability  section that contains a mask of bits specifying which capa‐
       bilities they need. The  runtime  linker  (ld.so.1)  checks  this  mask
       against  the  attributes  of  the running system to determine whether a
       given object is able to be run by the current system. Programs that re‐
       quire abilities not available on the system are prevented from running.



       This check prevents a naive program that does not explicitly check  for
       the  hardware  support it requires from crashing in a confusing manner.
       However, it can be inconvenient for a program that is  written  to  ex‐
       plicitly check the system capabilities at runtime. Such a program might
       have  optimized code to use when the hardware supports it while provid‐
       ing a generic fallback version that can be  run,  albeit  more  slowly,
       otherwise.  In this case, the hardware compatibility mask prevents such
       a program from running on the older hardware. In such a case,  removing
       the relevant bit from the mask allows the program to run.



       The  following example removes the AV_386_SSE3 hardware capability from
       an x86 binary that uses the SSE3 CPU extension. This transfers  respon‐
       sibility for validating the ability to use SSE3 from the runtime linker
       to the program itself:


         % elfedit -e 'cap:hw1 -and -cmp sse3' prog


       Example 3 Reading Information From an Object



       elfedit  can  be  used to extract specific targeted information from an
       object. The following shell command reads the number of section headers
       contained in the file /usr/bin/ls:


         % SHNUM=`elfedit -r -onum -e 'ehdr:e_shnum' /usr/bin/ls`
         % echo $SHNUM
         29




       You might get a different value, depending on the version of Oracle So‐
       laris and type of machine that you are using. The -r option causes  the
       file  to be opened read-only, allowing a user with ordinary access per‐
       missions to open the file, and protecting against accidental damage  to
       an  important  system executable. The num output style is used in order
       to obtain only the desired value, without any extraneous text.



       Similarly, the following extracts the symbol type of the symbol  unlink
       from the C runtime library:


         % TYPE=`elfedit -r -osimple -e 'sym:st_type unlink' \
               /lib/libc.so`
         % echo $TYPE
         STT_FUNC


       Example 4 Specifying ASLR Settings For An Executable



       The  default  Address Space Layout Randomization (ASLR) behavior for an
       executable is specified with the DT_SUNW_SX_ASLR dynamic section entry.
       The following demonstrates how to enable or disable ASLR for the speci‐
       fied program.


         % elfedit prog
         > dyn:sunw_sx aslr enable
               index  tag            value
                [40]  SUNW_SX_ASLR   0x2           ENABLE
         > dyn:sunw_sx aslr disable
               index  tag            value
                [40]  SUNW_SX_ASLR   0x1           DISABLE


ENVIRONMENT VARIABLES
       ELFEDIT_PATH

           Alters the default module search path. Module search paths are dis‐
           cussed in the Module Search Path section of this manual page.


       LD_NOEXEC_64

           Suppresses the automatic execution of the 64-bit  elfedit.  By  de‐
           fault,  the  64-bit version of elfedit runs if the system is 64-bit
           capable.


       PAGER

           Interactively delivers output from elfedit to the  screen.  If  not
           set, more is used. See more(1).


FILES
       /usr/lib/elfedit

           Default  directory for elfedit modules that are loaded on demand to
           supply editing commands.


       ~/.teclarc

           Personal tecla customization file for  command  line  editing.  See
           tecla(7).


ATTRIBUTES
       See attributes(7) for descriptions of the following attributes:

       tab()  box; cw(2.75i) |cw(2.75i) lw(2.75i) |lw(2.75i) ATTRIBUTE TYPEAT‐
       TRIBUTE VALUE _ Availabilitysystem/linker _ Interface  StabilityCommit‐
       ted


SEE ALSO
       dump(1),   elfcompress(1),   elfdump(1),  ld.so.1(1),  more(1),  nm(1),
       pvs(1), elf(3ELF), libelf(3LIB), attributes(7), tecla(7), sxadm(8)


       Oracle Solaris 11.4 Linkers and Libraries Guide

WARNINGS
       elfedit is designed to be a tool for testing and development of the ELF
       system. It offers the ability to examine and change nearly every  piece
       of ELF metadata in the object. It quietly allows edits that can produce
       an invalid or unusable ELF file. The user is expected to have knowledge
       of  the  ELF  format and of the rules and conventions that govern them.
       The Oracle Solaris 11.4 Linkers and Libraries Guide can be helpful when
       using elfedit.


       elfedit allows the user to alter the ELF metadata  in  an  object,  but
       cannot  understand or alter the code of the actual program. Setting ELF
       attributes such as types, sizes, alignments, and so forth in  a  manner
       that  does  not agree with the actual contents of the file is therefore
       likely to yield a broken and unusable output object. Such changes might
       be useful for testing of linker components, but should be avoided  oth‐
       erwise.


       Higher  level operations, such as the use of the dyn:runpath command to
       change the runpath of an object, are safe, and can be carried out with‐
       out the sort of risk detailed in this section.

NOTES
       Not every ELF operation supported by elfedit can be  successfully  car‐
       ried  out  on  every ELF object. elfedit is constrained by the existing
       sections found in the file.


       One area of particular interest is that elfedit might not  be  able  to
       modify  the runpath of a given object. To modify a runpath, the follow‐
       ing must be true:

           o      The desired string must already exist in the dynamic  string
                  table,  or  there  must be enough reserved space within this
                  section for the new string to be added. If your object has a
                  string table reservation area, the  value  of  the  .dynamic
                  DT_SUNW_STRPAD  element  indicates the size of the area. The
                  following elfedit command can be used to check this:

                    % elfedit -r -e 'dyn:tag DT_SUNW_STRPAD' file



           o      The dynamic section must already have a runpath element,  or
                  there must be an unused dynamic slot available where one can
                  be  inserted.  To  test for the presence of an existing run‐
                  path:


                    % elfedit -r -e 'dyn:runpath' file

                  A dynamic section uses an element of type DT_NULL to  termi‐
                  nate the array found in that section. The final DT_NULL can‐
                  not  be  changed,  but  if there are more than one of these,
                  elfedit can convert one of them into a runpath  element.  To
                  test for extra dynamic slots:

                    % elfedit -r -e 'dyn:tag DT_NULL' file




       Older  objects  do  not have the extra space necessary to complete such
       operations. The space necessary to do so was introduced in  the  Oracle
       Solaris 10 8/11 (Update 10) release.


       When  an operation fails, the detailed information printed using the -d
       (debug) option can be very helpful in uncovering the reason why.


       elfedit modules follow a convention by which commands that directly ma‐
       nipulate a field in an ELF structure have the same name as  the  field,
       while  commands  that  implement  higher level concepts do not. For in‐
       stance, the command to manipulate the e_flags field in the  ELF  header
       is  named  ehdr:e_flags.  Therefore,  you generally find the command to
       modify ELF fields by identifying the module and looking for  a  command
       with the name of the field.


       elfedit  provides  readonly support for compressed sections. Compressed
       sections are identified by the SHF_COMPRESSED section header  flag.  In
       order  to  modify such a section with elfedit, it is necessary to first
       use an external utility, such as elfcompress(1), to decompress the sec‐
       tion.


       The elfedit command is unable to modify core files. The -r  option  can
       be specified to operate on core files in readonly mode.

HISTORY
       The reloc module was introduced in the Oracle Solaris 11.2.0 release.


       The elfedit() command was introduced in the Oracle Solaris 10 8/11 (Up‐
       date  10)  release,  with  the  cap,  dyn,  ehdr, phdr, shdr, str, sym,
       syminfo, and sys modules.

Oracle Solaris 11.4               29 Nov 2022                       elfedit(1)
맨 페이지 내용의 저작권은 맨 페이지 작성자에게 있습니다.
RSS ATOM XHTML 5 CSS3