Saturday 8 November 2014

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

5.19 Chuỗi
Những hàm sau đây được sử dụng để đọc danh sách chuỗi trong cửa sổ Strings của IDA, mà được dẫn xuất từ những chuỗi được thấy trong tập tin bị đảo mã hiện tại. Những hàm bên dưới được định nghĩa trong tập tin strlist.hpp.
5.19.1 refesh_strlist
Định nghĩa
idaman void ida export
refresh strlist(ea t eal, ea t ea2)
Chú giải
Làm tươi danh sách chuỗi trong cửa sổ Strings của IDA. Tìm kiếm giữa hai địa chỉ ea1 và ea2 trong tập tin bị đảo mã hiện tại.
Ví dụ
#include <strlist.hpp>
// Refresh the string list. refresh strlist();


5.19.2 get_strlist_qty
Định nghĩa
idaman size t ida export get strlist qty(void)
Chú giải
Returns the number of strings found in the currently disassembled file(s).
Trả về số lượng chuỗi được tìm thấy trong tập tin được đảo mã hiện tại.
Ví dụ
#include <strlist.hpp>
msg("%d strings were found in the currently open file(s)", get strlist qty());


5.19.3 get_strlist_item
Định nghĩa
idaman bool ida export
get strlist item(int n, string info t *si)
Chú giải
Điền vào *si thông tin về chuỗi thứ n. Trả về false nếu không có chuỗi có thứ tự n.
Ví dụ
#include <strlist.hpp> int largest = 0;
// Loop through all strings, finding the largest one. for (int i = 0; i < get strlist qty(); i++) { string info t si; get strlist item(i, &si); if (si.length > largest) largest = si.length;
}
msg("Largest string is %d characters long.\n", largest);


5.20 Misc
Những hàm sau đây không phù hợp với bất cứ danh mục nào. Tập tin tiêu đề mà chúng được định nghĩa được đề cập đến trong mỗi trường hợp.
5.20.1 tag_remove
Định nghĩa
idaman int ida export
tag remove(const char *instr, char *buf, int bufsize)
Chú giải
Loại bỏ bất cứ đánh dấu màu sắc nào trong chuỗi *instr, và lưu kết quả vào vùng nhớ *buf, được giới hạn bởi bufsize. Cung cấp con trỏ giống nhau cho *instr và *buf cũng được hỗ trợ, trong trường hợp này bufsize là 0. Hàm này được định nghĩa trong lines.hpp.
Ví dụ
#include <ua.hpp> // For ua functions #include <lines.hpp>
// Get the entry point address ea t addr = inf.startIP;
// Fill cmd with information about the instruction // at the entry point decode insn(addr);
// Loop through each operand (until one of o void type // is reached), displaying the operand text. for (int i = 0; cmd.Operands[i].type != o void; i++) { char op[MAXSTR]; _ ua outop(addr, op, sizeof(op)-1, i);
// Strip the colour tags off tag remove(op, op, 0); msg("Operand %d: %s\n", i, op);
}


5.20.2 open_url
Định nghĩa
inline void
open url(const char *url)
Chú giải
Mở đường dẫn *url trong trình duyệt web mặc định của hệ thống. Hàm này được định nghĩa trong kernwin.hpp.
Ví dụ
#include <kernwin.hpp>
open url("http://www.binarypool.com/idapluginwriting/");


5.20.3 call_system
Định nghĩa
idaman int ida export
call system(const char *command)
Chú giải
Chạy lệnh được truyền vào bởi chuỗi *command, từ dòng lệnh hệ thống. Hàm này được định nghĩa trong diskio.hpp.
Ví dụ
#include <diskio.hpp>
// Run notepad
call system("notepad.exe");


5.20.4 ida_dir
Định nghĩa
idaman const char *ida export idadir(const char *subdir)
Chú giải
Trả về đường dẫn của IDA nếu giá trị *subdir là NULL, nếu *subdir không NULL, thư mục con của IDA sẽ được trở về. Những thư mục con có thể được liệt kê được khai báo trong diskio.hpp.
#define CFG SUBDIR "cfg"
#define IDC SUBDIR "idc"
#define IDS SUBDIR "ids"
#define IDP SUBDIR "procs"
#define LDR SUBDIR "loaders"
#define SIG SUBDIR "sig"
#define TIL SUBDIR "til"
#define PLG SUBDIR "plugins"
Hàm này được định nghĩa trong diskio.hpp.
Ví dụ
#include <diskio.hpp>
msg("IDA directory is %s and your plug-in lives in %s.\n", idadir(NULL), idadir(PLG SUBDIR));


5.20.5 getdspace
Định nghĩa
idaman uint64 ida export getdspace(const char *path)
Chú giải
Trả về tổng dung lượng đĩa trong ổ dịa được đại diện bởi *path. Hàm này có thể được tìm thấy ở diskio.hpp
Ví dụ
#include <diskio.hpp>


5.20.6 str2ea
Định nghĩa
idaman bool ida export
str2ea(const char *str, ea t *ea ptr, ea t screenEA)
Chú giải
Chuyển một chuỗi *str thành địa chỉ và lưu nó vào con trỏ *ea nếu nó tồn tại trong tập tin bị đảo mã hiện tại, trả về true nếu thành công. Hàm này được định nghĩa trong kernwin.hpp.
Ví dụ
#include <kernwin.hpp>
// Just some random address char *addr s = "010100F0"; ea t addr;
// If 010100F0 is in the binary, print the address if (str2ea(addr s, &addr, 0))
msg("Address: %a\n", addr);


5.20.7 ea2str
Định nghĩa
idaman char *ida export
ea2str(ea t ea, char *buf, int bufsize)
Chú giải
Chuyển địa chỉ ea thành chuỗi, và lưu nó vào vùng đệm ký tự *buf, giới hạn bởi bufsize. Định dạng của chuỗi được kết xuất là tên đoạn : địa chỉ, ví dụ, cung cấp địa chỉ 0100102A từ đoạn .text sẽ cho ra .text:0100102A. Hàm này được định nghĩa trong kernwin.hpp.
Ví dụ
#include <kernwin.hpp>
ea t addr = get screen ea(); char addr s[MAXSTR]; _
// Convert addr into addr s ea2str(addr, addr s, sizeof(addr s)-1); msg("Address: %s\n", addr s);


5.20.8 get_nice_coloured_name
Định nghĩa
idaman ssize t ida export
get nice colored name(ea t ea, char *buf, size t bufsize, int flags=0);
Chú giải
Lấy tên được định dạng của địa chỉ ea, lưu nó vào vùng đệm ký tự *buf giới hạn bởi kích thước bufsize. Nếu cờ được đặt là GNCN_NOCOLOR, không có mã màu được thêm vào tên. Nếu địa chỉ ea không có tên, địa chỉ của nó sẽ được trả về dưới dạng “có thể đọc được”, như start + 56 hoặc .text:0100210. Hàm này được định nghĩa trong name.hpp.
Ví dụ
#include <kernwin.hpp> // For get screen ea() definition #include <name.hpp>
char buf[MAXSTR];
// Get the nicely formatted name/address of the // current cursor position. No colour codes will // be included.
get nice colored name(get screen ea(),
buf,
sizeof(buf)-1,
GNCN NOCOLOR);
msg("Name at cursor position: %s\n", buf);

No comments: