Saturday 8 November 2014

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

5.7 Hàm
Bên dưới là một số hàm được sử dụng để làm việc với những khối hàm trong tập tin bị dảo mã hiện tại trong IDA. Như đối với phân đoạn và khối hàm là các vùng, và một vài hàm bên dưới đơn giản chỉ là hàm bao cho các phương thức của lớp areacb_t cho biến toàn cục funcs. Tất cả đều được định nghĩa trong funcs.hpp
5.7.1 get_func_qty
Định nghĩa
idaman size t ida export get func qty(void)
Chú giải
Trả về số lượng hàm trong tập tin bị disassembe hiện tại
Ví dụ
#include <funcs.hpp>
msg("%d functions in disassembled file(s).\n", get func qty());


5.7.2 get_func
Định nghĩa
idaman func t *ida export get func(ea t ea)
Chú giải
Trả về con trỏ đến cấu trúc func_t đại diện cho hàm chứa địa chỉ trong ea. Nếu ea không thuộc về hàm nào cả, giá trị NULL được trả về. Chỉ có đoạn đầu của hàm là được trả về (xem phần 4.2.3.2 để biết thêm thông tin về đoạn và đuôi)
Ví dụ
#include <kernwin.hpp> // For get screen ea() definition #include <funcs.hpp>
// Get the address of the user's cursor ea t addr = get screen ea(); func t *func = get func(addr); if (func != NULL) {
msg("Current function starts at %a\n", func->startEA);


5.7.3 getn_func
Định nghĩa
idaman func t *ida export getn func(size t n)
Chú giải
Trả về một con trỏ đến cấu trúc func_t được đại diện bằng hàm tại thứ tự thứ n. Giá trị sẽ trả về NULL nếu n là số thứ tự hàm không tồn tại. Nó cũng sẽ trả về khối hàm đầu tiên.
Ví dụ
#include <funcs.hpp>
// Loop through all functions for (int i = O; i < get func qty(); i++) { func t *curFunc = getn func(i); msg("Function at: %a\n", curFunc->startEA);
i


5.7.4 get_func_name
Định nghĩa
idaman char *ida export
get func name(ea t ea, char *buf, size t bufsize)
Chú giải
Lấy tên của hàm chưa địa chỉ ea, và lưu nó vào *buf có độ dài giới hạn bởi bufsize. Nó sẽ trả về con trỏ đến chuỗi *buf hoặc NULL nếu hàm không có tên
Ví dụ
#include <kernwin.hpp> // For get screen ea() definition #include <funcs.hpp>
// Get the address of the user's cursor ea t addr = get screen ea(); func t *func = get func(addr);
if (func != NULL) T
// Buffer where the function name will be stored char funcName[MAXSTR];
if (get func name(func->startEA, funcName, MAXSTR)
!= NULL) T msg("Current function %a, named %s\n", func->startEA, funcName);
i
i


5.7.5 get_next_func
Định nghĩa
idaman func t *
ida export get next func(ea t ea)
Chú giải
Trả về một con trỏ đến cấu trúc func_t đại diện cho hàm tiếp theo hàm chứa địa chỉ ea. Trả về NULL nếu không có hàm nào tiếp theo.
Ví dụ
#include <kernwin.hpp> // For get screen ea() definition #include <funcs.hpp>
ea t addr = get screen ea();
// Get the function after the one containing the // address where the user's cursor is positioned func t *nextFunc = get next func(addr);
if (nextFunc != NULL)
msg("Next function starts at %a\n", nextFunc->startEA);


5.7.6 get_prev_func
Định nghĩa
idaman func t *
ida export get prev func(ea t ea)
Chú giải
Trả về con trỏ đến cấu trúc func_t đại diện cho hàm đứng trước hàm chứa địa chỉ ea. Trả về NULL nếu không có hàm nào trước đó.
Ví dụ
#include <kernwin.hpp> // For get screen ea() definition #include <funcs.hpp>
ea t addr = get screen ea();
// Get the function before the one containing the // address where the user's cursor is positioned func t *prevFunc = get prev func(addr);
if (prevFunc != NULL)
msg("Previous function starts at %a\n", prevFunc->startEA);


5.7.7 get_func_cmt
Định nghĩa
inline char *
get func cmt(func t *fn, bool repeatable)
Chú giải
Trả về bất cứ chú thích nào được thêm vào hàm bởi người dùng hoặc IDA cho hàm được xác định bởi *fn. Nếu repeatable có giá trị là đúng, những ghi chứ lặp lại sẽ được bao gồm. Gía trị NULL được trả về nếu hàm không có ghi chú nào.
Ví dụ
#include <funcs.hpp>
// Loop through all functions, displaying their comments // including repeatable comments. for (int i = O; i < get func qty(); i++) { func t *curFunc = getn func(i); msg("%a: %s\n",
curFunc->startEA,
get func cmt(curFunc, false));
i



No comments: