当前位置: 首页 > article >正文

C++ 函数调用时的参数传递方法

C++语言的函数调用

在编译后的ELF文件中,不论是C++函数还是C函数,甚至是汇编语言函数,它们之间没有任何区别。但是,C++函数在编译时会经过函数名变换(mangle)。例如,对于如下C++函数func:

class foo {

public:

void func(int x, int y);

};

函数foo::func在ELF文件中被变换成下面的符号(mangle之后的符号名依赖于具体的实现):

# nm foo | grep foo

0000000000400508 T _ZN3foo4funcEii

另外,要从被mangle后的符号(mangled synbol)中恢复源代码中的函数原型(即进行demangle),可以使用c++filt命令(或者 nm的-C选项):

# nm foo | grep foo | c++filt

0000000000400508 T foo::func(int, int)

或者:

# nm -C foo | grep foo

0000000000400508 T foo::func(int, int)

C++函数foo::func被调用时,传递的参数比原型声明的参数多一个this指针:

void func(class foo *this, int x, int y);

在x86_64中查看参数

要查看参数的值,先用-g选项编译程序,然后用GD


http://www.kler.cn/a/378548.html

相关文章:

  • 智能交易模型的探索与发展
  • 为什么要使用Docker?
  • 基于Matlab 模拟停车位管理系统【源码 GUI】
  • 应用层知识点总结2
  • rnn/lstm 项目实战
  • 刘艳兵-DBA018-关于数据库处于ARCHIVELOG模式下的说法正确的是?
  • 线性数据结构之队列
  • 【读书笔记/深入理解K8S】集群控制器
  • 《GBDT 算法的原理推导》 11-15更新决策树的叶子节点值 公式解析
  • mac 系统下载 vscode
  • 如何设置使PPT的画的图片导出变清晰
  • 自动驾驶-端到端大模型
  • 三层交换实现不同VLAN之间设备的互通
  • SQL 常用语句
  • 【系统架构设计师】2024年上半年真题论文: 论云上自动化运维级其应用(包括解题思路和素材)
  • 项目模块十四:HttpRequest模块
  • 六西格玛项目助力,手术机器人零部件国产化稳中求胜——张驰咨询
  • LLaMA系列一直在假装开源...
  • 基于YOLO11/v10/v8/v5深度学习的危险驾驶行为检测识别系统设计与实现【python源码+Pyqt5界面+数据集+训练代码】
  • 【p2p、分布式,区块链笔记 Torrent】通过网络编程库net集成bittorrent-protocol协议
  • ps技巧,来源于网络
  • Linux -- 信号的常见产生方式
  • MySQL日志——针对实习面试
  • 聚观早报 | 苹果推出新款iMac;华为Mate 70系列将上市
  • 并发编程中的CAS思想
  • 富格林:曝光欺诈陷阱纠正误区