- 1、本文档共67页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
使用手动和自动编译插桩对CPU运行时占用率突增进行检测
Adisak Pochanayon
首席软件工程师
Netherrealm工作室
adisak@
涵盖的主题
本演讲是关于基于插桩的运行时间分析。
代码插桩的方法
《真人快打》(MK)的PET分析程序(占用率突增检测器)
分析程序
分析程序的常见类型
硬件跟踪
基于事件的硬件
基于事件的软件
采样
插桩
手动插桩
显式插桩 / 代码标记
Wrapper函数
Detours代码库和“蹦床”(Trampolines)功能
显式插桩
要求代码标记(修改源代码)
StartMarker(INFO) / StopMarker(INFO)
作用域 - ScopedMarker(INFO)
class CScopedMarker {
CScopedMarker(ProfDesc info) { StartMarker(info); }
~CScopedMarker(ProfDesc info) { StopMarker(info); }
};
#define ScopedMarker(INFO) CScopedMarker(INFO) \
ProfInfo##__LINE__
Wrapper函数
编译时间
#定义函数 (…) wrapper函数
附加说明 – 与实现编译器无关
缺点– 只有在你有源代码时起作用
链接时间更换 / Wrapping
GCC选项:-Wl,--wrap,函数名
__wrap_函数名 ()
__real_函数名()
Wrapper函数
调用函数
目标函数
Wrapper函数
调用函数
“WRAPPER”函数
“REAL”函数
1
4
2
3
Wrapper函数
使用GCC / SNC进行wrapping malloc() 的示例
添加链接器标志: -Wl,--wrap,malloc
extern C void* __real_malloc(size_t);
extern C void* __wrap_malloc(size_t Size)
{
// 调用原始malloc() 函数
return __real_malloc(Size);
}
Detours代码库和蹦床(Trampolines)
这是一个为插桩修改代码的方法
可以由分析程序在目标代码/二进制文件上进行
调用库函数插桩的运行时间
请参阅微软Detours代码库
MIPS示例代码(讲义)
这是另一种形式的手动插桩,但此方式不要求对目标函数进行源代码标记。
Detours代码库和蹦床(Trampolines)
调用函数
目标函数
Detours代码库
调用函数
DETOUR函数
目标函数
跳转
1
2
3
蹦床(Trampolines)功能
调用函数
目标函数
目标PROLOG语言
Trampoline
缓冲器
目标PROLOG语言
拷贝
蹦床(Trampolines)功能
调动函数
目标函数
目标
PROLOG语言
跳转
Trampoline
缓冲器
目标
PROLOG语言
蹦床(Trampolines)功能
调用函数
目标函数
目标PROLOG语言
跳转
目标PROLOG语言
Trampoline
缓冲器
Detours代码库和蹦床(Trampolines)
调用函数
DETOUR函数
目标函数
跳转
目标
PROLOG语言
跳转
1
2
3
4
5
6
Trampoline
缓冲器
Detours代码库和蹦床(Trampolines)
小结(缺点)
必须自行编写:基于精简指令集RISC很琐碎 / 基于复杂指令集CISC更加困难
处理页面保护/ NX (不执行)
商业使用需要付费
微软Detours软件
/en-us/projects/detours/
微软1999年关于Detours代码库和蹦床功能 (Trampolines)的研究论文:
/pubs/68568/huntusenixnt99.pdf
手动插桩
手动插桩方法总结
显示标记
Wrapper函数
Detours代码库和蹦床功能(Trampolines)
所有方法都要求对函数进行识别和用户干预(代码标志、库函数调用或者链接器参数)。
自动插桩
你可能已经在使用自动插桩
有许多分析器支持自动插桩
Metrowerks CATS、VTune Call Graph、Visual Studio Profiler Visual C++ /callcap以及fastcap、GNU gprof (w/ gcc –pg)
辅助编译器插桩(CAI)
允许用户执行分析程序而编译器会为你进行标记
GCC: -finstrument-functions / SNC: -Xhooktrace
Visual C++: _pente
您可能关注的文档
- 五寨新寨乡三友砖厂砖瓦用粘土.pdf
- 优秀原创课题发现及书写.pdf
- 传统业务量升价平新业态增长明确.pdf
- 伸缩式高清防水检测仪.pdf
- 低压无功补偿配套元件.pdf
- 住宿和餐饮业统计报表制度.pdf
- 体育公园卫生保洁项目.pdf
- 使用工具箱中常用控件.pdf
- 依法考試及格人員考試類科適用職系對照表修正對照表.pdf
- 保健食品生产项目竣工环境保护.pdf
- 2024-2030年峰值流量计行业市场现状供需分析及重点企业投资评估规划分析研究报告.docx
- 2024-2030年己酸羟孕酮注射液行业市场现状供需分析及重点企业投资评估规划分析研究报告.docx
- 2024-2030年手机行业市场发展分析及发展趋势前景预测报告.docx
- 2024-2030年抗菌包装行业市场现状供需分析及重点企业投资评估规划分析研究报告.docx
- 2024-2030年摄影器材市场发展现状分析及行业投资战略研究报告.docx
- 2024-2030年实木床架行业市场发展分析及发展趋势前景预测报告.docx
- 2024-2030年头发结合倍增器行业市场现状供需分析及重点企业投资评估规划分析研究报告.docx
- 2024-2030年小型水力发电行业市场现状供需分析及重点企业投资评估规划分析研究报告.docx
- 2024-2030年工业机器人行业市场深度分析及竞争格局与投资价值研究报告.docx
- 2024-2030年小微金融行业市场发展分析及投资前景研究报告.docx
文档评论(0)