LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1288|回复: 16

shell执行 程序的问题??高手指教~~~!!!

[复制链接]
发表于 2004-10-10 00:26:31 | 显示全部楼层 |阅读模式
当shell执行一个程序的时候,
比如 ./program1
系统是不是回先把 返回地址 压栈在执行程序program1呢?
高手指教~~~???
发表于 2004-10-10 09:05:08 | 显示全部楼层
shell使用exec系统调用来执行程序
发表于 2004-10-10 09:14:05 | 显示全部楼层
main的返回地址应该是在进程栈空间里吧。
 楼主| 发表于 2004-10-10 12:12:21 | 显示全部楼层
:!!
好象没有返回地址~~
发表于 2004-10-10 17:10:00 | 显示全部楼层
看看《linker and loader》就清楚了。但我怀疑楼主是否看得懂。
 楼主| 发表于 2004-10-10 17:23:13 | 显示全部楼层
你看懂了 那就回答阿~~
是 压 还是 不压?
难道说必须我 看懂 那本 外文书 你才肯回答??

这个问题我实验过 只是求证一下而~~~
发表于 2004-10-10 17:29:09 | 显示全部楼层
这本书我还没有看,但估计你的答案就在这本书里。直接看看内核中进程加载的部分也可以。
 楼主| 发表于 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位的操作系统 所以会有一些出入

~~~
发表于 2004-10-10 17:59:16 | 显示全部楼层
这些问题都比较复杂了。我记得《Programming from ground up》用的都是32位的linux操作系统,它在什么地方讲16位了?
 楼主| 发表于 2004-10-10 18:01:41 | 显示全部楼层
.int他指的占2个字节
我在我的讯驰上实验后发现是4个子节~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表