资讯详情

资讯详情

在研究反汇编过程中如何避免实验函数被内联优化

__declspec(noinline) int test1(int a,int b,int c) { volatile int 返回结果 0; 返回结果 a b - c; return 返回结果; } void 实验窗口::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 MessageBoxW(L测试开始, 0, 0); int 返回值test1(1000,200,3); CString 输出测试; 输出测试.Format(L测试结束输出内容%d, 返回值); MessageBoxW(输出测试); }如上图如何避免自己写的函数test1()被内联优化掉什么叫内联优化如果标记函数被编译器内联了它在汇编里就消失了直接变成几行无用的赋值甚至被完全删掉你就找不到call指令了。保留非内联的call才能在反汇编里一眼看见。在函数名前加上__declspec(noinline) 和函数内部定义一个变量加上volatile就行了测试结果如下
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →