编译、链接、调试、gdb
文章平均质量分 92
调试与gdb
执假以为真
Learning, Coding, Writing
展开
-
ELF文件介绍
ELF文件,大名叫Executable and Linkable Format。作为一种文件,那么肯定就需要遵守一定的格式。从宏观上看,可以分成四个部分:图中的这几个概念,如果不明白的话也没关系,下面我会逐个说明的。在 Linux 系统中,一个 ELF 文件主要用来表示3 种类型的文件:1. 可执行文件2. 目标文件3. 共享文件既然可以用来表示 3 种类型的文件,那么在文件中,肯定有一个地方用来区分这 3 种情况。在我的头部内容中,就存在一个字段,用来表示...转载 2022-03-31 21:48:23 · 13569 阅读 · 9 评论 -
自定义gdb命令打印STL容器与数据成员的
前面2篇博客分别介绍了gdb脚本的语法及应用以及使用Python API自定义gdb命令,而在gdb中打印STL容器的一些信息,仍不是非常方便,最好也能自定义一些命令进行处理。有高人推荐了GitHub上的一篇博客,里面记述了这样的命令,范围涵盖还是比较广泛。仔细看代码的注释,似乎是美国名校的几位PhD早年间的作品。粘贴如下:#原创 2020-05-10 19:26:15 · 871 阅读 · 0 评论 -
用户自定义gdb命令的Python实现
使用gdb调试的时候,人们往往会希望有一些命令能实现自己特殊的需求,但实际上gdb本身并没有提供这样的命令。对这些用户需求,其实常可以使用gdb的Python API(或其他语言的API)来实现。首先,Python API的总帮助页在这里:GDB Python API其中常用的有关于Breakpoint和Command相关的API:Break Point APICommand API...原创 2020-05-06 00:38:18 · 2322 阅读 · 2 评论 -
用gdb脚本进行自动化调试
本文首先介绍用于自动化调试的gdb脚本的基本语法和基本用法,然后给出程序实例和调试实例。在使用gdb调试程序的时候,如果想让调试自动化,该怎么办呢?比如,想关闭 confirm,关闭 pagination,打开 print pretty, 设置 system root 为当前目录,等等。如果是每次运行gdb都希望自动实现这些简单的设置,那么可以写在 ~/.gdbinit 文件中。如下:#~...原创 2020-05-03 23:30:37 · 9245 阅读 · 2 评论 -
Linux下动态链接库的2种链接方式
Linux下动态链接库的2种链接方式方式一通过 dlopen, dlsym, dlerror, dlclose 在代码中直接打开与使用动态链接库dlopen 用于打开动态链接库,返回句柄dlsym 使用dlopen返回的句柄与函数名来获得函数位置,返回函数指针dlclose 关闭动态链接库看以下示例程序// fibo.cpp#include <iostream>...原创 2020-02-22 23:01:17 · 1782 阅读 · 0 评论 -
gcc 的 __attribute__ 关键字简介
gcc 的 attribute 关键字简介参考文档见:https://gcc.gnu.org/onlinedocs/gcc-4.0.0/gcc/Variable-Attributes.html#Variable-Attributeshttps://gcc.gnu.org/onlinedocs/gcc-4.0.0/gcc/Type-Attributes.html#Type-Attribute...原创 2020-02-01 10:14:46 · 1568 阅读 · 0 评论 -
使用strip, eu-strip, objcopy等剥离与导回符号表及调试信息
1.符号表信息和调试信息符号表信息(symbols)和调试信息(debug info)是由不同段区分的。使用 readelf -S binfile 可以查看ELF文件的所有段。调试信息相关的段:# readelf -S a.out | grep debug [27] .debug_aranges PROGBITS 0000000000000000 000016d...原创 2020-01-29 16:11:41 · 12248 阅读 · 0 评论 -
几款常用的二进制文件分析及问题定位的工具
几款常用的二进制文件分析及问题定位的工具具体使用,还要仔细看其文档。fuserfuser displays the PIDs of processes using the specified files or file systems. In the default display mode, each file name is followed by a letter denotin...原创 2019-12-01 11:54:36 · 1084 阅读 · 0 评论 -
gdb的non-stop模式
All-Stop模式:调试多线程程序时,如果某个线程断在一个断点上,调试器会让整个程序freeze,直到continue这个线程,程序中的其他线程才会继续运行。这个限制使得被调试的程序不能够像真实环境中那样运行–当某个线程断在一个断点上,让其他线程并行运行。Non-Stop模式:当一个或多个线程停在断点上,其他线程仍会继续运行Non-Stop模式的优势:当其他线程停在断点上,有定时器...原创 2019-11-28 23:24:57 · 1630 阅读 · 1 评论 -
gdb的常用用法
gdb笔记gdb的命令非常多,以下是在整理网上的几篇文章并结合自己的实践的基础上,罗列一些常用的用法,包括了多线程和多进程的调试。Linux命令行运行gdb -q 进入gdb,不打印版本信息gdb 直接装载程序,但没有运行gdb &amp;amp;amp;lt;core_file&amp;amp;amp;gt; 该core文件是该program非法执行后dump出的gdb -d ...原创 2019-01-05 18:14:24 · 891 阅读 · 0 评论 -
如何进入dll调试
本来这只是一个小小的技巧,没有必要写入blog. 但是因为这debug的技巧能解决问题,也是因为想让更多的人都知道,至少是在网上搜索的时候更方便地找到,还是写下了这篇blog以作记载。原创 2016-02-27 22:55:36 · 5268 阅读 · 0 评论 -
pragma预处理指令详解
转载自网络的一篇文章,做了一些格式整理和语言优化。pragma的几个参数,用得频繁的可能并不多。这里做一个简单的了解,倒是不错的。转载 2016-01-23 22:17:52 · 542 阅读 · 0 评论