如何识别符号表中的符号是我'application'函数
How to identify the symbols in the symbol table are my 'application' functions
我有一个示例 C 程序test.c
,它只定义了三个函数:main
、fn1
和fn2
:
void fn1(void){...}
void fn2(void){...}
int main(int argc, char** argv){...}
编译然后提取该程序的符号表(通过nm ./test
(给出了大量的符号:
0000000000601030 B __bss_start
0000000000601030 b completed.8086
0000000000601020 D __data_start
0000000000601020 W data_start
0000000000400430 t deregister_tm_clones
0000000000400420 T _dl_relocate_static_pie
00000000004004a0 t __do_global_dtors_aux
0000000000600e18 t __do_global_dtors_aux_fini_array_entry
0000000000601028 D __dso_handle
0000000000600e20 d _DYNAMIC
0000000000601030 D _edata
0000000000601038 B _end
0000000000400724 T _fini
00000000004005d0 T fn1
00000000004004e0 T fn2
00000000004004d0 t frame_dummy
.... and so on
我可以在输出中看到main
、fn1
和fn2
,但是有什么方法可以将这些符号与其他应用程序符号区分开来吗?即使只看文本(代码(部分中的符号,也有 16 个符号。我大致了解这些符号与什么有关,但我想要一些机制来识别它们与"我自己的"不同。
我的问题的上下文是英特尔 Pintools,我找不到一种方法来过滤我的仪表 pintool C++我关心的.text
部分中的例程(即应用程序功能(。在我的 pintool 中,我想做这样的事情:
VOID Routine(RTN rtn, VOID *v)
{
if(is_application_function(rtn)){
// instrument this routine with some calls
} else {
// don't instrument
}
}
我怎么可能实施is_application_function(RTN rtn)
?我可以将其过滤到我的应用程序(检查图像类型 == 共享(和.text
部分(检查部分名称 ==.text
(,但之后我无法进一步过滤......有什么想法吗?
我不一定反对相对黑客的解决方案。附加符号是否始终保持不变,这意味着我可以过滤掉它们?附加符号是否始终驻留在特定的地址区域中?是否有可以在初始化期间运行的工具,将结果读入白名单或黑名单?
谢谢!
有什么方法可以将它们与其他应用程序符号区分开来吗?
不。
我找不到一种方法来过滤我用C++编写的检测 pintool 到我关心的 .text 部分中的例程
这是您的应用程序。当然,您可以使用一致的命名,或者收集您关心的符号列表并使用它。
至少你可以使用函数IMG_IsMainExecutable(img(来消除属于其他库的函数。
VOID ImageLoad( IMG img, VOID *v )
{
string imgname=IMG_Name(img);
if(IMG_IsMainExecutable(img))
{
//read the RTN list and instrument every rtn
}
}
相关文章:
- 用符号版本替换对函数的所有调用
- C++模板函数,用于比较任何无符号整数和有符号整数
- 为什么 gcc 和 clang 为函数模板的实例化生成不同的符号名称?
- 为函数定义符号不明确的指针参数
- 在函数中返回无符号字符数组,但不返回指针
- 如何返回实际值(在我的例子中是无符号字符数组)而不是来自 C++ 函数的指针?
- MacOS 上的 Xcode 11 项目不在一个函数中使用 sin 和 cos:未定义的符号"___sincosf_stret"
- 仅在 MacOS 上析构函数的未定义符号
- clang:使用 O3 导出隐式实例化函数的符号
- 函数 _main (OPENGL C++) 中引用的未解析的外部符号 ________
- 在函数内初始化无符号字符指针将返回空指针
- 如何识别符号表中的符号是我'application'函数
- 引入参数化构造函数后显示 LNK 2019 未解析外部符号的代码错误
- 函数指针给我"重新声明为不同类型的符号"错误
- 类模板上一个特定函数的未解析外部符号
- 如何设计符号表来支持函数重载
- G++ 切换为不包含自己的符号函数名称(和调试数据)-
- 无符号函数,用于返回使用任何数字的数字
- 2 个未解析的外部符号(C++函数基础知识)
- C++错误LNK2001:未解析的外部符号函数_main