5.10 名称

下面的函数处理有 IDA 或用户所设置的函数(sub_*),位置(loc_*) 和变量(arg_*,var_*) 的名称。定义在 name.hpp。而寄存器名称不能被这些函数识别。

5.10.1 get_name

定义

idaman char *ida_export

get_name(ea_t from,ea_t ea,char *buf,size_t bufsize)

含义

用 ea 的非着色名称填充*buf,长度限定为 bufsize。如果 ea 有一个名称,就返回*buf 指针,否则返回 NULL。如果您在一个名称后面是一个函数的位置,from 也应该位于同样的函数内,或者它不可见。如果您不是在一个位置名称后面,from 应该为 BADADDR。

示例

#include <name.hpp>

char name[MAXSTR];

// Get the name of the entry point, should be start

// in most cases.

char *res = get_name(BADADDR,

inf.startIP, // Entry point

name,

sizeof(name)-1);

if (res != NULL)

msg("Name: %s\n", name);

else

msg("No name for %a\n", inf.startIP);

5.10.2 get_name_ea

定义

idaman ea_t ida_export

get_name_ea(ea_t from, const char *name)

含义

返回由定义的*name 指定的名称的地址。如果您在一个函数的位置名称之后,from 应该也在同一个函数内,或者是不可见的。如果您不是在一个位置名称之后,from 应该为 BADADDR。

示例

#include <kernwin.hpp> // For askstr and get_screen_ea

#include <name.hpp>

// Get the cursor address

ea_t addr = get_screen_ea();

// Ask the user for a string (see kernwin.hpp), which

// will be the name we search for.

char *name = askstr(HIST_IDENT, // History identifier

"start", // Default value

"Please enter a name"); // Prompt

// Display the address that the name represents. You will

// get FFFFFFFF for stack variables and nonexistent

// names.

msg("Address: %a\n", get_name_ea(addr, name));

5.10.3 get_name_value

定义

idaman int ida_export

get_name_value(ea_t from, const char *name, uval_t *value)

含义

返回一个值到*value,它表示对应于地址 from 的名称*name。*value 将包含义个栈偏移或线性地址。

如果您在一个函数的位置名称之后,from 应该也位于同一函数内,或者是不可见的。如果您不在一个位置名称后,from 应该为 BADADDR。返回值是如下的其中之一,表示名称的类型。摘自 name.hpp:

#define NT_NONE 0 // name doesn't exist or has no value
#define NT_BYTE 1 // name is byte name (regular name)
#define NT_LOCAL 2 // name is local label
#define NT_STKVAR 3 // name is stack variable name
#define NT_ENUM 4 // name is symbolic constant
#define NT_ABS 5 // name is absolute symbol
// (SEG_ABSSYM)
#define NT_SEG 6 // name is segment or segment register
// name
#define NT_STROFF 7 // name is structure member
#define NT_BMASK 8 // name is a bit group mask name

示例

#define NT_NONE 0 // name doesn't exist or has no value
#define NT_BYTE 1 // name is byte name (regular name)
#define NT_LOCAL 2 // name is local label
#define NT_STKVAR 3 // name is stack variable name
#define NT_ENUM 4 // name is symbolic constant
#define NT_ABS 5 // name is absolute symbol
// (SEG_ABSSYM)
#define NT_SEG 6 // name is segment or segment register
// name
#define NT_STROFF 7 // name is structure member
#define NT_BMASK 8 // name is a bit group mask name

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

词条统计

浏览:0 次

字数:3360

最后编辑:1 个月前

最近更新:JSmiles

编辑次数:0 次

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。