点击上方,选择星标置顶,每天给你送干货

阅读大概需要11分钟

跟随小博主,每天进步一丢丢

来自:嵌入式Linux

编辑:良许Linux

文章目录

  • #file

  • #ldd

  • #ltrace

  • #hexdump

  • #strings

  • #readelf

  • #objdump

  • #strace

  • #nm

  • #gdb

磨刀不误砍柴工,Linux下也是一样,你掌握了正确的调试手段,对你的开发会非常有帮助。总结的这几个命令非常经典。

#file

这个命令可以查看文件的确切文件类型

#ldd

如何找到可执行文件所依赖的库?这就是ldd命令出现的原因,有人的地方就有江湖,有需要我的地方就应该出现我。针对动态链接的二进制文件运行它会显示其所有依赖的库及其路径。

#ltrace

这个命令可以追踪命令运行的时候跑了哪些函数,可以作为堆栈调用跟踪调试使用。ltrace能够跟踪进程的库函数调用,它会显现出哪个库函数被调用。

详细链接:

https://www.cnblogs.com/machangwei-8/p/10388938.html

-a 对齐具体某个列的返回值。
-c 计算时间和调用,并在程序退出时打印摘要。
-C 解码低级别名称(内核级)为用户级名称。
-d 打印调试信息。
-e 改变跟踪的事件。
-f 跟踪子进程。
-h 打印帮助信息。
-i 打印指令指针,当库调用时。
-l 只打印某个库中的调用。
-L 不打印库调用。
-n, --indent=NR 对每个调用级别嵌套以NR个空格进行缩进输出。
-o, --output=file 把输出定向到文件。
-p PID 附着在值为PID的进程号上进行ltrace。
-r 打印相对时间戳。
-s STRLEN 设置打印的字符串最大长度。
-S 显示系统调用。
-t, -tt, -ttt 打印绝对时间戳。
-T 输出每个调用过程的时间开销。
-u USERNAME 使用某个用户id或组ID来运行命令。
-V, --version 打印版本信息,然后退出。
-x NAME treat the global NAME like a library subroutine.
weiqifa0@weiqifa-System-Product-Name:~$ ltrace ls
strrchr("ls", '/')                                                     = nil
setlocale(LC_ALL, "")                                                  = "zh_CN.UTF-8"
bindtextdomain("coreutils", "/usr/share/locale")                       = "/usr/share/locale"
textdomain("coreutils")                                                = "coreutils"
__cxa_atexit(0x5594e2fd9ca0, 0, 0x5594e31ed008, 0x736c6974756572)      = 0
isatty(1)                                                              = 1
getenv("QUOTING_STYLE")                                                = nil
getenv("COLUMNS")                                                      = nil
ioctl(1, 21523, 0x7fff061929c0)                                        = 0
getenv("TABSIZE")                                                      = nil
getopt_long(1, 0x7fff06192af8, "abcdfghiklmnopqrstuvw:xABCDFGHI:"..., 0x5594e31ec2e0, -1) = -1
getenv("LS_BLOCK_SIZE")                                                = nil
getenv("BLOCK_SIZE")                                                   = nil
getenv("BLOCKSIZE")                                                    = nil
getenv("POSIXLY_CORRECT")                                              = nil
getenv("BLOCK_SIZE")                                                   = nil
__errno_location()                                                     = 0x7f3801ac0258
memcpy(0x5594e4a91a50, "\003\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 56) = 0x5594e4a91a50
__errno_location()                                                     = 0x7f3801ac0258
memcpy(0x5594e4a91a90, "\003\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 56) = 0x5594e4a91a90
getenv("TZ")                                                           = nil
strlen(".")                                                            = 1
memcpy(0x5594e4a969c0, ".\0", 2)                                       = 0x5594e4a969c0
__errno_location()                                                     = 0x7f3801ac0258
opendir(".")                                                           = 0x5594e4a969e0
readdir(0x5594e4a969e0)                                                = 0x5594e4a96a10
__errno_location()                                                     = 0x7f3801ac0258
__ctype_get_mb_cur_max()                                               = 6
strlen("Desktop")                                                      = 7
strlen("Desktop")                                                      = 7
memcpy(0x5594e4a9ea20, "Desktop\0", 8)                                 = 0x5594e4a9ea20
readdir(0x5594e4a969e0)                                                = 0x5594e4a96a30
readdir(0x5594e4a969e0)                                                = 0x5594e4a96a50
readdir(0x5594e4a969e0)                                                = 0x5594e4a96a70
readdir(0x5594e4a969e0)                                                = 0x5594e4a96a90
readdir(0x5594e4a969e0)                                                = 0x5594e4a96ab0
__errno_location()                                                     = 0x7f3801ac0258
__ctype_get_mb_cur_max()                                               = 6
strlen("examples.desktop")                                             = 16
strlen("examples.desktop")                                             = 16
memcpy(0x5594e4a9ea40, "examples.desktop\0", 17)                       = 0x5594e4a9ea40
readdir(0x5594e4a969e0)                                                = 0x5594e4a96ad8
readdir(0x5594e4a969e0)                                                = 0x5594e4a96af8
readdir(0x5594e4a969e0)                                                = 0x5594e4a96b20
__errno_location()                                                     = 0x7f3801ac0258
__ctype_get_mb_cur_max()                                               = 6
strlen("Public")                                                       = 6
strlen("Public")                                                       = 6
memcpy(0x5594e4a9ea60, "Public\0", 7)                                  = 0x5594e4a9ea60
readdir(0x5594e4a969e0)                                                = 0x5594e4a96b40
readdir(0x5594e4a969e0)                                                = 0x5594e4a96b68
__errno_location()                                                     = 0x7f3801ac0258
__ctype_get_mb_cur_max()                                               = 6
strlen("Pictures")                                                     = 8
strlen("Pictures")                                                     = 8
memcpy(0x5594e4a9ea80, "Pictures\0", 9)                                = 0x5594e4a9ea80
readdir(0x5594e4a969e0)                                                = 0x5594e4a96b88
readdir(0x5594e4a969e0)                                                = 0x5594e4a96ba8
readdir(0x5594e4a969e0)                                                = 0x5594e4a96bc0
readdir(0x5594e4a969e0)                                                = 0x5594e4a96bd8
readdir(0x5594e4a969e0)                                                = 0x5594e4a96bf8
readdir(0x5594e4a969e0)                                                = 0x5594e4a96c28
__errno_location()                                                     = 0x7f3801ac0258
__ctype_get_mb_cur_max()                                               = 6
strlen("Videos")                                                       = 6
strlen("Videos")                                                       = 6
memcpy(0x5594e4a9eaa0, "Videos\0", 7)                                  = 0x5594e4a9eaa0
readdir(0x5594e4a969e0)                                                = 0x5594e4a96c48
__errno_location()                                                     = 0x7f3801ac0258
__ctype_get_mb_cur_max()                                               = 6
strlen("Music")                                                        = 5
strlen("Music")                                                        = 5
memcpy(0x5594e4a9eac0, "Music\0", 6)                                   = 0x5594e4a9eac0
readdir(0x5594e4a969e0)                                                = 0x5594e4a96c68
readdir(0x5594e4a969e0)                                                = 0x5594e4a96c80
readdir(0x5594e4a969e0)                                                = 0x5594e4a96ca0
readdir(0x5594e4a969e0)                                                = 0x5594e4a96cc0
readdir(0x5594e4a969e0)                                                = 0x5594e4a96ce0
readdir(0x5594e4a969e0)                                                = 0x5594e4a96d00
readdir(0x5594e4a969e0)                                                = 0x5594e4a96d20
__errno_location()                                                     = 0x7f3801ac0258
__ctype_get_mb_cur_max()                                               = 6
strlen("c")                                                            = 1
strlen("c")                                                            = 1
memcpy(0x5594e4a9eae0, "c\0", 2)                                       = 0x5594e4a9eae0
readdir(0x5594e4a969e0)                                                = 0x5594e4a96d38
readdir(0x5594e4a969e0)                                                = 0x5594e4a96d58
readdir(0x5594e4a969e0)                                                = 0x5594e4a96d78
readdir(0x5594e4a969e0)                                                = 0x5594e4a96d98
readdir(0x5594e4a969e0)                                                = 0x5594e4a96db8
readdir(0x5594e4a969e0)                                                = 0x5594e4a96de0
readdir(0x5594e4a969e0)                                                = 0x5594e4a96e00
__errno_location()                                                     = 0x7f3801ac0258
__ctype_get_mb_cur_max()                                               = 6
strlen("Templates")                                                    = 9
strlen("Templates")                                                    = 9
memcpy(0x5594e4a9eb00, "Templates\0", 10)                              = 0x5594e4a9eb00
readdir(0x5594e4a969e0)                                                = 0x5594e4a96e20
readdir(0x5594e4a969e0)                                                = 0x5594e4a96e48
readdir(0x5594e4a969e0)                                                = 0x5594e4a96e68
readdir(0x5594e4a969e0)                                                = 0x5594e4a96e88
readdir(0x5594e4a969e0)                                                = 0x5594e4a96eb0
readdir(0x5594e4a969e0)                                                = 0x5594e4a96ed0
readdir(0x5594e4a969e0)                                                = 0x5594e4a96ee8
__errno_location()                                                     = 0x7f3801ac0258
__ctype_get_mb_cur_max()                                               = 6
strlen("Downloads")                                                    = 9
strlen("Downloads")                                                    = 9
memcpy(0x5594e4a9eb20, "Downloads\0", 10)                              = 0x5594e4a9eb20
readdir(0x5594e4a969e0)                                                = 0x5594e4a96f08
__errno_location()                                                     = 0x7f3801ac0258
__ctype_get_mb_cur_max()                                               = 6
strlen("Documents")                                                    = 9
strlen("Documents")                                                    = 9
memcpy(0x5594e4a9eb40, "Documents\0", 10)                              = 0x5594e4a9eb40
readdir(0x5594e4a969e0)                                                = 0
closedir(0x5594e4a969e0)                                               = 0
_setjmp(0x5594e31ed300, 0x7f3801f3f3f0, 0x5594e4a96a30, 0x5594e4a92330) = 0
__errno_location()                                                     = 0x7f3801ac0258
strcoll("Downloads", "Documents")                                      = 4
__errno_location()                                                     = 0x7f3801ac0258
strcoll("Templates", "Documents")                                      = 3
__errno_location()                                                     = 0x7f3801ac0258
strcoll("Templates", "Downloads")                                      = 3
memcpy(0x5594e4a96a28, "\330 \251\344\224U\0\0", 8)                    = 0x5594e4a96a28
__errno_location()                                                     = 0x7f3801ac0258
strcoll("Music", "c")                                                  = 1
memcpy(0x5594e4a96a38, "H\037\251\344\224U\0\0", 8)                    = 0x5594e4a96a38
__errno_location()                                                     = 0x7f3801ac0258
strcoll("c", "Documents")                                              = -9
__errno_location()                                                     = 0x7f3801ac0258
strcoll("Music", "Documents")                                          = 1
__errno_location()                                                     = 0x7f3801ac0258
strcoll("Music", "Downloads")                                          = 1
__errno_location()                                                     = 0x7f3801ac0258
strcoll("Music", "Templates")                                          = -2
__errno_location()                                                     = 0x7f3801ac0258
strcoll("Pictures", "Videos")                                          = -2
__errno_location()                                                     = 0x7f3801ac0258
strcoll("Public", "Pictures")                                          = 2
__errno_location()                                                     = 0x7f3801ac0258
strcoll("Public", "Videos")                                            = -2
__errno_location()                                                     = 0x7f3801ac0258
strcoll("Desktop", "examples.desktop")                                 = -12
__errno_location()                                                     = 0x7f3801ac0258
strcoll("Desktop", "Pictures")                                         = -2
__errno_location()                                                     = 0x7f3801ac0258
strcoll("examples.desktop", "Pictures")                                = -2
memcpy(0x5594e4a96a40, "\270\035\251\344\224U\0\0\360\034\251\344\224U\0\0\200\036\251\344\224U\0\0", 24) = 0x5594e4a96a40
__errno_location()                                                     = 0x7f3801ac0258
strcoll("Desktop", "c")                                                = 9
__errno_location()                                                     = 0x7f3801ac0258
strcoll("Desktop", "Documents")                                        = -2
__errno_location()                                                     = 0x7f3801ac0258
strcoll("examples.desktop", "Documents")                               = 12
__errno_location()                                                     = 0x7f3801ac0258
strcoll("examples.desktop", "Downloads")                               = 12
__errno_location()                                                     = 0x7f3801ac0258
strcoll("examples.desktop", "Music")                                   = -1
__errno_location()                                                     = 0x7f3801ac0258
strcoll("Pictures", "Music")                                           = 1
__errno_location()                                                     = 0x7f3801ac0258
strcoll("Pictures", "Templates")                                       = -1
__errno_location()                                                     = 0x7f3801ac0258
strcoll("Public", "Templates")                                         = -1
__errno_location()                                                     = 0x7f3801ac0258
strcoll("Videos", "Templates")                                         = 1
memcpy(0x5594e4a96a28, "\200\036\251\344\224U\0\0", 8)                 = 0x5594e4a96a28
realloc(0, 480)                                                        = 0x5594e4a96ae0
strlen("c")                                                            = 1
__ctype_get_mb_cur_max()                                               = 6
__ctype_get_mb_cur_max()                                               = 6
strlen("Desktop")                                                      = 7
__ctype_get_mb_cur_max()                                               = 6
__ctype_get_mb_cur_max()                                               = 6
strlen("Documents")                                                    = 9
__ctype_get_mb_cur_max()                                               = 6
__ctype_get_mb_cur_max()                                               = 6
strlen("Downloads")                                                    = 9
__ctype_get_mb_cur_max()                                               = 6
__ctype_get_mb_cur_max()                                               = 6
strlen("examples.desktop")                                             = 16
__ctype_get_mb_cur_max()                                               = 6
__ctype_get_mb_cur_max()                                               = 6
strlen("Music")                                                        = 5
__ctype_get_mb_cur_max()                                               = 6
__ctype_get_mb_cur_max()                                               = 6
strlen("Pictures")                                                     = 8
__ctype_get_mb_cur_max()                                               = 6
__ctype_get_mb_cur_max()                                               = 6
strlen("Public")                                                       = 6
__ctype_get_mb_cur_max()                                               = 6
__ctype_get_mb_cur_max()                                               = 6
strlen("Templates")                                                    = 9
__ctype_get_mb_cur_max()                                               = 6
__ctype_get_mb_cur_max()                                               = 6
strlen("Videos")                                                       = 6
__ctype_get_mb_cur_max()                                               = 6
__ctype_get_mb_cur_max()                                               = 6
strlen("c")                                                            = 1
__ctype_get_mb_cur_max()                                               = 6
__ctype_get_mb_cur_max()                                               = 6
strlen("c")                                                            = 1
fwrite_unlocked("c", 1, 1, 0x7f3801f3f760)                             = 1
__overflow(0x7f3801f3f760, 32, 2, 8)                                   = 32
__overflow(0x7f3801f3f760, 32, 3, 8)                                   = 32
strlen("Desktop")                                                      = 7
__ctype_get_mb_cur_max()                                               = 6
__ctype_get_mb_cur_max()                                               = 6
strlen("Desktop")                                                      = 7
fwrite_unlocked("Desktop", 1, 7, 0x7f3801f3f760)                       = 7
__overflow(0x7f3801f3f760, 32, 3, 8)                                   = 32
__overflow(0x7f3801f3f760, 32, 4, 8)                                   = 32
strlen("Documents")                                                    = 9
__ctype_get_mb_cur_max()                                               = 6
__ctype_get_mb_cur_max()                                               = 6
strlen("Documents")                                                    = 9
fwrite_unlocked("Documents", 1, 9, 0x7f3801f3f760)                     = 9
__overflow(0x7f3801f3f760, 32, 6, 8)                                   = 32
__overflow(0x7f3801f3f760, 32, 7, 8)                                   = 32
strlen("Downloads")                                                    = 9
__ctype_get_mb_cur_max()                                               = 6
__ctype_get_mb_cur_max()                                               = 6
strlen("Downloads")                                                    = 9
fwrite_unlocked("Downloads", 1, 9, 0x7f3801f3f760)                     = 9
__overflow(0x7f3801f3f760, 32, 1, 8)                                   = 32
__overflow(0x7f3801f3f760, 32, 2, 8)                                   = 32
strlen("examples.desktop")                                             = 16
__ctype_get_mb_cur_max()                                               = 6
__ctype_get_mb_cur_max()                                               = 6
strlen("examples.desktop")                                             = 16
fwrite_unlocked("examples.desktop", 1, 16, 0x7f3801f3f760)             = 16
__overflow(0x7f3801f3f760, 32, 3, 8)                                   = 32
__overflow(0x7f3801f3f760, 32, 4, 8)                                   = 32
strlen("Music")                                                        = 5
__ctype_get_mb_cur_max()                                               = 6
__ctype_get_mb_cur_max()                                               = 6
strlen("Music")                                                        = 5
fwrite_unlocked("Music", 1, 5, 0x7f3801f3f760)                         = 5
__overflow(0x7f3801f3f760, 32, 2, 8)                                   = 32
__overflow(0x7f3801f3f760, 32, 3, 8)                                   = 32
strlen("Pictures")                                                     = 8
__ctype_get_mb_cur_max()                                               = 6
__ctype_get_mb_cur_max()                                               = 6
strlen("Pictures")                                                     = 8
fwrite_unlocked("Pictures", 1, 8, 0x7f3801f3f760)                      = 8
__overflow(0x7f3801f3f760, 32, 4, 8)                                   = 32
__overflow(0x7f3801f3f760, 32, 5, 8)                                   = 32
strlen("Public")                                                       = 6
__ctype_get_mb_cur_max()                                               = 6
__ctype_get_mb_cur_max()                                               = 6
strlen("Public")                                                       = 6
fwrite_unlocked("Public", 1, 6, 0x7f3801f3f760)                        = 6
__overflow(0x7f3801f3f760, 32, 4, 8)                                   = 32
__overflow(0x7f3801f3f760, 32, 5, 8)                                   = 32
strlen("Templates")                                                    = 9
__ctype_get_mb_cur_max()                                               = 6
__ctype_get_mb_cur_max()                                               = 6
strlen("Templates")                                                    = 9
fwrite_unlocked("Templates", 1, 9, 0x7f3801f3f760)                     = 9
__overflow(0x7f3801f3f760, 9, 7, 8)                                    = 9
strlen("Videos")                                                       = 6
__ctype_get_mb_cur_max()                                               = 6
__ctype_get_mb_cur_max()                                               = 6
strlen("Videos")                                                       = 6
fwrite_unlocked("Videos", 1, 6, 0x7f3801f3f760)                        = 6
__overflow(0x7f3801f3f760, 10, 0x1d15f2f23c04cf00, 0x736f6564c  Desktop  Documents  Downloads  examples.desktop  Music  Pictures  Public  Templates Videos
)         = 10
__fpending(0x7f3801f3f760, 0, 0x5594e2fd9ca0, 1)                       = 0
fileno(0x7f3801f3f760)                                                 = 1
__freading(0x7f3801f3f760, 0, 0x5594e2fd9ca0, 1)                       = 0
__freading(0x7f3801f3f760, 0, 2052, 1)                                 = 0
fflush(0x7f3801f3f760)                                                 = 0
fclose(0x7f3801f3f760)                                                 = 0
__fpending(0x7f3801f3f680, 0, 0x7f3801f3f960, 3072)                    = 0
fileno(0x7f3801f3f680)                                                 = 2
__freading(0x7f3801f3f680, 0, 0x7f3801f3f960, 3072)                    = 0
__freading(0x7f3801f3f680, 0, 4, 3072)                                 = 0
fflush(0x7f3801f3f680)                                                 = 0
fclose(0x7f3801f3f680)                                                 = 0
+++ exited (status 0) +++
weiqifa0@weiqifa-System-Product-Name:~$

#hexdump

从名字可以看出这个是用来查看文件的十六进制的。

weiqifa0@weiqifa-System-Product-Name:~$ hexdump /bin/ls  |head
0000000 457f 464c 0102 0001 0000 0000 0000 0000
0000010 0003 003e 0001 0000 5850 0000 0000 0000
0000020 0040 0000 0000 0000 03a0 0002 0000 0000
0000030 0000 0000 0040 0038 0009 0040 001c 001b
0000040 0006 0000 0005 0000 0040 0000 0000 0000
0000050 0040 0000 0000 0000 0040 0000 0000 0000
0000060 01f8 0000 0000 0000 01f8 0000 0000 0000
0000070 0008 0000 0000 0000 0003 0000 0004 0000
0000080 0238 0000 0000 0000 0238 0000 0000 0000
0000090 0238 0000 0000 0000 001c 0000 0000 0000
weiqifa0@weiqifa-System-Product-Name:~$

#strings

这个之前在文件dts解析里面有说过,是一个非常不错的命令,用来查看Bin里面有什么字符串。

#readelf

一般用于查看ELF格式的文件信息,常见的文件如在Linux上的可执行文件,动态库(* .so)或者静态库(* .a) 等包含ELF格式的文件。以下命令的使用是基于android编译出来的so文件上面去运行。

#objdump

这个命令主要用来反汇编格式。

weiqifa0@weiqifa-System-Product-Name:~/c$ cat 1.c
#include "stdio.h"int main(void)
{printf("hello,world\n");return (0);
}
weiqifa0@weiqifa-System-Product-Name:~/c$ gcc 1.c -o 1.o
weiqifa0@weiqifa-System-Product-Name:~/c$ objdump -h 1.o1.o:     file format elf64-x86-64Sections:
Idx Name          Size      VMA               LMA               File off  Algn0 .interp       0000001c  00000000000002a8  00000000000002a8  000002a8  2**0CONTENTS, ALLOC, LOAD, READONLY, DATA1 .note.gnu.build-id 00000024  00000000000002c4  00000000000002c4  000002c4  2**2CONTENTS, ALLOC, LOAD, READONLY, DATA2 .note.ABI-tag 00000020  00000000000002e8  00000000000002e8  000002e8  2**2CONTENTS, ALLOC, LOAD, READONLY, DATA3 .gnu.hash     00000024  0000000000000308  0000000000000308  00000308  2**3CONTENTS, ALLOC, LOAD, READONLY, DATA4 .dynsym       000000a8  0000000000000330  0000000000000330  00000330  2**3CONTENTS, ALLOC, LOAD, READONLY, DATA5 .dynstr       00000082  00000000000003d8  00000000000003d8  000003d8  2**0CONTENTS, ALLOC, LOAD, READONLY, DATA6 .gnu.version  0000000e  000000000000045a  000000000000045a  0000045a  2**1CONTENTS, ALLOC, LOAD, READONLY, DATA7 .gnu.version_r 00000020  0000000000000468  0000000000000468  00000468  2**3CONTENTS, ALLOC, LOAD, READONLY, DATA8 .rela.dyn     000000c0  0000000000000488  0000000000000488  00000488  2**3CONTENTS, ALLOC, LOAD, READONLY, DATA9 .rela.plt     00000018  0000000000000548  0000000000000548  00000548  2**3CONTENTS, ALLOC, LOAD, READONLY, DATA10 .init         00000017  0000000000001000  0000000000001000  00001000  2**2CONTENTS, ALLOC, LOAD, READONLY, CODE11 .plt          00000020  0000000000001020  0000000000001020  00001020  2**4CONTENTS, ALLOC, LOAD, READONLY, CODE12 .plt.got      00000008  0000000000001040  0000000000001040  00001040  2**3CONTENTS, ALLOC, LOAD, READONLY, CODE13 .text         00000161  0000000000001050  0000000000001050  00001050  2**4CONTENTS, ALLOC, LOAD, READONLY, CODE14 .fini         00000009  00000000000011b4  00000000000011b4  000011b4  2**2CONTENTS, ALLOC, LOAD, READONLY, CODE15 .rodata       00000010  0000000000002000  0000000000002000  00002000  2**2CONTENTS, ALLOC, LOAD, READONLY, DATA16 .eh_frame_hdr 0000003c  0000000000002010  0000000000002010  00002010  2**2CONTENTS, ALLOC, LOAD, READONLY, DATA17 .eh_frame     00000108  0000000000002050  0000000000002050  00002050  2**3CONTENTS, ALLOC, LOAD, READONLY, DATA18 .init_array   00000008  0000000000003db8  0000000000003db8  00002db8  2**3CONTENTS, ALLOC, LOAD, DATA19 .fini_array   00000008  0000000000003dc0  0000000000003dc0  00002dc0  2**3CONTENTS, ALLOC, LOAD, DATA20 .dynamic      000001f0  0000000000003dc8  0000000000003dc8  00002dc8  2**3CONTENTS, ALLOC, LOAD, DATA21 .got          00000048  0000000000003fb8  0000000000003fb8  00002fb8  2**3CONTENTS, ALLOC, LOAD, DATA22 .data         00000010  0000000000004000  0000000000004000  00003000  2**3CONTENTS, ALLOC, LOAD, DATA23 .bss          00000008  0000000000004010  0000000000004010  00003010  2**0ALLOC24 .comment      00000023  0000000000000000  0000000000000000  00003010  2**0CONTENTS, READONLY
weiqifa0@weiqifa-System-Product-Name:~/c$

#strace

strace是一个非常简单的工具,它可以跟踪系统调用的执行。最简单的方式,它可以从头到尾跟踪binary的执行,然后以一行文本输出系统调用的名字,参数和返回值。

详细链接:

https://blog.csdn.net/uisoul/article/details/83143290

weiqifa0@weiqifa-System-Product-Name:~/c$ strace /bin/ls
execve("/bin/ls", ["/bin/ls"], 0x7ffdb4868620 /* 23 vars */) = 0
brk(NULL)                               = 0x55ebe6544000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=109714, ...}) = 0
mmap(NULL, 109714, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fc672283000
close(3)                                = 0
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libselinux.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 h\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=158928, ...}) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fc672281000
mmap(NULL, 170192, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fc672257000
mprotect(0x7fc67225d000, 131072, PROT_NONE) = 0
mmap(0x7fc67225d000, 98304, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x6000) = 0x7fc67225d000
mmap(0x7fc672275000, 28672, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1e000) = 0x7fc672275000
mmap(0x7fc67227d000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x25000) = 0x7fc67227d000
mmap(0x7fc67227f000, 6352, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fc67227f000
close(3)                                = 0
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\200l\2\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=2000480, ...}) = 0
mmap(NULL, 2008696, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fc67206c000
mmap(0x7fc672091000, 1519616, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x25000) = 0x7fc672091000
mmap(0x7fc672204000, 299008, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x198000) = 0x7fc672204000
mmap(0x7fc67224d000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1e0000) = 0x7fc67224d000
mmap(0x7fc672253000, 13944, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fc672253000
close(3)                                = 0
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libpcre.so.3", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \25\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=464824, ...}) = 0
mmap(NULL, 2560264, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fc671dfa000
mprotect(0x7fc671e6a000, 2097152, PROT_NONE) = 0
mmap(0x7fc67206a000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x70000) = 0x7fc67206a000
close(3)                                = 0
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0000\21\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=18656, ...}) = 0
mmap(NULL, 20752, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fc671df4000
mmap(0x7fc671df5000, 8192, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1000) = 0x7fc671df5000
mmap(0x7fc671df7000, 4096, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x3000) = 0x7fc671df7000
mmap(0x7fc671df8000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x3000) = 0x7fc671df8000
close(3)                                = 0
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\200|\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=149840, ...}) = 0
mmap(NULL, 132288, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fc671dd3000
mmap(0x7fc671dda000, 61440, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x7000) = 0x7fc671dda000
mmap(0x7fc671de9000, 20480, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x16000) = 0x7fc671de9000
mmap(0x7fc671dee000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1a000) = 0x7fc671dee000
mmap(0x7fc671df0000, 13504, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fc671df0000
close(3)                                = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fc671dd1000
arch_prctl(ARCH_SET_FS, 0x7fc671dd23c0) = 0
mprotect(0x7fc67224d000, 12288, PROT_READ) = 0
mprotect(0x7fc671dee000, 4096, PROT_READ) = 0
mprotect(0x7fc671df8000, 4096, PROT_READ) = 0
mprotect(0x7fc67206a000, 4096, PROT_READ) = 0
mprotect(0x7fc67227d000, 4096, PROT_READ) = 0
mprotect(0x55ebe4612000, 8192, PROT_READ) = 0
mprotect(0x7fc6722c8000, 4096, PROT_READ) = 0
munmap(0x7fc672283000, 109714)          = 0
set_tid_address(0x7fc671dd2690)         = 15038
set_robust_list(0x7fc671dd26a0, 24)     = 0
rt_sigaction(SIGRTMIN, {sa_handler=0x7fc671dda6c0, sa_mask=[], sa_flags=SA_RESTORER|SA_SIGINFO, sa_restorer=0x7fc671de6f40}, NULL, 8) = 0
rt_sigaction(SIGRT_1, {sa_handler=0x7fc671dda760, sa_mask=[], sa_flags=SA_RESTORER|SA_RESTART|SA_SIGINFO, sa_restorer=0x7fc671de6f40}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0
prlimit64(0, RLIMIT_STACK, NULL, {rlim_cur=8192*1024, rlim_max=RLIM64_INFINITY}) = 0
statfs("/sys/fs/selinux", 0x7ffdfa4ebb30) = -1 ENOENT (No such file or directory)
statfs("/selinux", 0x7ffdfa4ebb30)      = -1 ENOENT (No such file or directory)
brk(NULL)                               = 0x55ebe6544000
brk(0x55ebe6565000)                     = 0x55ebe6565000
openat(AT_FDCWD, "/proc/filesystems", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
read(3, "nodev\tsysfs\nnodev\trootfs\nnodev\tr"..., 1024) = 423
read(3, "", 1024)                       = 0
close(3)                                = 0
access("/etc/selinux/config", F_OK)     = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=8841488, ...}) = 0
mmap(NULL, 8841488, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fc671562000
close(3)                                = 0
ioctl(1, TCGETS, {B38400 opost isig icanon echo ...}) = 0
ioctl(1, TIOCGWINSZ, {ws_row=27, ws_col=116, ws_xpixel=0, ws_ypixel=0}) = 0
openat(AT_FDCWD, ".", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 3
fstat(3, {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
getdents64(3, /* 4 entries */, 32768)   = 96
getdents64(3, /* 0 entries */, 32768)   = 0
close(3)                                = 0
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
write(1, "1.c  1.o\n", 91.c  1.o
)               = 9
close(1)                                = 0
close(2)                                = 0
exit_group(0)                           = ?
+++ exited with 0 +++
weiqifa0@weiqifa-System-Product-Name:~/c$

#nm

这个命令可以看到链接库的地址,实际使用的时候会发现非常爽。

weiqifa0@weiqifa-System-Product-Name:~/c$ cat 1.c
#include "stdio.h"int main(void)
{printf("hello,world\n");return (0);
}
weiqifa0@weiqifa-System-Product-Name:~/c$ gcc 1.c  -o 1.o
weiqifa0@weiqifa-System-Product-Name:~/c$ nm 1.o
0000000000004010 B __bss_start
0000000000004010 b completed.7963w __cxa_finalize@@GLIBC_2.2.5
0000000000004000 D __data_start
0000000000004000 W data_start
0000000000001080 t deregister_tm_clones
00000000000010f0 t __do_global_dtors_aux
0000000000003dc0 t __do_global_dtors_aux_fini_array_entry
0000000000004008 D __dso_handle
0000000000003dc8 d _DYNAMIC
0000000000004010 D _edata
0000000000004018 B _end
00000000000011b4 T _fini
0000000000001130 t frame_dummy
0000000000003db8 t __frame_dummy_init_array_entry
0000000000002154 r __FRAME_END__
0000000000003fb8 d _GLOBAL_OFFSET_TABLE_w __gmon_start__
0000000000002010 r __GNU_EH_FRAME_HDR
0000000000001000 t _init
0000000000003dc0 t __init_array_end
0000000000003db8 t __init_array_start
0000000000002000 R _IO_stdin_usedw _ITM_deregisterTMCloneTablew _ITM_registerTMCloneTable
00000000000011b0 T __libc_csu_fini
0000000000001150 T __libc_csu_initU __libc_start_main@@GLIBC_2.2.5
0000000000001135 T mainU puts@@GLIBC_2.2.5
00000000000010b0 t register_tm_clones
0000000000001050 T _start
0000000000004010 D __TMC_END__
weiqifa0@weiqifa-System-Product-Name:~/c$

#gdb

gdb我觉得大家应该不会陌生了吧,可以说是Linux下的调试神器了。

weiqifa0@weiqifa-System-Product-Name:~/c$ gcc -c -g 1.c
weiqifa0@weiqifa-System-Product-Name:~/c$ ls
1.c  1.o  -g
weiqifa0@weiqifa-System-Product-Name:~/c$ gcc 1.o -o 1
weiqifa0@weiqifa-System-Product-Name:~/c$ gdb 1
GNU gdb (Ubuntu 8.1-0ubuntu3.2) 8.1.0.20180409-git
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from 1...done.
(gdb) list
1       #include "stdio.h"
2
3       int main(void)
4       {
5           printf("hello,world\n");
6           return (0);
7       }
(gdb) b main
Breakpoint 1 at 0x1139: file 1.c, line 5.
(gdb) run
Starting program: /home/weiqifa0/c/1Breakpoint 1, main () at 1.c:5
5           printf("hello,world\n");
(gdb)

使用详情:

https://www.cnblogs.com/arnoldlu/p/9633254.html


投稿或交流学习,备注:昵称-学校(公司)-方向,进入DL&NLP交流群。

方向有很多:机器学习、深度学习,python,情感分析、意见挖掘、句法分析、机器翻译、人机对话、知识图谱、语音识别等。

记得备注呦

【Linux】10个帮助你调试的命令相关推荐

  1. linux常用调试,linux下gdb常用的调试命令

    用gdb调试程序时,常常很困惑一些命令的使用,要么是不知道这个命令,要么忘了命令的使用方法.接下来是小编为大家收集的linux下gdb常用的调试命令,希望能帮到大家. linux下gdb常用的调试命令 ...

  2. Linux后台开发系列之「08.15 个 gdb 调试基础命令」

    代码键盘 版权声明:本文为 cdeveloper 原创文章,可以随意转载,但必须在明确位置注明出处! gdb 简介 gdb 是 UNIX 及 UNIX-like 下的调试工具,在 Linux 下一般都 ...

  3. linux下获取占用CPU资源最多的10个进程,可以使用如下命令组合: ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head linux下

    linux下获取占用CPU资源最多的10个进程,可以使用如下命令组合: ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head linux下获取占用 ...

  4. linux 随机10字符病毒,Linux 10字符串命令病毒的处理记录

    刚上线的测试服务器不停的向外发包,且CPU持续100%,远程登录后查看发现有一长度为10的随机字符串进程,kill掉,会重新生成另外长度为10的字符串进程.删除文件也会重复生成,非常痛苦.查阅cron ...

  5. Linux gdb多进程、多线程调试

    目录 常用命令 堆栈相关命令 更为详细的断点调试 gdb多进程调试 gdb多线程调试 前言 gdb 是 linux 平台下进行程序调试的最常用的工具.简单的程序调试就是加断点,然后一步一步让程序运行, ...

  6. Linux查看文件和日志的常用命令

    Linux查看文件和日志的常用命令 当项目部署和运行起来后,会产生很多的运行日志.日志的内容是程序里定义的重要输出信息,还有程序出错的报错信息. 查看日志文件大部分是去日志中获取一些数据,确认某些信息 ...

  7. [转载]对 Linux 专家非常有用的 20 个命令

    原文出处: Tecmit   译文出处: oschina.欢迎加入技术翻译小组. 在第一部分文章中我们讨论了那些都只是切换到 Linux 和linux新手所需的必要知识的用户的命令. 对 Linux ...

  8. L1D1:嵌入式Linux C语言开发工具及基础命令

    嵌入式Linux C语言开发工具及基础命令 一.ubuntu环境搭建 请自行准备VMware workstation15安装包 及 ubuntu18.04.iso镜像文件.可参考链接:VMware W ...

  9. 调试多线程 查死锁的bug gcore命令 gdb对多线程的调试 gcore pstack 调试常用命令...

    gdb thread apply all bt 如果你发现有那么几个栈停在 pthread_wait 或者类似调用上,大致就可以得出结论:就是它们几个儿女情长,耽误了整个进程. 注意gdb的版本要高于 ...

  10. SUSE LINUX 10.0 软硬件的安装和设置

    SUSE LINUX 10.0 软硬件的安装和设置 (1) 1.YaST安装: -下载软件包安装: 就是先下载适合自己系统架构的rpm包,然后用YaST安装. 优点:易控制,安装过程简单. 缺点:由于 ...

最新文章

  1. Android OpenCV 边缘检测 Canny 的使用
  2. QT的QLatin1String类的使用
  3. c++ pat 乙级 --1001 害死人不偿命的(3n+1)猜想
  4. mysql 列 随机数_mysql mmp 某字段插入随机数!(说不定那天就忘记了,存下来再说)...
  5. 【Proxy SwitchyOmega】Chrome安装插件【提示程序包无效:“CRX_HEADER_INVALID“】【解决方法】
  6. kali linux工具pyrit,在Kali Linux上安装cuda、pyritcuda以及optimus -电脑资料
  7. cnn神经网络可以用于数据拟合吗_使用Keras搭建卷积神经网络进行手写识别的入门(包含代码解读)...
  8. smarty变量调节器
  9. python入门-廖雪峰 Python教程
  10. VB 使用SendMessage枚举文件与目录
  11. gdb coredump oracle,GDB + CoreDump 调试记录
  12. IOS学习笔记6—Objective C—Foundation框架
  13. SVN MKACTIVITY
  14. javaweb的热部署
  15. MATLAB 2016a 安装包以及安装破解教程
  16. 用BT搜宝快速找种子
  17. Matlab之数据归一化函数——mapminmax()
  18. 统计学中相关数学符号、希腊字母的标准读法
  19. 16 Three.js 游戏操作案例
  20. Linux操作手机端

热门文章

  1. 《设计模式之禅》--设计模式大PK
  2. Javascript中try finally的细微差别
  3. FuisonInsight Hadoop中新增用户和Hbase授权
  4. 精通CSS:高级Web标准解决方案(中文电子书下载)
  5. Node.js 应该用在什么地方
  6. Django学习笔记7
  7. 解数独(Python)
  8. Xcode7.1模拟器卡顿问题以及解决方案
  9. 在虚拟机中配置FastDFS+Nginx模块
  10. winform 可拖动的自定义Label控件