当前位置:  技术问答>linux和unix

关于可执行文件的问题,请大家多多指教!

    来源: 互联网  发布时间:2015-09-21

    本文导语:  之所以选择这个社区,我想只有这里面的人懂得最透,这个问题我问了老师好多次,可他怎么也讲不明白,拜托各位了! 在操作系统中,一种可执行的二进制文件都有一定的格式,或者说有一个程序头,包含一些程序类型,...

之所以选择这个社区,我想只有这里面的人懂得最透,这个问题我问了老师好多次,可他怎么也讲不明白,拜托各位了!
在操作系统中,一种可执行的二进制文件都有一定的格式,或者说有一个程序头,包含一些程序类型,标志,程序大小等信息。
   1。当它被调到内存去执行时,这个文件头还在不在,还是存储到了相应的数据结构中了?在判断程序是否执行完时,是根据程序大小还是在程序的结尾有程序结束的指令?
   2。程序头是在编译时由编译器给加上的还是在存入文件系统时由文件系统加上的?
   3。程序头部分不是机器指令,在执行时OS知道如何处理,但这样的程序在裸机上怎样运行?以引导程序为例,若在OS中写一个引导程序,像其它可执行程序一样,它有一个文件头,现在要把它放到软盘第一扇区,用此软盘启动,让机器执行这个引导程序,若有这个程序头,那此程序还能不能执行?若不能执行,就要把这个程序头去掉,只留下指令序列,那是在编译时通过某种方式让它不产生程序头,还是在写入软盘第一扇区时从程序头后的第一条真正指令开始复制?
   4。把一个程序直接复制到一张空白的软盘中,它是否会从软盘的第一扇区开始写?

|
想起曾经的学生年代,不过你比我当时出息多啦:) ,我只知道骂老师大水。

你想得不错每种可执行文件确实是有个主头文件的,具体的分析网上有个很好的文章
http://linux.chinaunix.net/doc/system/2005-01-13/777.shtml

1,这个主要是为载入程序提供必要的信息,如段数、段大小、段偏移、程序指令起始的偏移地址,另外在每个段前也有段头,记载段信息如类型、大小及偏移量、访问属性等。
当程序被载入时依照操作系统相应可执行文件的特点形成了相应数据映象。程序的终结有几种方式:1、正常退出(exit(int)),2、收到结束程序的消息(kill(pid_t,int)),3、意外中止(abort(void)),4、严重出错被OS 接管退出。
2,由编译器生成的,由OS 读入构成主文件头映象。
3,程序在被OS 调入时,生成了对应的PCB ,在PCB 中登记的有代码段及相应偏移,程序运行时有指令指针,用以确定程序此时的执行位置,程序执行总是从代码断开始读入第一条指令的。
引导程序通常是指BIOS 的引导部分,读入磁盘某扇区放入内存哪个位置,控制权交给程序于是开始了系统的启动过程。
4,我不是很清楚,但做成引导盘一定是这样的,就像DOS 的SYS 命令,就是把启动程序搬到第一扇区。

|
刚才写了详细的答案 结果发送失败 郁闷 以下简述各问题
1。当它被调到内存去执行时,这个文件头还在不在,还是存储到了相应的数据结构中了?在判断程序是否执行完时,是根据程序大小还是在程序的结尾有程序结束的指令?
      看系统实现,另一般程序是从_start开始; 例子intel 退出程序,命令执行到这里就退出了
        mov ebx, 0       
        mov eax, 1        
        int 0x80

   2。程序头是在编译时由编译器给加上的还是在存入文件系统时由文件系统加上的?
        编译器

   3。程序头部分不是机器指令,在执行时OS知道如何处理,但这样的程序在裸机上怎样运行?以引导程序为例,若在OS中写一个引导程序,像其它可执行程序一样,它有一个文件头,现在要把它放到软盘第一扇区,用此软盘启动,让机器执行这个引导程序,若有这个程序头,那此程序还能不能执行?若不能执行,就要把这个程序头去掉,只留下指令序列,那是在编译时通过某种方式让它不产生程序头,还是在写入软盘第一扇区时从程序头后的第一条真正指令开始复制?
        我做嵌入,机器启电时会有个固定flash地址(硬件电路确定的),然后从此地址逐个命令执行,简单的boot不启文件系统只初始化内存信息,复杂点的启fs. 一般在稍大点的boot中会加载运行时库,驱动cpu上的串口网口等

   4。把一个程序直接复制到一张空白的软盘中,它是否会从软盘的第一扇区开始写?
        不是, 一般你用软盘前要作格式化建立文件系统, 这个文件系统也是需要空间的一般写在前面几个扇区, dos 好像不加扩充的是两个

    
 
 

您可能感兴趣的文章:

  • !!!java 中如何执行FTP命令?请高手指教。100分相赠
  • crontab -e编辑定时任务后不能执行.请高手指教
  • 线程代码, 执行没有线程的效果, 为何? 请指教。
  • c 程序入门时的编译,执行错误, 请指教
  • 执行 "sudo apt-get install mplayer mplayer-fonts"命令 为什么出现下列错误? 求指教!!!
  • Linux可执行文件权限不够问题,请指教
  • 唉! 一样的shell, 在shell下执行没有问题,但在makefile里就是不行,请 大侠指教!
  • linux下nm命令(显示可执行文件的符号信息)介绍以及常见nm命令用法举例
  • 如何让批处理文件执行完毕后窗口不关闭,批处理文件直接点击执行
  • Linux下的执行文件是什么概念,是象Dos里的2进制机器码吗,怎么看一个文件是不是执行文件.
  • 为何XML文件用IE执行后的结果和原文件一样?没有执行?
  • 100请教:如何编写脚本,执行某个目录下的所有可执行文件,并将其输出内容重定向到某个文件。(在线等)
  • redhat7.1下可执行文件不能执行????
  • 怎样执行可执行文件?
  • 菜鸟请教:linux 直接执行可执行文件
  • mysql iis7站长之家
  • 请问: 想让一个执行文件 不写相对路径,在任何路径下,都能执行,该怎么做啊?
  • 如何用JAVA执行本机Linux操作系统的可执行文件?一定给分!在线等待!
  • 用gcc编译完的可执行文件可以双击执行吗
  • centos 6.2编译出来的可以执行文件,无法在cenos 5.8上执行
  • 奇怪的问题?以root用户执行二进制文件被告知不能执行
  • 关于UNIX可执行文件的执行问题
  • 为什么我的可执行文件是rwx的,却还要 加 ./ 才能执行?
  • 怎么写一个Shell来执行这样的功能,访问Oracle数据库,然后执行一个SQL脚本,生成一个文件。急!
  • 请问:我发现如果在/usr/local/bin 与/usr/bin下都有同一个执行文件时,当在shell下执行时,只会执行/usr/local/bin,下的,怎么改过来?
  • 一个可执行文件在它所在的目录执行它,必须这样 ./hello , 直接 hello 就不行???
  • shell文件中执行命令和在提示符下执行有什么区别
  • 为什么我明明用ls命令看到了aaa.sh可执行文件,但当我执行他时,说命令不存在,这是什么原应
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • python下用os.execl执行centos下的系统时间同步命令ntpdate
  • 怎么在一个程序的执行过程中中止执行它?比如一个按钮的响应程序中,执行一半中止??20分!!!
  • linux下通过crond实现自动执行程序
  • 如何实现一个线程组内多线程的非同不执行,即一个线程执行完毕后再执行下一个线程???
  • Microsoft IE MSHTML内存破坏远程代码执行漏洞
  • SUSE10下,如何使用perl语言执行一条语句:从一台机器telnet到远端另一台机器,在远端机器上执行命令,并能获取到执行结果。请高手指点,Very 谢谢~
  • Linux下指定运行时加载动态库路径及shell下执行程序默认路径
  • 我在UNIX下用PRO*C写了个程序,每次执行都得一个多小时,我想把它放到后台执行,也就是我想交给服务器执行,而我想产掉终端窗口,应该怎么做呢
  • linux下不使用sudo命令执行docker的操作步骤
  • C中用system系统调用执行command,执行过程中死锁,如何处理?
  • Mysql Select查询执行流程介绍及实例
  • 在B shell里怎麽执行曾经执行过的命令
  • 请问JSP中的<jsp:forward page=""/>执行后,后边的操作还会执行吗?
  • 执行当前目录下可执行程序时前面必须要加上./才可以,如何解决?
  • 如何在LINUX中在系统启动后自动执行一个执行一个程序?
  • linux在脚本执行命令和直接在命令行执行命令有什么区别
  • shell 脚本 date 手动执行 和 放在init.d中自动执行的时间不一样
  • shell 编程 执行shell新建多个终端 并执行程序
  • 如何在程序中执行另外一个程序,并且当前进程依然执行?
  • Applet 是在服务器端执行还是在客户端执行??
  • 直到线程执行完后,才让程序继续执行下去,怎么实现??


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3