5.5
Vùng
Những
hàm sau làm việc với vùng và khối điều khiển vùng,
như được trình bày trong phần 4.2.2 và 4.2.3. Không giống
như tất cả các hàm được trình bày trước đó, chúng
là các phương thức trong lớp areacb_t, và bởi vậy, chỉ
có thể được sử dụng bởi thực thể của lớp đó.
Hai thực thể của areacb_t là funcs và segs, đại điện
cho tất cả các hàm và đoạn trong tập tin bị đảo mã
hiện tại trong IDA.
Mặc
dù bạn nên sử dụng những hàm làm việc riêng biệt với
đoạn để làm việc với những phân đoạn, và những
hàm riêng biệt với hàm để làm việc với ham, làm việc
với vùng cho phép bạn một cách trừu tượng hơn để
tương tác với hàm và phân đoạn.
Tất
cả những hàm bên dưới được định nghĩa trong
area.hpp.
5.5.1
get_area
Định nghĩa
|
area_t * get_area(ea_t ea)
|
Chú giải
|
Trả về con trỏ đến cấu trúc area_t
mà ea thuộc về.
|
Ví dụ
|
#include
<kernwin.hpp> // For askaddr() definition
#include <funcs.hpp>
// For funcs definition
#include <area.hpp>
ea t addr;
// Ask the user for
an address (see section 5.3.7)
askaddr(&addr,
"Find the function owner of address:");
// Get the function
that owns that address
// You could use
segs.get_area(addr) to get the
// segment that
owned to address here too.
Area_t *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
Định nghĩa
|
uint
get_area_qty(void)
|
Chú giải
|
Lấy số lượng vùng trong khối điều
khiển vùng hiện tại.
|
Ví dụ
|
#include <funcs.hpp>
// For funcs definition
#include
<segment.hpp> // For segs definition
#include <area.hpp>
msg("%d Functions, and %d Segments",
funcs.get_area_qty(), segs.get_area_qty());
|
5.5.3
getn_area
Định nghĩa
|
Area_t *
Getn_area(unsigned int n)
|
Chú giải
|
Trả về con trỏ đến cấu trúc area_t
cho vùng có số n.
|
Ví dụ
|
#include <funcs.hpp>
// For funcs definition
#include
<segment.hpp> // For segs definition
#include <area.hpp>
// funcs represents
all functions, so get the first
// function area
(0).
Area_t *firstFunc =
funcs.getn_area(0);
msg("First func
starts: %a, ends: %a\n", firstFunc->startEA,
firstFunc->endEA);
// segs represents
all segments, so get the first
// segment area (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
Định nghĩa
|
int
get_next_area(ea t ea)
|
Chú giải
|
Trả về về số của vùng kế vùng
chứa địa chỉ ea.
|
Ví dụ
|
#include <funcs.hpp>
// For funcs definition
#include <area.hpp>
// Loop through
functions as areas from first to last
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);
func =
funcs.getn_area(funcNo);
}
|
5.5.5
get_prev_area
Định nghĩa
|
int
get_prev_area(ea_t ea)
|
Chú giải
|
Trả về số của vùng đứng trước
vùng chứa địa chỉ ea.
|
Ví dụ
|
#include
<segment.hpp> // For segs definition
#include <area.hpp>
// Loop through
segments as areas from last to first
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);
}
|
No comments:
Post a Comment