D语言的函数修饰

D语言的函数修饰 = _D + 函数模块字串的字符个数 + 模块名(默认为文件名) + 函数字符串字符个数 + 函数字符串 + F(Function) + 虚参类型名 + Z + 返回值类型

示例:
module mainXASDA;
void funwq(int,int,int);

修饰名 : _D9mainXASDA5funwqFiiiZv

成员函数修饰 = _D + 函数模块字串的字符个数 + 模块名(默认为文件名) + 类字符串字符个数 + 类字符串 + 成员函数字符串个数 + 成员函数字符串 + MF(Member Function) + 虚参类型名 + Z + 返回值类型

module mainXASDA;

class zzz{
public:
int aaa(int,int);
}

修饰名 : _D9mainXASDA3zzz3aaaMFiiZi


还有一点 关于 D风格的 函数调用 反汇编看了下 有三个比较独特的地方 ...(Windows 最新的版本的 dmd 未开 -O 优化的情况下)

1. 参数是 从左往右呀进去的 ... 跟 __cdcel/__stdcall 相反
2. 最后一个参数 他是不压的 直接 mov 在 eax 里面 然后 调用 函数 .. 这点比较聪明 函数总是通过 eax 来返回值的 最常修改的就是 eax 寄存器了 不太可能eax 里面存在重要的 上下文 ... vc 里面 ebx 比较重要 上次没保存ebx 程序直接崩溃了 (修改ebx居然会有 修改框架指针的警告 vs2010 esp 为0 会丢失反汇编/调试内容) ...
3. 使用 enter 来生成栈帧 leave 恢复现场然后返回
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值