有关内联汇编的一个想法,可是没有实现,帮帮忙!

吃狼的豆腐 2006-04-28 12:56:37
#include<stdio.h>

void fun1()
{
__asm
{
pop ebx
pop ebx
pop ebx
pop ebx
pop ebx
pop ebx
pop ebx
pop ebx
}
printf("fun1\n");
}

void fun2()
{
fun1();
printf("fun2\n");
}

int main()
{
fun2();
}
这个想fun1()直接跳到fun2的出口处,就是fun1()中把栈中有关fun1()保存的信息全部推出
函数调用的时候保存了ebp,ebx,esi,edi,我实在不知道到底应该推出来多少个,大家帮忙看看吧谢谢了
...全文
183 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
nicknide 2006-04-28
  • 打赏
  • 举报
回复
连续大量的 push or pop 确实会有问题
这种问题, 使用直接 add esp, n 吧...

关于禁止内联, 有专门的编译开关...
sandrowjw 2006-04-28
  • 打赏
  • 举报
回复
不过要另外写在一个cpp文件里,当前文件声明一下就好。
sandrowjw 2006-04-28
  • 打赏
  • 举报
回复
不内联很简单,用extern关键字
swimmer2000 2006-04-28
  • 打赏
  • 举报
回复
参数从右到坐依次进栈
返回地址
当前的Bp
函数的局部变量.


吃狼的豆腐 2006-04-28
  • 打赏
  • 举报
回复
...... 怎么没人来啊自己顶~~~~~~~~~~~~~
吃狼的豆腐 2006-04-28
  • 打赏
  • 举报
回复
你的fun1中都是ebx,肯定不行
————————————————————
那个只是为了把栈顶的信息pop没有什么意义啊
吃狼的豆腐 2006-04-28
  • 打赏
  • 举报
回复
debug模式下内存都初始化为0xccccccc老是中断,所以我是release下写的,不过刚才看了下release生成的汇编发现竟然没有调用fun2,fun1全部优化成了inline........有什么指令可以不让他改成inline吗??
gjianpro 2006-04-28
  • 打赏
  • 举报
回复
你的fun1中都是ebx,肯定不行
Holmescn 2006-04-28
  • 打赏
  • 举报
回复
你不如把fun2的栈ebp给了fun1,然后在fun1里直接写回去就行了,不过,一定会有问题的,运行时的错误,呵呵

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧