VC 6中使用不同调用规范的函数在符号文件里的表示方式

简介:

在以前老版本的C++编译器里,编译器会为使用不同调用约定(Calling Convention)的函数生成不同的名称,不仅是连接程序会遵从这个命名规则,调试器也会遵守这个命名规则。因此在Visual Studio里调试使用老版本编译器编译出来的程序,在设置函数断点的时候需要考虑到这个因素。

 

下面是VC里面不同调用约定的函数命名规则:

调用约定

参数压栈顺序

清理堆栈

函数命名规则

stdcall

从右向左

被调函数负责清理堆栈

函数名加前缀“_”,并且在函数名后面附加“@”和堆栈要求分配的字节数。

 

示例:_TestMethod@4

Cdecl

从右向左

调用函数负责清理堆栈

函数名加前缀“_”。

 

示例:_TestMethod

Fastcall

前两个参数由ECXEDX传递,其他的从右向左压栈

被调函数负责清理堆栈

函数名后附加“@”和堆栈要求分配的字节数。

 

示例:TestMethod@4

Thiscall

This指针由ECX寄存器传递,其他的从右向左压栈

被调函数负责清理堆栈

C++命令规则

 

标签:  调试Debug
本文转自 donjuan 博客园博客,原文链接:http://www.cnblogs.com/killmyday/archive/2011/10/19/2218136.html    ,如需转载请自行联系原作者
相关文章
|
7月前
|
存储 算法 程序员
【C++20 新特性 】模板参数包展开与Lambda初始化捕获详解
【C++20 新特性 】模板参数包展开与Lambda初始化捕获详解
344 3
|
6月前
|
缓存 监控 程序员
Python中的装饰器是一种特殊类型的声明,它允许程序员在不修改原有函数或类代码的基础上,通过在函数定义前添加额外的逻辑来增强或修改其行为。
【6月更文挑战第30天】Python装饰器是无侵入性地增强函数行为的工具,它们是接收函数并返回新函数的可调用对象。通过`@decorator`语法,可以在不修改原函数代码的情况下,添加如日志、性能监控等功能。装饰器促进代码复用、模块化,并保持源代码整洁。例如,`timer_decorator`能测量函数运行时间,展示其灵活性。
51 0
|
5月前
|
开发框架 前端开发 JavaScript
在各种开发项目中使用公用类库的扩展方法,通过上下文方式快速调用处理函数
在各种开发项目中使用公用类库的扩展方法,通过上下文方式快速调用处理函数
VC 不同版本代码注入的区别
VC 不同版本代码注入的区别
66 0
VC 不同版本代码注入的改进
在上篇文章中 《VC 不同版本代码注入的区别》 ,我们想要对目标进程进行代码的注入,由于 Debug 版编译生成的代码和 Release 版编译生成的代码有些不同(Debug 版编译后,调用函数时会有一条 jmp 指令,而 Release 没有),因此,通过 #ifdef 这样的宏来区别 VC 是以 Debug 版方式编译,还是通过 Release 版方式编译,从而编译不同的代码来针对不同的版本进行了处理。
79 0
VC通过函数名调用DLL的标准范例
VC通过函数名调用DLL的标准范例
70 0
|
C++ 索引
VC通过函数索引调用DLL范例
VC通过函数索引调用DLL范例
63 0
|
C#
C#调用dll代码范例
C#调用dll代码范例
120 0
|
存储 程序员 Go
Go基础:接口类型、接口嵌套、空接口、类型判断
Go基础:接口类型、接口嵌套、空接口、类型判断
230 0
Go基础:接口类型、接口嵌套、空接口、类型判断