首页
社区
课程
招聘
内嵌汇编得郁闷
发表于: 2006-8-10 18:10 4081

内嵌汇编得郁闷

2006-8-10 18:10
4081
我常常把算法内嵌在C++内,但是往往遇到ebp,esp等等得操作我就得自己一句一句改,最近弄一个那个作者几乎句句都有ebp,很郁闷,有什么方式把整个ebp和esp虚拟起来(除虚拟机外,如果谁有好用得请提供,有酬谢),是不是asm就不用管esp和ebp如何如何是不是直接扣下来得代码,参数给对就OK

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 494
活跃值: (629)
能力值: ( LV9,RANK:1210 )
在线值:
发帖
回帖
粉丝
2
内嵌汇编可以用naked调用规则
2006-8-10 22:06
0
雪    币: 325
活跃值: (97)
能力值: ( LV13,RANK:530 )
在线值:
发帖
回帖
粉丝
3
同意楼上的。。。作为一个子过程  可以不管EBP的,
当然你也可以用ASM编译为了LIB或者OBJ再来链接
2006-8-10 22:40
0
雪    币: 5
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
4
郁闷,说的晚了我都改完了

naked call

其他调用约定时,如果必要的话,进入函数时编译器会产生代码来保存ESI,EDI,EBX,EBP寄存器,退出函数时则产生代码恢复这些寄存器的内容。naked call不产生这样的代码。
那不是很危险了
2006-8-11 00:49
0
雪    币: 5
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
5
郁闷

__declspec(naked) void __stdcall test()
{
        _asm
        {
                push ebp

                mov ebp,1
                mov edx,1
                lea ecx,dword ptr ds:[edx+ebp]

                pop ebp
        }

}
被别的程序调用只是一个出错,超级郁闷
2006-8-11 01:16
0
雪    币: 5
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
6
巨,还真的是naked
后面加 ret好了
2006-8-11 01:17
0
雪    币: 234
活跃值: (104)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
naked调用怎么传参数进去?

比如
__declspec(naked) void __stdcall test(DWORD para)
{
  _asm
  {
    push ebp

    mov eax,para           ; ------> 可以这样写吗?

    mov ebp,1
    mov edx,1
    lea ecx,dword ptr ds:[edx+ebp]

    pop ebp
  }

}
2006-8-11 10:42
0
雪    币: 12
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
似乎delphi没有这种问题?
2006-8-11 10:51
0
雪    币: 5
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
9
最初由 kryso 发布
似乎delphi没有这种问题?


恩 delphi 确实没有此类问题

可能是delphi内存回收机制的不同,所以delphi没vc执行效率高,vc没delphi好“骗”钱呵呵
2006-8-11 12:10
0
游客
登录 | 注册 方可回帖
返回
//