linux 文件不能执行_windows可执行文件为什么不能在linux运行 - CSDN
  • 执行shell脚本时提示这样的错误主要是由于shell脚本文件是dos格式,即每一行结尾以\r\n来标识,而unix格式的文件行尾则以\n来标识。 查看脚本文件是dos格式还是unix格式的几种办法。 (1)cat -A filename 从显示...

    在执行shell脚本时提示这样的错误主要是由于shell脚本文件是dos格式,即每一行结尾以\r\n来标识,而unix格式的文件行尾则以\n来标识。
      查看脚本文件是dos格式还是unix格式的几种办法。
    (1)cat -A filename  从显示结果可以判断,dos格式的文件行尾为^M$,unix格式的文件行尾为$。
    (2)od -t x1 filename 如果看到输出内容中存在0d 0a的字符,那么文件是dos格式,如果只有0a,则是unix格式。
    (3)vi filename打开文件,执行 : set ff,如果文件为dos格式在显示为fileformat=dos,如果是unxi则显示为fileformat=unix。

      解决方法:
    (1)使用linux命令dos2unix filename,直接把文件转换为unix格式
    (2)使用sed命令sed -i "s/\r//" filename  或者 sed -i "s/^M//" filename直接替换结尾符为unix格式
    (3)vi filename打开文件,执行 : set ff=unix 设置文件为unix,然后执行:wq,保存成unix格式。

    展开全文
  • Linux系统下运行.sh文件有两种方法,比如我在root目录下有个datelog.sh文件 第一种(这种办法需要用chmod使得文件具备执行条件(x): chmod u+x datelog.sh): 1、在任何路径下,输入该文件的绝对路径/root...

    在Linux系统下运行.sh文件有两种方法,比如我在root目录下有个datelog.sh文件


    第一种(这种办法需要用chmod使得文件具备执行条件(x): chmod u+x datelog.sh):

    1、在任何路径下,输入该文件的绝对路径/root/datelog.sh就可执行该文件(当然要在权限允许情况下)


    2、cd到datelog.sh文件的目录下,然后执行./datelog.sh



    第二种(这种办法不需要文件具备可执行的权限也可运行):

    1、在该文件路径下sh加上文件名字即可,sh datelog.sh


    2、在任意路径下,sh 加上文件路径及文件名称:sh /root/ datelog.sh


    展开全文
  • 现在就从从一个执行文件a.out的运行开始,自上而下地分析linux是如何运行一个执行文件的。1、首先,需要了解一下a.out这个目标文件。a.out在linux下是ELF(Executable Linkable Format)文件格式,该目标文件由一个...

    导读:和windows下的PE结构是一样的,安全逆向分析也需要这一块,这和云计算技术虚拟化也相关

    本文只为整理思路,供自己日后参考。现在就从从一个执行文件a.out的运行开始,自上而下地分析linux是如何运行一个执行文件的。

    1、首先,需要了解一下a.out这个目标文件。a.out在linux下是ELF(Executable Linkable Format)文件格式,该目标文件由一个文件头、代码段、数据段(已初始化)、从定位信息区、符号表及符号名字字符串构成,如下左图所示,经过链接后生成执行文件如下右图所示,需要说明的是1).bss段在目标文件和执行文件中并不占用文件的空间,但是它在加载时占用地址空间;2)链接后各个段在虚拟空间上的地址就确定了,并且linux下,ELF可执行文件默认从地址0x080480000开始分配。

                   

    我们知道在linux下运行一个程序只要在shell中执行 ./a.out 这个命令就OK了,剩下的事情操作系统会替我们完成。但是操作系统到底做了什么,它是怎么做的呢,接下来就来解析一下。

    2、linux系统中每个程序都运行在一个进程上下文中,这个进程上下文有自己的虚拟地址空间。当shell运行一个程序时,父shell进程生成一个子进程,它是父进程的一个复制品。子进程通过execve系统调用启动加载器。加载器删除子进程已有的虚拟存储段,并创建一组新的代码、数据、堆、栈段,新的堆和栈被初始化为零。通过将虚拟地址空间中的页映射到可执行文件的页大小组块,新的代码和数据段被初始化为可执行文件的内容,最后将CUP指令寄存器设置成可执行文件入口,启动运行。

    执行完上述操作后,其实可执行文件的真正指令和数据都没有别装入内存中。操作系统只是通过可执行文件头部的信息建立起可执行文件和进程虚拟内存之间的映射关系而已。现在程序的入口地址为0x08048000,刚好是代码段的起始地址。当CPU打算执行这个地址的指令时,发现页面0x8048000~0x08049000(一个页面一般是4K)是个空页面,于是它就认为是个页错误。此时操作系统根据虚拟地址空间与可执行文件间的映射关系找到页面在可执行文件中的偏移,然后在物理内存中分配一个物理页面,并在虚拟地址页面与物理页面间建立映射,最后把文件中页面拷贝到物理页面,进程重新开始执行。该过程如下图所示:

    MMU是Memory Management Unit的缩写,中文名是内存管理单元,它是中央处理器(CPU)中用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件机制的内存访问授权,多用户多进程操作系统。


    3、这里比较难理解的就是这个分页机制,讲到分页机制,就不得不提linux的分段与分页机制,这也是这篇文章的重点。我们先

    来看一张图:

    这张图展示了虚拟地址进过分段、分页机制后转化成物理地址的简单过程。其实分段机制是intel芯片为兼容以前产品而保留下来的,然后linux中弱化了这一机制。下面我们先简单介绍一下分段机制:

    分段提供了隔绝各个代码、数据和堆栈区域的机制,它把处理器可寻址的线性地址空间划分成一些较小的称为段的受保护地址空间区域。如果处理器中有多个程序在运行,那么每个程序可分配各自的一套段。此时处理器就可以加强这些段之间的界限,并确保一个程序不会通过访问另一个程序的段而干扰程序的执行。为了定位指定段中的一个字节,程序必须提供一个逻辑地址,该地址包括一个段选择符和一个偏移量。实模式下,段值还是可以看作地址的一部分,段值位XXXXh表示以XXXX0h开始的一段内存。而保护模式下,段值仅仅变成了一个索引,只想一个数据结构的一个表项,该表项中定义了段的起始地址、界限、属性等内容。cs、ds等寄存器中存的就是这个段选择符,

    用段选择符中的段索引在GDT或LDT表中定位相应的段描述符,把段描述符中取得的段基地址加上偏移量,就形成了一个线性地址。

           得到了线性地址之后,我们再来看看分页机制如何把它转换成物理地址。处理器分页机制会把线性地址空间(段已映射到其中)划分成页面,然后这些线性地址空间页面被映射到物理地址空间的页面上。分页与分段最大的不同之处在于分页是用来固定长度的页面(一般为4KB)。如果仅适用分段地址转换,那么存储在物理内存中的一个数据结构将包含器所有部分。但如果适用了分页,那么一个数据结构就可以一部分存储在物理内存中,而另一部分保存在磁盘中。
          处理器把线性地址转换成物理地址和用于产生页错误异常的信息包含在存储与内存中的页目录和页表中。也变可看作简单的4K为单位的物理地址数组。线性地址的高20位构成这个数组的引索值,用于选择对应页面的物理基地址。线性地址的低12位给出 了页面中的偏移量。页表中的页表项大小为32位。由于只需要其中20位来存放页面的物理基地址,因此剩下的12位可用于存放诸如页面是否存在等属性信息。如果线性地址引索的页表项被标注为存在,我们就从页面中取得物理地址。如果表项中不存在,那么访问对应物理页面时就会产生异常。
           页表含有2^20(1M)个表项,而每项占用4个字节。如果作为一个表来存放的话,最多将占用4MB内存。因此为了减少内存占用量,80x86适用了两级表。由此,高20位线性地址到物理地址的转换也被分成两步进行,每部适用其中10个比特。
           第一级表称为页目录。它被存放在1页4k 页面中,具有2^10(1k)个4字节长度的表项。这些表项指向二级表。它们由线性地址最高10位作为引索。
    第二级表称为页表,长度也是1个页面。线性地址高10位获取指向第二级页表的指针,再加上中间10位,就可以在相应页表中获得物理地址的高20位。而为地址的低12位就是线性地址的低12,这样就组成了一个完整的32位物理地址。分段、分页的整个过程可见下面这张图:

    展开全文
  • 标题linux中为什么新建的sh文件不能执行 **linux执行shell文件需要权限,使用vim编辑器新建的shell文件并没有执行的权限,使用chmod 777 *.sh即可给权限**

    标题linux中为什么新建的sh文件不能执行

    **linux中执行shell文件需要权限,使用vim编辑器新建的shell文件并没有执行的权限,使用chmod 777 *.sh即可给权限**
    
    展开全文
  • 现在就从从一个执行文件a.out的运行开始,自上而下地分析linux是如何运行一个执行文件的。 1、首先,需要了解一下a.out这个目标文件。a.out在linux下是ELF(Executable Linkable Format)文件格式,该目标文件由一...
  • linux 查找可执行文件

    2018-03-23 10:35:14
    转自:https://www.cnblogs.com/binyue/p/4707948.htmlLinux下的可执行文件Linux下如何查找可执行文件,作为一个Linux小菜...Linux不能简单根据文件后缀判断是否可执行linux下判断一个文件是否可执行,关键看是...
  • linux下的一些可执行...不然这个文件不能执行的。 我们用vi建立一个tomcat.sh的文件,命令ll查看 这里可以看到是没有可执行权限的。 接下来我们要用到chmod命令,先看看chmod命令的帮助信息。 输入chmod --h
  • 本周遇到了一个问题:使用Qt编写好的软件,将其...解决方法:运行不了是因为找不到相关的libns3.19-core-debug.so(或libns3.25-core-debug.so)文件,我们知道ns3的.so文件在build文件夹中,因此需要将这个位置告诉l
  • linux运行文件的命令

    2020-03-29 14:26:10
    linux运行文件的命令 自己的随记 运行c语言文件 sudo gedit test.c gcc -o test test.c ./test 运行 .sh文件 首先要开启权限,再运行 chmod 777 文件名.sh ./文件名.sh
  • linux下sh文件无法执行

    2018-11-01 16:03:14
    linux下sh文件无法执行vim操作 vim操作 用vim打开该sh文件,输入: [plain] :set ff 回车,显示fileformat=dos,重新设置下文件格式: [plain] :set ff=unix 保存退出: [plain] :wq 再执行,竟然可以了。 ...
  • 我来补充题主的问题,...那么是不是说理论上,这个可执行文件linux和windows和都可以执行? 主要的原因是格式不同和API不同,前者更重要一些。 一个可执行的二进制文件包含的仅仅是机器指令,还包
  • Linux生成可执行文件

    2019-01-06 21:58:51
    linux下c语言工程: c文件:主要每个模块的原代码都在c文件中。 h文件:每个c文件都跟着一个h文件,h文件的作用是放着...每个文件经过编译都会形成一个目标文件(二进制文件),多个目标文件链接后才能形成可执行...
  • linux查找文件命令find

    2008-04-25 16:56:00
    在微软的WINDOWS操作系统中要查找一份文件是相当简单的事情,只要在桌面上点击“开始”-“搜索”中就按照各种方式在本地硬盘上,局域网络,甚至在INTERNET上查找各种文件,文档。 可是使用Linux的用户就没有那么...
  • linux终端(terminal)中执行python文件
  • linux执行.sh文件的方法  .sh文件就是文本文件,如果要执行,需要使用chmod a+x xxx.sh来给可执行权限。     是bash脚本么  可以用touch test.sh #创建test.sh文件  vi test.sh #编辑test.sh文件  ...
  • 出现这个问题的初衷是,要用工控机去实现一些控制,于是乎买了个无线网卡,其自带的驱动是exe文件,在Ubuntu上无法执行exe文件,查了下要用wine命令才能在Linux执行exe 1、插上网线,sudo apt-get install wine ...
  • linux运行php文件

    2019-10-30 12:05:50
    1、打开linux命令行,准备好。 2、找到linux环境下,php可执行文件的目录。如图所示。我的目录为/usr/local/server/php/bin ,将这个目录记下。 3、找到要运行的php文件所在的目录,随便写点php代码就可以,/usr/...
  • linux获取文件大小
  • 不能执行二进制文件,而指令没有报错;执行文件的用户权限也是最高权限(如上图,root用户);使用ls -l查看,这是可执行文件;那会不会是环境问题呢?我不知道,但这是需要头号解决的问题。如果不是环境问题的话,...
  • Linux下ELF文件类型分为以下几种: 1、可重定位文件,例如SimpleSection.o; 2、可执行文件,例如/bin/bash; 3、共享目标文件,例如/lib/libc.so。 在Linux 可重定位文件 ELF结构一文中,我们已经分析了可重...
1 2 3 4 5 ... 20
收藏数 1,724,860
精华内容 689,944
关键字:

linux 文件不能执行