首页 > 其他 > 详细

函数重载-name mangling或mame decoration技术-看看反汇编

时间:2020-02-01 00:06:00      阅读:117      评论:0      收藏:0      [点我收藏+]

函数重载

文件-创建新项目-空项目 源文件-右键新建项-main.cpp

#include <iostream>
using namespace std;

int main() {

    getchar();
    return 0;
}
  • c语言不支持函数重载
  • C++支持函数重载
#include <iostream>
using namespace std;

int sum(int v1, int v2){
    return v1 + v2;
}

int main() {

    cout << sum(10, 20) << endl;
 
    getchar();
    return 0;
}

现在希望sum函数多一些接收的参数

#include <iostream>
using namespace std;

int sum(int v1, int v2){
    return v1 + v2;
}

int sum(int v1, int v2, int v3){
    return v1 + v2 + v3;
}

int main() {

    cout << sum(10, 20) << endl;
    cout << sum(10, 20, 30) << endl;
 
    getchar();
    return 0;
}
  • 两个函数的函数名一模一样,但是后面的参数或类型或顺序不同,称之为过程重载(函数重载)
  • 实参的隐式转换会产生恶意性

函数重载的本质是采用name mangling或mame decoration技术

  • C++编译器默认会对符号名(比如函数名)进行改编、修饰。有的翻译术语叫(命名倾轧),掌握前面的编译器干了什么,如何命名不管它。因为,可能翻译的人就想使用原本的英文,但是领导驳回,于是强行翻译的术语就出现了。

  • 编译器偷偷把一样的函数名重命名了,反汇编看看它们
    F9打上断点 调试-开始调试 一旦进入到断点模式就可以右键进入反汇编 alt+G
    技术分享图片

我们发现在汇编还是没有进一步看见重命名的情况,只是发现了内存地址不同
技术分享图片

这个时候需要借助其他的工具,比如IDA Pro(逆向工程/反汇编)

函数重载-name mangling或mame decoration技术-看看反汇编

原文:https://www.cnblogs.com/sec875/p/12247050.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!