• Linux 调试 (objdump/strace/strings)


    1. Linux 调试 (objdump/strace/strings)

    1.1. 查看系统 glibc 版本号

    1. 第一种
    # ldd --version
    ldd (Ubuntu GLIBC 2.27-3ubuntu1) 2.27
    Copyright (C) 2018 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    Written by Roland McGrath and Ulrich Drepper.
     
    2. 第二种
    # ls -alh /lib/x86_64-linux-gnu/libc.so.6 
    lrwxrwxrwx 1 root root 12 Apr 17  2018 /lib/x86_64-linux-gnu/libc.so.6 -> libc-2.27.so
    注意:libc-2.27.so :版本号即 2.27
     
    # strings /lib/x86_64-linux-gnu/libc-2.27.so |grep -in5 version
     
    GNU C Library (Ubuntu GLIBC 2.27-3ubuntu1) stable release version 2.27.
    Copyright (C) 2018 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.
    There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
    PARTICULAR PURPOSE.
     
    3. 第三种
    //glibc_version.c
    #include 
    #include 
    int main(void)
    {
      printf("glic_version = %s\n",gnu_get_libc_version());
      return 0;
    }
    # gcc glibc_version.c
    # ./a.out
    glic_version = 2.27
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    1.2. 查看 so/bin 中的依赖

    # objdump
    Usage: objdump <option(s)> <file(s)>
     Display information from object <file(s)>.
     At least one of the following switches must be given:
      -a, --archive-headers    Display archive header information
      -f, --file-headers       Display the contents of the overall file header
      -p, --private-headers    Display object format specific file header contents
      -P, --private=OPT,OPT... Display object format specific contents
      -h, --[section-]headers  Display the contents of the section headers
      -x, --all-headers        Display the contents of all headers
      -d, --disassemble        Display assembler contents of executable sections
      -D, --disassemble-all    Display assembler contents of all sections
      -S, --source             Intermix source code with disassembly
      -s, --full-contents      Display the full contents of all sections requested
      -g, --debugging          Display debug information in object file
      -e, --debugging-tags     Display debug information using ctags style
      -G, --stabs              Display (in raw form) any STABS info in the file
      -W[lLiaprmfFsoRtUuTgAckK] or
      --dwarf[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,
              =frames-interp,=str,=loc,=Ranges,=pubtypes,
              =gdb_index,=trace_info,=trace_abbrev,=trace_aranges,
              =addr,=cu_index,=links,=follow-links]
                               Display DWARF info in the file
      -t, --syms               Display the contents of the symbol table(s)
      -T, --dynamic-syms       Display the contents of the dynamic symbol table
      -r, --reloc              Display the relocation entries in the file
      -R, --dynamic-reloc      Display the dynamic relocation entries in the file
      @<file>                  Read options from <file>
      -v, --version            Display this program's version number
      -i, --info               List object formats and architectures supported
      -H, --help               Display this information
     
    # objdump -x test| grep NEED
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    1.3. 调试 bin 报错原因

    #  strace -h
    usage: strace [-CdffhiqrtttTvVwxxy] [-I n] [-e expr]...
                  [-a column] [-o file] [-s strsize] [-P path]...
                  -p pid... / [-D] [-E var=val]... [-u username] PROG [ARGS]
       or: strace -c[dfw] [-I n] [-e expr]... [-O overhead] [-S sortby]
                  -p pid... / [-D] [-E var=val]... [-u username] PROG [ARGS]
     
    Output format:
      -a column      alignment COLUMN for printing syscall results (default 40)
      -i             print instruction pointer at time of syscall
      -k             obtain stack trace between each syscall (experimental)
      -o file        send trace output to FILE instead of stderr
      -q             suppress messages about attaching, detaching, etc.
      -r             print relative timestamp
      -s strsize     limit length of print strings to STRSIZE chars (default 32)
      -t             print absolute timestamp
      -tt            print absolute timestamp with usecs
      -T             print time spent in each syscall
      -x             print non-ascii strings in hex
      -xx            print all strings in hex
      -y             print paths associated with file descriptor arguments
      -yy            print protocol specific information associated with socket file descriptors
     
    Statistics:
      -c             count time, calls, and errors for each syscall and report summary
      -C             like -c but also print regular output
      -O overhead    set overhead for tracing syscalls to OVERHEAD usecs
      -S sortby      sort syscall counts by: time, calls, name, nothing (default time)
      -w             summarise syscall latency (default is system time)
     
    Filtering:
      -e expr        a qualifying expression: option=[!]all or option=[!]val1[,val2]...
         options:    trace, abbrev, verbose, raw, signal, read, write, fault
      -P path        trace accesses to path
     
    Tracing:
      -b execve      detach on execve syscall
      -D             run tracer process as a detached grandchild, not as parent
      -f             follow forks
      -ff            follow forks with output into separate files
      -I interruptible
         1:          no signals are blocked
         2:          fatal signals are blocked while decoding syscall (default)
         3:          fatal signals are always blocked (default if '-o FILE PROG')
         4:          fatal signals and SIGTSTP (^Z) are always blocked
                     (useful to make 'strace -o FILE PROG' not stop on ^Z)
     
    Startup:
      -E var         remove var from the environment for command
      -E var=val     put var=val in the environment for command
      -p pid         trace process with process id PID, may be repeated
      -u username    run command as username handling setuid and/or setgid
     
    Miscellaneous:
      -d             enable debug output to stderr
      -v             verbose mode: print unabbreviated argv, stat, termios, etc. args
      -h             print help message
      -V             print version
     
    # strace -f ./test    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60

    1.4. 查看 so/bin 中字符串

    # strings -h
    Usage: strings [option(s)] [file(s)]
     Display printable strings in [file(s)] (stdin by default)
     The options are:
      -a - --all                Scan the entire file, not just the data section [default]
      -d --data                 Only scan the data sections in the file
      -f --print-file-name      Print the name of the file before each string
      -n --bytes=[number]       Locate & print any NUL-terminated sequence of at
      -<number>                   least [number] characters (default 4).
      -t --radix={o,d,x}        Print the location of the string in base 8, 10 or 16
      -w --include-all-whitespace Include all whitespace as valid string characters
      -o                        An alias for --radix=o
      -T --target=<BFDNAME>     Specify the binary file format
      -e --encoding={s,S,b,l,B,L} Select character size and endianness:
                                s = 7-bit, S = 8-bit, {b,l} = 16-bit, {B,L} = 32-bit
      -s --output-separator=<string> String used to separate strings in output.
      @<file>                   Read options from <file>
      -h --help                 Display this information
      -v -V --version           Print the program's version number
    strings: supported targets: elf64-x86-64 elf32-i386 elf32-iamcu elf32-x86-64 a.out-i386-linux pei-i386 pei-x86-64 elf64-l1om elf64-k1om elf64-little elf64-big elf32-little elf32-big pe-x86-64 pe-bigobj-x86-64 pe-i386 plugin srec symbolsrec verilog tekhex binary ihex
    Report bugs to <http://www.sourceware.org/bugzilla/>
     
    # stirngs -a test.so |grep conf --color
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
  • 相关阅读:
    前端框架里url中#的真正作用
    园子开店记-起名:万事开头难,起名难上难
    EMC EMI磁珠的特性
    php 把数字转化为大写中文
    我为什么开始写技术博客
    Springboot项目升级2.2.x升至2.7.x
    汉语拼音标注
    react&antd问题
    vue2通过.env进行多环境配置
    华清远见(上海中心)
  • 原文地址:https://blog.csdn.net/wan212000/article/details/134184105