5.9
Tham chiếu
Bốn
hàm tiếp theo không phải là những hàm độc lập, nhưng
là thành viên của cấu trúc xrefblk_t, được định nghĩa
trong xref.hpp. Chúng được sử dụng để thao tác và liệt
kê những tham chiếu chéo đến hoặc đi từ một địa
chỉ. Tất cả các hàm lấy flags như là tham số, mà giá
trị có thể là một trong những giá trị sau, được lấy
từ xref.hpp:
#define
XREF ALL 0x00 // trả về tất cả tham chiéu
#define
XREF FAR 0x01 // don't return ordinary flow xrefs
#define
XREF DATA 0x02 // chỉ trả về tham chiếu dữ liệu
Một
luồng thứ tự là khi thực thi thường truyền một chỉ
thị đến một chỉ thị khác mà không sử dụng các lệnh
như CALL hoặc JMP (hoặc tương đương). Nếu bạn chỉ
quan tâm đến tham chiếu chéo mã (bỏ qua luồng thứ tự),
thì bạn nên sử dụng XREF_ALL và kiểm tra nếu biến
thành viên isCode được đặt giá trị true trong mỗi
trường hợp. Sử dụng XREF_DATA nếu bạn chỉ quan tâm
đến tham chiếu dữ liệu.
5.9.1
first_from
Định nghĩa
|
bool
first from(ea t from, int flags)
|
Chú giải
|
Thao tác với cấu trúc xrefblk_t với
tham chiếu chéo đầu tiên từ địa chỉ from, cờ điều
khiển tham chiếu chéo nào mà bạn quan tâm. Trả về
false nếu không có tham chiếu nào đến từ from.
|
Ví dụ
|
#include
<kernwin.hpp> // For get screen ea() definition #include
<xref.hpp>
ea t addr = get
screen ea(); xrefblk t xb;
if (xb.first
from(addr, XREF ALL)) {
// xb is now
populated
msg("First
reference FROM %a is %a\n", xb.from, xb.to);
}
|
5.9.2
first_to
Định nghĩa
|
bool
first to(ea t to,int flags)
|
Chú giải
|
Thao tác với cấu trúc xrefblk_t với
tham chiếu chéo đầu tiên được trỏ đến từ địa
chỉ to. Cờ xác định loại tham chiếu nào mà bạn
quan tâm. Trả về false nếu không có tham chiếu nào
được trỏ đến.
|
Ví dụ
|
#include
<kernwin.hpp> // For get screen ea() definition #include
<xref.hpp>
ea t addr = get
screen ea(); xrefblk t xb;
if (xb.first
to(addr, XREF ALL)) {
// xb is now
populated
msg("First
reference TO %a is %a\n", xb.to, xb.from);
}
|
5.9.3
next_from
Định nghĩa
|
bool
next from(void)
|
Chú giải
|
Thao tác với cấu trúc xrefblk_t với
tham chiếu chéo kế tiếp kể từ địa chỉ trong from.
Trả về false nếu không có tham chiếu nào nữa.
|
Ví dụ
|
#include
<kernwin.hpp> // For get screen ea() definition #include
<lines.hpp> // For tag remove() and
// generate disasm
line()
#include <xref.hpp>
xrefblk t xb;
ea t addr = get
screen ea();
// Replicate IDA 'x'
keyword functionality
for (bool res =
xb.first to(addr, XREF FAR); res;
res = xb.next to())
T char buf[MAXSTR]; _ char clean buf[MAXSTR];
// Get the
disassembly text for the referencing addr generate disasm
line(xb.from, buf, sizeof(buf)-l);
// Clean out any format or colour codes tag
remove(buf, clean buf, sizeof(clean buf)-1); msg("%a: %s\n",
xb.from, clean buf); i _
|
5.9.4
next_to
Định nghĩa
|
bool
next to(void)
|
Chú giải
|
Thao tác với cấu trúc xrefblk_t với
tham chiếu chéo kế tiếp được trỏ đến. Trả về
false nếu không có tham chiếu nào nữa.
|
Ví dụ
|
#include
<kernwin.hpp> // For get screen ea() definition #include
<xref.hpp>
xrefblk t xb;
ea t addr = get
screen ea();
// Get the first
cross reference to addr if (xb.first to(addr, XREF FAR)) T if
(xb.next to())
msg("There are
multiple references to %a\n", addr);
else
msg("The only
reference to %a is at %a\n", addr, xb.from);
i
|
5.10
Tên
Những
hàm tiếp theo sẽ làm việc với tên hàm (sub_*), tên vị
trí (loc_*) và tên biến (arg_*, var_*) được đặt bởi IDA
hoặc người dùng. Tất cả được định nghĩa trong tập
tin name.hpp. Tên thanh ghi không được nhận biết bởi
những hàm này.
5.10.1
get_name
Định nghĩa
|
idaman char *ida
export
get name(ea t from, ea t ea, char *buf, size t
bufsize)
|
Chú giải
|
Điền vào *buf với giới hạn độ dài
được cho bởi bufsize, với giá trị tên không được
tô màu ở địa chỉ ea. Con trỏ *buf được trả về
nếu địa chỉ ea có tên, hoặc NULL nếu không. Nếu
địa chỉ được đặt sau tên trong một hàm cục bộ,
nó nên nằm trong cùng hàm đó, hoặc là nó sẽ không
được thấy. Nếu bạn không nằm sau một tên cục bộ,
form nên được đặt giá trị là BADADDR.
|
Ví dụ
|
#include <name.hpp>
|
5.10.2
get_name_ea
Định nghĩa
|
idaman ea t ida
export
get name ea(ea t from, const char *name)
|
Chú giải
|
Trả về địa chỉ tại tên hàm được
cung cấp tại *name. Nếu bạn nằm sau tên cục bộ
trong hàm, nó nên được nằm trong cùng hàm, hoặc là
nó sẽ không được thấy. Nếu bạn không nằm sau tên
cục bộ, form nên được đặt giá trị là BADADDR.
|
Ví dụ
|
// Get the cursor address ea t addr = get
screen ea();
|
5.10.3
get_name_value
Định nghĩa
|
idaman int
ida_export
get_name_value(ea_t from, const char *name,
uval_t *value)
|
Chú giải
|
Trả về giá trị
vào *value, đại diện bởi tên *name, tương ứng với
địa chỉ from. *value sẽ bao gồm cả địa chỉ lệch
và địa chỉ tuyến tính.
Nếu bạn nằm sau tên trong phạm vi cục
bộ hàm, bạn nên ở trong cùng một hàm, hoặc là nó
sẽ không tìm thấy. nếu bạn không ở trong một hàm
cục bộ, giá trị form nên được đặt là BADADDR. Giá
trị trả về sẽ là một trong các giá trị sau, đại
diện cho kiểu của tên. Được lấy trong tập tin
name.hpp.
|
Ví dụ
|
uval t value;
ea t addr = get screen ea();
|
No comments:
Post a Comment