Saturday 8 November 2014

Xây dựng trình cắm cho IDA Pro - Phần 12

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: