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); } |
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论