240 发简信
IP属地:北京
  • C++ 静态变量析构顺序的分析与控制

    1. 了解变量析构顺序的必要性   大多数时间里,我们更关注的是变量的初始化顺序,因为我们需要确保使用到的变量都是初始化好的变量。然而,当项目变大、变复杂的时候,我们可能就会...

  • core文件没有开,或者磁盘满了core文件没有写下来的时候还是很有用的

    addr2line

    addr2line工具是一个可以将指令的地址和可执行映像转换为文件名、函数名和源代码行数的工具。这在内核执行过程中出现崩溃时,可用于快速定位出出错的位置,进而找出代码的bug...

  • 120
    从一次栈溢出问题讨论thread_local变量与线程栈

    我的开发环境,linux系统、x86_64架构 一.栈溢出问题记录 1.背景 大家都知道栈的大小是有上限的,在linux下可以通过命令ulimit -s查看栈的size上限,...

  • 链接器如何使用静态库来解析引用

    在符号解析阶段,链接器从左到右按照它们在编译器驱动程序命令行上出现的顺序来扫描可重定位目标文件和存档文件(静态库)。在这次扫描中,链接器维护一个可重定位目标文件的集合E(这个...

  • 还有现场吗

    addr2line

    addr2line工具是一个可以将指令的地址和可执行映像转换为文件名、函数名和源代码行数的工具。这在内核执行过程中出现崩溃时,可用于快速定位出出错的位置,进而找出代码的bug...

  • 120
    使用readelf和objdump解析目标文件

    引言 本文是对程序员的自我修养:链接、装载与库中第3章的实践总结(和结构相关的示意图都是用Gliffy Diagrams画的🤓),通过使用工具readelf、objdump对...

  • nm

    nm命令显示关于指定文件中符号的信息,文件可以是对象文件、可执行文件或对象文件库。如果文件没有包含符号信息,nm命令报告该情况,但不把它解释为出错条件。nm命令缺省情况下报告...

  • hexdump

    hexdump命令一般用来查看“二进制”文件的十六进制编码,但实际上它能查看任何文件,而不只限于二进制文件。 语法 hexdump [options] file... 选项 ...

  • g++生成map文件

    在通过gcc/g++间接调用链接程序ld时,所有的ld选项前必须加上"-Wl,",因为-Map是ld的选项。所以,要让g++生成mapfile,需要如下命令:

  • c++filt

    c++ demangle工具。有时候,我们的c++/c程序,在编译的时候不会报错,但是在运行的时候会报dlopen失败。此时多数是因为动态库的路径找不到。其实我们完全没有必要...

  • ar

    ar命令可以用来创建、修改库,也可以从库中提取单个模块。库是一单独的文件,里面包含了按照特定的结构组织起来的其他的一些文件(称作此库文件的member)。原始文件的内容、模式...

  • addr2line

    addr2line工具是一个可以将指令的地址和可执行映像转换为文件名、函数名和源代码行数的工具。这在内核执行过程中出现崩溃时,可用于快速定位出出错的位置,进而找出代码的bug...

  • CPU的构架(x86/ARM64/ARM)

    CISC & RISC CPU架构有很多种,常用的主要有X86,ARM(还有其他不常用的MIPS,IA64),它们之间的差距都很大。但是如果从最基本的逻辑角度来分类的话,它们...

  • 寄存器

    x86-64处理器的16个通用寄存器 段寄存器 控制寄存器IP(Instruction Pointer):指令指针寄存器,存放代码段中指令的偏移地址。FR(Flags Reg...

  • 补码解释

    补码是最常见的有符号数的计算机表示方式。在这个定义中,将字的最高有效位解释为负权(negative weight)。 补码编码的定义 当执行一个运算时,如果它的一个运算数是有...

  • ldd查看动态依赖库

    ldd命令用于输出程序或者库文件所依赖的共享库列表。 语法 ldd (选项) (参数) 选项 --help:显示帮助信息--version:打印指令版本号;-v:详细信息...