指定的网络名不再可用(指定的网络名不再可用0x0000040)万万没想到
本文列出在Linxu下帮助你调试或定位问题常用的命令,相信你一定会用到。本文旨在抛砖引玉,具体的使用详情可自行查找。# file。
本文列出在Linxu下帮助你调试或定位问题常用的命令,相信你一定会用到本文旨在抛砖引玉,具体的使用详情可自行查找# fileLinux file命令用于查看文件类型# file /bin/ls/bin/ls:。
ELF64-bitLSBexecutable,x86-64,version1(SYSV),dynamicallylinked(usessharedlibs),forGNU/Linux2.6.32,BuildID[sha1]=aaf05615b6c91d3cbb076af81aeff531c5d7dfd9,
stripped# file studystudy:directory# lddldd的作用是打印可执行档依赖的共享库文件针对动态链接的二进制文件运行它会显示其所有依赖的库及其路径 $ ldd /bin/ls linux-vdso.so。
.1 => (0x00007ffd623ef000) libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fd138066000) libcap.so.2
=> /lib64/libcap.so.2 (0x00007fd137e61000) libacl.so.1 => /lib64/libacl.so.1 (0x00007fd137c58000) libc.so
.6 => /lib64/libc.so.6 (0x00007fd13788a000) libpcre.so.1 => /lib64/libpcre.so.1 (0x00007fd137628000) libdl.so
.2 => /lib64/libdl.so.2 (0x00007fd137424000) /lib64/ld-linux-x86-64.so.2 (0x00007fd13828d000) libattr.so
.1 => /lib64/libattr.so.1 (0x00007fd13721f000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fd137003000
) # ltraceltrace能够跟踪进程的库函数调用,它会显现出哪个库函数被调用,可以作为堆栈调用跟踪调试使用 ltrace [option ...] [command [arg ...]] -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 打印版本信息,然后退出。
# ltrace ./exe __libc_start_main(0x40052d, 1, 0x7ffc38054de8, 0x400550 puts("hello"hello ) = 6
+++ exited (status 0) +++# hexdumphexdump是Linux下的一个二进制文件查看工具,它可以将二进制文件转换为ASCII、八进制、十进制、十六进制格式进行查看$hexdump。
/bin/ls|head0000000457f464c01020001000000000000000000000100003003e00010000585000000000000000000200040
00000000000003a00002000000000000030000000000040003800090040001c001b00000400006000000050000004000000000
0000000005000400000000000000040000000000000000006001f800000000000001f80000000000000000070000800000000
0000000300000004000000000800238000000000000023800000000000000000900238000000000000001c000000000000# strings
strings命令 在对象文件或二进制文件中查找可打印的字符串字符串是4个或更多可打印字符的任意序列,以换行符或空字符结束strings命令对识别随机对象文件很有用 语法: strings [ -a ] [ - ] [ -o ] [ -t Format ] [ -n Number ] [ -Number ] [file ... ] 。
-a --all:扫描整个文件而不是只扫描目标文件初始化和装载段-f –print-file-name:在显示字符串前先显示文件名-n –bytes=[number]:找到并且输出所有NUL终止符序列- :设置显示的最少的字符数,默认是4个字符
-t --radix={o,d,x} :输出字符的位置,基于八进制,十进制或者十六进制-o :类似--radix=o-T --target= :指定二进制文件格式-e --encoding={s,S,b,l,B,L} :选择字符大小和排列顺序:s = 7-bit, S = 8-bit, {b,l} = 16-bit, {B,L} = 32-bit
@ :读取中选项 $ strings /bin/ls | head /lib64/ld-linux-x86-64.so.2 libselinux.so.1 __gmon_start__ _init fgetfilecon freecon lgetfilecon _fini libcap.so.2 cap_to_text
# readelf一般用于查看ELF格式的文件信息,常见的文件如在Linux上的可执行文件,动态库(* .so)或者静态库(* .a) 等包含ELF格式的文件 $ readelf -h exe ELF Header: Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 Class: ELF64 Data: 2s complement, little endian Version: 1 (current) OS/ABI: UNIX - System V ABI Version: 0 Type: EXEC (Executable file) Machine: Advanced Micro Devices X86-64 Version: 0x1 Entry point address: 0x400440 。
Startof program headers: 64 (bytesintofile) Startofsection headers: 6432 (bytesintofile) Flags: 0x0Size
of this header: 64 (bytes) Sizeof program headers: 56 (bytes) Numberof program headers: 9Sizeofsection
headers: 64 (bytes) Numberofsection headers: 30Section header stringtableindex: 29# objdumpobjdump命令是Linux下的反汇编目标文件或者可执行文件的命令,它以一种可阅读的格式让你更多地了解二进制文件可能带有的附加信息。
$catexe.c#include intmain(){printf("hello\n");return0;}$objdump-Sexe...000000000040052d:
40052d:55push%rbp40052e:4889e5mov%rsp,%rbp400531:bfe0054000mov$0x4005e0,%edi400536:e8d5feffffcallq400410
40053b:b800000000mov$0x0,%eax400540:5dpop%rbp400541:c3retq400542:662e0f1f840000nopw%cs:0x0(%rax,%rax,1)
400549:00000040054c:0f1f4000nopl0x0(%rax)...# stracestrace常用来跟踪进程执行时的系统调用和所接收的信号在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通 过系统调用访问硬件设备。
strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间$strace./exeexecve("./exe",["./exe"],[/*27vars*/])=0brk(NULL)=
0xe22000mmap(NULL,4096,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS,-1,0)=0x7f0e1780e000access("/etc/ld.so.preload",
R_OK)=-1ENOENT(Nosuchfileordirectory)open("/etc/ld.so.cache",O_RDONLY|O_CLOEXEC)=3fstat(3,{st_mode=S_IFREG|0644,
st_size=83540,...})=0mmap(NULL,83540,PROT_READ,MAP_PRIVATE,3,0)=0x7f0e177f9000close(3)=0open("/lib64/libc.so.6",
O_RDONLY|O_CLOEXEC)=3read(3,"\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\20&\2\0\0\0\0\0"...,832)=
832fstat(3,{st_mode=S_IFREG|0755,st_size=2156160,...})=0mmap(NULL,3985888,PROT_READ|PROT_EXEC,MAP_PRIVATE|MAP_DENYWRITE,
3,0)=0x7f0e17220000mprotect(0x7f0e173e3000,2097152,PROT_NONE)=0mmap(0x7f0e175e3000,24576,PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE,3,0x1c3000)=0x7f0e175e3000mmap(0x7f0e175e9000,16864,PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS,-1,0)=0x7f0e175e9000close(3)=0mmap(NULL,4096,PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_ANONYMOUS,-1,0)=0x7f0e177f8000mmap(NULL,8192,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS,
-1,0)=0x7f0e177f6000arch_prctl(ARCH_SET_FS,0x7f0e177f6740)=0mprotect(0x7f0e175e3000,16384,PROT_READ)=
0mprotect(0x600000,4096,PROT_READ)=0mprotect(0x7f0e1780f000,4096,PROT_READ)=0munmap(0x7f0e177f9000,83540
)=0fstat(1,{st_mode=S_IFCHR|0620,st_rdev=makedev(136,0),...})=0mmap(NULL,4096,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS,
-1,0)=0x7f0e1780d000write(1,"hello\n",6hello)=6exit_group(0)=?+++exitedwith0+++# nmnm是name的缩写,它显示指定文件中的符号信息,文件可以是对象文件、可执行文件或对象文件库。
如果文件中没有包含符号信息,nm报告该情况,但不把他解释为出错nm缺省情况下报告十进制符号表示法下的数字值$nm exe0000000000601034B __bss_start0000000000601034
b completed.63550000000000601030D __data_start0000000000601030W data_start0000000000400470t deregister_tm_clones
00000000004004e0t __do_global_dtors_aux0000000000600e18t __do_global_dtors_aux_fini_array_entry00000000004005d8
R __dso_handle0000000000600e28d _DYNAMIC0000000000601034D _edata0000000000601038B _end00000000004005c4
T _fini0000000000400500t frame_dummy0000000000600e10t __frame_dummy_init_array_entry0000000000400710r __FRAME_END__
0000000000601000d _GLOBAL_OFFSET_TABLE_w__gmon_start__00000000004005e8r __GNU_EH_FRAME_HDR00000000004003e0
T _init0000000000600e18t __init_array_end0000000000600e10t __init_array_start00000000004005d0R _IO_stdin_used
0000000000600e20d __JCR_END__0000000000600e20d __JCR_LIST__00000000004005c0T __libc_csu_fini0000000000400550
T __libc_csu_initU__libc_start_main@@GLIBC_2.2.5000000000040052dT mainUputs@@GLIBC_2.2.500000000004004a0
t register_tm_clones0000000000400440T _start0000000000601038D __TMC_END__...# gdbgdb是GNU开源组织发布的一个强大的Linux下的程序调试工具。
$gcc-g-oexeexe.c$gdbexeGNUgdb(GDB)RedHatEnterpriseLinux7.6.1-115.el7Copyright(C)2013FreeSoftwareFoundation,
Inc.LicenseGPLv3+:GNUGPLversion3orlaterThis is free software:youare
freetochangeandredistributeit.ThereisNOWARRANTY,totheextentpermittedbylaw.Type"show copying"and"show warranty"
fordetails.ThisGDBwasconfiguredas"x86_64-redhat-linux-gnu".Forbugreportinginstructions,please see:...
Readingsymbolsfrom/home/study/exe...done.(gdb)list1#include 2intmain()3{45printf("hello\n");
6return0;78}(gdb)b5Breakpoint 1 at 0x400531:fileexe.c,line5.(gdb)rStarting program:/home/study/exeBreakpoint
1,main()atexe.c:55printf("hello\n");(gdb)nhello6return0;(gdb)
- 标签:
- 编辑:李松一
- 相关文章
-
显卡性能排行(游戏本显卡性能排行)不要告诉别人
Steam 发布了 2 月份的硬件排行榜,总体来看,超过 75%的 Steam 用户使用 N 卡,接近 15% 的用户使用 A 卡,英特尔显卡占…
-
荣耀10x(荣耀10x充电器多少w)燃爆了
双十一快要到了,手机厂商繁多的型号如何分辨?关注Daniel谈技术,一系列专题带你科普手机技术知识,挑选合适的手机。选手机系列第一期是…
- 苹果12pro参数配置详细(苹果11pro参数配置详细)全程干货
- ipad 5(ipad5代)太疯狂了
- 散文评论文章的经典话语怎么写好一点散文的特质是什么现代作家散文名篇
- 毕业论文评语大全散文评论范文大全张爱玲短文精选
- 散文下载关于责任的散文名篇何士光散文评论