新手提问:函数调用,参数个数不对应。

ja_caynne 2013-10-24 05:58:48
小弟最近在学习C跟汇编关系。对于下面这个程序,在Linux下用反汇编进行分析,相得出,在函数调用时,参数个数不匹配时,系统是如何做出反应的!

int foo();
int bar();

int main(void)
{
foo(2,3,4);
return 0
}

int foo(int a, int b)
{
return bar(a);
}

int bar(int c, int d)
{
int e = c + d;
return e;
}

这是三个函数反汇编的截图,希望可以有人帮忙解释了下,自己看了许久,但总感觉说不通。思维比较乱~~



~谢谢啦
...全文
624 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaohuh421 2013-10-25
  • 打赏
  • 举报
回复
可以使用联合体, 函数指针的联合体. 并且函数调用指定stdcall, 这样堆栈平衡就由调用者保证, 函数自已就不用管堆栈平衡了.
  • 打赏
  • 举报
回复
引用 5 楼 Caynne_s 的回复:
[quote=引用 2 楼 wangdahu888 的回复:] and $0xfffffff0,%esp ;把esp中的低位的位置零,相当于把esp变小,在栈上分配一下内存空间 剩下的那三条指令,就是依次压栈呗,没什么好说的
请问,在c中,如果遇到像参数个数不匹配的情况,是怎么做处理的呢?[/quote] 参数个数不匹配,直接报编译错误了呀
ja_caynne 2013-10-25
  • 打赏
  • 举报
回复
引用 2 楼 wangdahu888 的回复:
and $0xfffffff0,%esp ;把esp中的低位的位置零,相当于把esp变小,在栈上分配一下内存空间 剩下的那三条指令,就是依次压栈呗,没什么好说的
请问,在c中,如果遇到像参数个数不匹配的情况,是怎么做处理的呢?
赵4老师 2013-10-25
  • 打赏
  • 举报
回复
先弄清楚__cdecl,__stdcall,__fastcall的区别。
SoWhat 2013-10-24
  • 打赏
  • 举报
回复
与0xFFFFFFF0想与应该和内存对齐有关吧,取4的整数倍位置存放东西
AnYidan 2013-10-24
  • 打赏
  • 举报
回复
原因是调用函数时不知道函数原型
  • 打赏
  • 举报
回复
and $0xfffffff0,%esp ;把esp中的低位的位置零,相当于把esp变小,在栈上分配一下内存空间 剩下的那三条指令,就是依次压栈呗,没什么好说的
luoyz520 2013-10-24
  • 打赏
  • 举报
回复
mov %esp, %ebp //先把%esp保存在寄存器%ebp(应该是4字节的) and $0xfffffff0,%esp //%esp &= 0xfffffff0 我理解的应该是这样

70,014

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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