freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

【原创】Ghidra——主要窗口Program Tree和Symbol Tree介绍
2022-02-15 11:01:25
所属地 四川省

一、 Program Tree管理窗口

Program Tree(以下称作“项目树”)管理窗口默认位于界面的左上角。程序树被用来将程序组织进一个树结构。我们可以用程序树中的节点在CodeBrowser中进行导向,我们也能够利用程序树限制CodeBrowser中所显示的内容。程序树管理器可以创建、删除、重命名或关闭程序树的视图。
image

图1 项目树管理窗口

文件夹与分段

项目树将一个程序组织成文件夹与分段(folders and fragments)。分段包含着代码的单元,而代码单元只能存在于一个且只有一个分段中。文件夹则可以包含分段和其他文件夹。这里所说的文件夹不像文件系统当中的文件夹,除了根文件夹之外的任意文件夹,和分段,都可以有不止一个的父文件夹。当用户将一个文件夹或分段(暂且称之为A)复制到另一个父文件夹下时,不会有新的A被创建,而是目标文件夹会被添加为A的另一文件夹。

创建文件夹

右键选择窗口中的一个文件夹
右键菜单中选中Create Folder

创建分段

右键选择窗口中的一个文件夹
右键菜单中选择Create Fragment
我们也可以通过拖动陈列窗口中的代码单元来创建分段,只需拖动选中的代码单元到一个文件夹。该新建的分段的名称将会由所选代码单元中的第一个地址名称所决定。如果拖动的代码单元有标签,分段的名称将会被默认地设为标签名。

删除

满足以下两种情况之一时,我们才能够删除文件夹或分段A。

A是空的。
A存在于其他的文件夹中。
右键选择Delete以将其删除。

排序

用户可以选择以地址或名称顺序对程序树中内容进行排序。

右键选择一个文件夹
Sort→by Address(以地址顺序),Sort→by Name(以名称顺序)。

二、Symbol Tree 窗口

Symbol Tree窗口,以下称作符号树窗口,将程序分为五个大类显示:Externals、Function、Labels、Classes与Namespaces。

符号树窗口默认显示于程序树窗口下方,如果关闭后想将其重新打开,选择Window→Symbol Tree。
image

图2 程序树管理窗口

显示

我们将对上图中可见到的类别一一介绍。

Imports

Imports类别包含了代表外部库命名空间的符号。库名被预留以放置那些还没有与特定的库关联的外部符号。
image

图3 EXTERNAL标签

Exports

Exports包含了那些代表导出的入口点的符号。

Functions

Functions包含了代表程序中函数的符号(除外部函数)。我们可以打开一个函数的符号来显示它的参数和变量符号。
image

图4 显示参数与变量

Labels

所有Labels类别中的符号都处于全局命名空间中。

Class

Class包含了那些可能包含函数命名空间或标记符号的类的命名空间。

Namespace

Namespace包含了处于全局命名空间中的通用命名空间,也可能包含类、函数、标记、或其他命名空间。

创建库

用户可以创建一个库的名字并将其指代一个外部库。这个名字因此就可以与程序(或库)相关联并允许用户进行导向或阅读代码。右键点击Imports文件夹并选择Create Library。所创建的库默认名称会是NewLibrary。

设置外部程序

右键点击你想要的关联的Imports文件夹中的库,并选择Set External Program,这将弹出一个选择外部程序的会话,我们可以在该会话中选择想关联的外部程序(或库)。之后,用户便能够对外部引用进行导向或阅读代码。

外部位置

右键点击某个库,并选择Create External Location,便会弹出一个创建外部位置的对话(如下图)。External Program Path,即是程序对应的库,在项目中有关联程序的情况下会被自动填充。另外的情况下,我们可以从Edit手动选择。我们需要为外部位置指定Label(标签)或是Address(地址)。勾选Make External Function将创建一个外部函数。不勾选的情况下,一个非函数的外部位置将被创建。
image

图5 创建外部位置

在上图所显示的对话中,我们创建了一个外部函数,被标记为A_Label,位于Lib中的地址0xdeadbeef。这个库的名称Lib,则将会与项目中的lib_example文件相关联。

与上述操作类似,我们可以对外部位置进行编辑。右键选择外部位置/外部函数并选择便可以调出编辑外部位置的对话。

如果我们选中一个外部位置的标志,会被导向至一个外部的引用源,该引用源指向外部位置。如果想要真正地导向到这个外部位置,右键点击标志并选择Go To External Location。

创建类与命名空间

右键选中一个父命名空间并选择Create Class选项。所有在Class类别中的类,都在全局命名空间中。

相似地,我们可以在全局命名空间、类、或者其他命名空间中创建命名空间。右键点击父命名空间并选择Create Namespace。所有在Namespace类别中的命名空间,都在全局命名空间中。

# 逆向工程 # 逆向分析 # 逆向工具
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录