5.5 域

下面这些函数可以分析域和域控制块,分别在 4.2.2 和 4.2.3 章节描述过。与以前描述的函数有所不同的是,这些函数是 areacb_t 类的成员函数,所以只能在这个类的实例中使用这些函数。areacb_t 的两个实例是 funcs 和 segs,表示当前反汇编文件中,所有的函数和段。

尽管您应该使用“段处理”(segment-specific) 函数来处理段,还有“函数处理”(function-specific) 函数来处理函数,使用域会直接给您更多的处理函数和段的手段。

下面这些都定义在 area.hpp。

5.5.1 get_area

定义

area_t *

get_area(ea_t ea)

含义

返回指向属于 ea 的 area_t 结构的指针。

示例

#inlcude <kernwin.hpp>

#include <funcs.hpp>

#include <area.hpp>

ea_t addr;

// 询问用户输入一个地址

askaddr(&addr, “Find the function owner of address:”);

// 获取含有该地址的函数

// 您应该使用 segs.get_area(addr)

// 来获取包含该地址的段

areat *area = funcs.get_area(addr);

msg(“Area holding %a starts at %a, ends at %a\n”,

addr,

area->startEA,

area->endEA);

5.5.2 get_area_qty

定义

uint

get_area_qty(void)

含义

获取当前域控制块的域数目。

示例

#include <funcs.hpp>

#include <setment.hpp>

#include <area.hpp>

msg(“%d Functions, and %d Segments”,

funcs.get_area_qty(),

segs.get_area_qty());

5.5.3 getn_area

定义

area_t *

getn_area(unsigned int n)

含义

返回由域序数 n 指定的,指向 area_t 结构的指针。

示例

#include <funcs.hpp>

#include <setments.hpp>

#include <area.hpp>

// funcs 表示所有的函数,因此获取第一个

// 函数域,使用 0 作为序数

area_t *firstFunc = funcs.getn_area(0);

msg(“First func starts: %a, ends: %a\n”,

firstFunc->startEA,

firstFunc->endEA);

// segs 表示所有的段,因此获取第一个

// 段域,也使用 0 作为序数

area_t *firstSeg = segs.getn_area(0);

msg(“First seg starts: %a, ends: %a\n”,

firstSeg->startEA,

firstSeg->endEA);

5.5.4 get_next_area

定义

int

get_next_area(ea_t ea)

含义

返回包含地址 ea 的域的下一个域的序数。

示例

#include <funcs.hpp>

#include <area.hpp>

// 循环遍历所有函数的域

int i = 0;

for (area_t *func = funcs.getn_area(0);

i < funcs.get_area_qty();

i++)

{

msg (“Area start: %a, end: %a\n”,

func->startEA,

func->endEA);

int funcNo = funcs.get_next_area(func->startEA);

funcs = funcs.getn_area(funcNo);

}

5.5.5 get_prev_area

定义

int

get_prev_area(ea_t ea)

含义

返回包含地址 ea 的域的上一个域的序数

示例

#include <setment.hpp>

#include <area.hpp>

// 循环遍历所有的段

int i = segs.get_area_qty();

for (area_t *seg = segs.getn_area(0); i > 0; i--) {

msg (“Area start: %a, end: %a\n”,

seg->startEA,

seg->endEA);

int segNo = segs.get_next_area(seg->startEA);

seg = segs.getn_area(segNo);

}

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

词条统计

浏览:0 次

字数:3659

最后编辑:1 个月前

最近更新:JSmiles

编辑次数:0 次

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。