|

楼主 |
发表于 2004-10-10 17:47:07
|
显示全部楼层
我的意思是这样~~
按照at&t的习惯
被调用函数首先要作的是
pushl %ebp
movl %esp,%ebp
那么调用函数传递给 被调用函数的参数就可以通过%ebp来访问.
而且对于32位的操作系统来说 第一个参数的地址是8(%ebp).
我昨天想试试 系统传递给程序的参数(也就是 c语言中的int argc和 char * argv[])
但是我用gdb调试得时候发现:
1.argc的地址不在8(%ebp)而是在4(%ebp)
后来我就想这不是没有了return address?
一时没有想清楚~
想发贴求证一下, 因为 一般情况下 很手考虑这种问题的
call调用是在一个进程空间中(当然只有linux这样的系统才有这样的概念,虽然这个概念很简单但是解决这个问题是以个关键)要有返回地址必须压栈~
shell则是process之间的东西不需要了,是进程切换了.
另:programming from ground up这本书我是指看看语法部分. 开头结尾没看.有些他用的是16位的操作系统 所以会有一些出入
~~~ |
|