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

内嵌汇编得郁闷

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

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

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

naked call

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

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

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

                pop ebp
        }

}
被别的程序调用只是一个出错,超级郁闷
雪    币: 5
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
Dion_love 2006-8-11 01:17
6
0
巨,还真的是naked
后面加 ret好了
雪    币: 234
活跃值: (94)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
auser 2006-8-11 10:42
7
0
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
  }

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


恩 delphi 确实没有此类问题

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