GDB函数介绍_part
本文针对GDB-。
LIBBFD是一套用来分析二进制文件的库,GDB用其来对二进制文件进行分析,具体关于LIBBFD可以参见tware/binutils/manual/bfd-。
在GDB中,用来表示一个arch最核心部分就是gdbarch结构,其中包含着很多函数指针和变量。
在GDB初始化以及读入新的可执行文件的时候,将调用相应代码(个人认为编写这部分代码以及用来给gdbarch结构中函数指针赋值是arch移植的主要工作),产生gdbarch结构的变量,将相应arch相关的函数地址和变量初始化在其中,并将其地址存在current_gdbarch这个指针中。
在GDB进行调试的时候,可以通过访问current_gdbarch中的函数指针和变量来达到进行arch相关调试的目的。
还有一部分跟ARCH有关的设置,在GDB/gdb/config/ARCH/tm-。
有一部分宏定义会在GDB/gdb/,GDB调用这部分宏实际上就调用了current_gdbarch中的内容,所以这部分的宏既可以通过设置gdbarch结构来实现也可以通过设置宏的方式来实现。
frame是stack frame,也就是栈结构,个人觉得跟frame相关的部分是gdbarch结构中最重要的部分,其在调试进行中起比较重要的作用,但是在GDB Internals中相关章节是空着的,因此我决定介绍一下frame,这样也对编写初始化gdbarch相关代码有帮助。
在以下章节,将先对移植中需要增加和修改的文件依次进行详细介绍,然后对frame进行介绍。下面是文件名中使用的缩写和GDB代码中的定义。
GDBINT GDB Internals Manual的缩写。
GDB 指GDB源文件目录。
ARCH 体系结构名称。
TARGET 体系结构下的调试目标,一般是一种操作系统,比如Linux。
bfd_architecture 定义在LIBBFD中用来描述ARCH的枚举类型。
gdb_osabi 定义在GDB中用来描述当前操作系统的ABI的枚举类型,其具体分类可以见GDBINT 。
这是一个shell文件,其作用是在运行configure的时候将用户指定的target和host转化成标准的字符串格式。
这个文件可以以后面跟一个要转化的字符串的形式被调用,输出转化后的字符串,可以很方便的进行测试。
这个文件主要分为以下几个部分:
第一部分,将用户输入的结构参数分成前$basic_machine和后$os两部分。
第二部分,对$os也就是后面的操作系统相关的字段进行分析和处理。
第三部分,对$basic_machine进行分析和处理,如果是要增加一个芯片的支持,就在这里增加分析和处理,有时候也对$os进行处理。一般来说增加一个如果在ARCH名称后面没跟任何文件类型的则给$basic_machine增加一个"-unknown"。
第四部分,对$os进行进一步的分析和处理。
第五部分,根据$basic_machine对$os进行设置。
第六部分,如果$basic_machine是*-unknown的形式,则根据$os得到其$vendor,也就是制造商,然后将$basic_machine中的unknown替换成$vendor。
第七部分,打印$basic_machine$os。
这个文件跟运行configure时设置的target有关。这个文件主要作用是根据上面文件得到的字符串得到编译需要的一些信息取得编译需要的信息。
其是在GDB/gdb/configure中被调用,在GDB/gdb/configure中先将从GDB/$target中,然后将其中三部分存放在$target_cpu、$target_vendor、$target_os中。然后在其包含的文件GDB/。
这个文件首先根据$target_cpu来取得$gdb_target_cpu的值。如果你的CPU不象mips那样含有mipsel类的值,就不用对这段进行修改。这个值将作为ARCH的值。
后面一段根据$target来取得$gdb_target的值,其就是TARGET的值。一般来说这个值使用操作系统的名称。
最后一段根据$target来取得$gdb_osabi的值,这个值是系统ABI的值,这个值最终将被设置为GDB_OSABI_DEF
GDB函数介绍 part 来自淘豆网m.daumloan.com转载请标明出处.