目录
文件分析工具大全
https://www.163.com/dy/article/FBVCGUNI0511CPOJ.html
-
file
确定文件类型 -
hexdump
以 ASCII、十进制、十六进制或八进制显示文件内容。 -
ldd
查看依赖库 -
strings
打印文件中的可打印字符的字符串。
在开发软件的时候,各种文本/ASCII 信息会被添加到其中,比如打印信息、调试信息、帮助信息、错误等。只要这些信息都存在于二进制文件中,就可以用 命令将其转储到屏幕上。 -
readelf (android ndk)
读取efl规范信息
查看依赖库:
readelf -d your_binary_file | grep NEEDED
- objdump
查看堆栈信息
1.nm
https://zhuanlan.zhihu.com/p/363014233
列出对象中的符号
如果你所使用的二进制文件没有被剥离, 命令将为你提供在编译过程中嵌入到二进制文件中的有价值的信息。 可以帮助你从二进制文件中识别变量和函数。你可以想象一下,如果你无法访问二进制文件的源代码时,这将是多么有用。
2.gdb
第1步:进入gdb
gdb your_program
第2步:run your_program
输入run
第3步:打印所有线程的堆栈信息(会显示行号)
输入bt或thread apply all bt
这一步,如何程序异常崩溃会中断定位到报错行,继续输入c则继续运行。
3.addr2line
将地址转换为文件名和行号。给定可执行文件中的地址或可重定位对象部分中的偏移量,它会使用调试信息来确定与之相关的文件名和行数。
https://blog.csdn.net/qq_43416206/article/details/131405806
https://blog.csdn.net/u013357557/article/details/127784910
https://linuxcommand.p2hp.com/addr2line
https://www.jianshu.com/p/c2e2b8f8ea0d
https://blog.csdn.net/ZHI11235813/article/details/128588157
-
使用示例
addr2line -e 执行程序 异常堆栈地址 例如: addr2line -e aarch_backtrace_demo 0x400f48 /home/share/mypro/myDemo/Backtrace/main.cpp:119 (函数报错文件名, 行号)
-
导出程序的映射文件
gcc 的 -Map 参数用于生成一个映射文件(map file),该文件包含了程序中各个函数的信息,以及内存的分配信息等。映射文件可以帮助开发者理解链接后的程序内存布局,以及调试信息的处理。使用 -Map=filename.map 可以指定生成映射文件的名称。如果不指定文件名,默认映射文件名为 output.map,其中 output 是编译器生成的可执行文件或目标文件名。
例如,编译一个名为 example.c 的C程序并生成映射文件:
gcc -o example example.c -Map=example.map
这将生成一个名为 example.map 的映射文件。
映射文件中包含的内容会根据编译选项的不同而有所差异,但通常会包括以下信息:
符号定义和引用
数据段和代码段的内存分配
编译单元之间的依赖关系
源代码的行号信息(如果使用了调试信息 -g)
映射文件对于程序的优化、调试和问题排查都非常有帮助。
我的情况:
使用-Map生成的地址,利用addr2line能正常显示代码行号,但是利用backtrace与backtrace_symbols生成的地址显示??
https://blog.csdn.net/jinking01/article/details/126564672
最终发现要使用[bt] #1 /home/xinyi/code/cplus/cpp-all-demo/cmake-build-debug/stack2(+0x14a6) [0x56112f6294a6]
圆括号里的地址,而非中括号里的地址。
查看程序堆栈信息函数
backtrace与backtrace_symbols
https://zhuanlan.zhihu.com/p/402457116?utm_id=0
https://blog.csdn.net/joshua0137/article/details/123658865
0 条评论