精华内容
下载资源
问答
  • 二进制文件如何执行
    千次阅读
    2021-05-09 03:13:13

    当你在unix下拿到一个二进制文件但不知道它是什么的时候,可以通过以下方法得到一此提示

    1、 最首先应该尝试strings命令,比如拿到一个叫cr1的二进制文件,可以:

    $ strings cr1 | more

    里面可能会有一些对于这个cr1的描述,这些信息都是编译之后在程序中留下的一些文本性的说明,所以可能会告诉你这个文件是什么.

    比如有输出:

    $ strings cr1 | more

    %s %s %s%s%s -> %s%s%s (%.*s)

    Version: 2.3

    Usage: dsniff [-cdmn] [-i interface] [-s snaplen] [-f services]

    [-t trigger[,...]] [-r|-w savefile] [expression]

    ...

    /usr/local/lib/dsniff.magic

    /usr/local/lib/dsniff.services

    ...

    那么我们就可以知道,其实 cr1就是dsniff命令.

    2、 如果这样的方法没有帮助你的话,那么你可以尝试:

    $ /usr/ccs/bin/nm -p cr1 | more

    比如说得到如下输出:

    cr1:

    [Index] Value Size Type Bind Other Shndx Name

    [180] |0 | 0| FILE | LOCL | 0 |ABS | decode_smtp.c

    [2198] |160348| 320| FUNC | GLOB | 0 | 9 | decode_sniffer

    这些都是生成这个二进制文件的obj文件的文件名称,这些名称会告诉你这个二进制文件的作用的.

    同样,如果希望查看二进制文件调用到的静态库文件都有哪些的话,可以使用nm -Du cr1来实现.

    3、 当然我们也可以通过使用dump命令来得到任何一个二进制文件的选定部分信息

    $ /usr/ccs/bin/dump -c ./cr1 | more

    dump命令的参数说明:

    -c Dump出字符串表

    -C Dump出C++符号表

    -D Dump出调试信息

    -f Dump出每个文件的头

    -h Dump出section的头

    -l Dump出行号信息

    -L Dump出动态与静态链接库部分内容

    -o Dump出每个程序的可执行头

    -r Dump出重定位信息

    -s 用十六进制信息Dump出section的内容

    -t Dump符号表.

    4、 可以使用file命令得到二进制文件的信息

    $ file cr1

    5、 如果还是不清楚的话,那么我们可以使用ldd命令

    $ ldd cr1

    比如说输出为:

    ...

    libsocket.so.1 => /usr/lib/libsocket.so.1

    librpcsvc.so.1 => /usr/lib/librpcsvc.so.1

    ...

    那么我们就可以知道这个程序与网络库相关,我们就可以知道它的大概功能了.

    我们也可以能过adb命令来得到一个二进制文件的执行过程.

    比如说:

    $ adb cr1

    :r

    Using device /dev/hme0 (promiscuous mode)

    192.168.2.119 -> web TCP D=22 S=1111 Ack=2013255208

    Seq=1407308568 Len=0 Win=17520

    web -> 192.168.2.119 TCP D=1111 S=22 Push Ack=1407308568

    我们知道这个程序是一个sniffer.

    6、 如果你确定要运行这个程序的话,你可以先通过:

    $ truss -f -o cr。out ./cr1

    listening on hme0

    ^C

    $

    truss命令可以帮你打开系统的信号与调用输出.你就可以知道这个程序到底干了什么.

    有了上面这些工具的话,我们就可以大概了解到一个未知的二进制程序到底是干什么的.

    最后提示大家,运行不了解的二进制程序有严重的安全问题,请大家小心.

    更多相关内容
  • minio 二进制执行文件
  • 主要介绍了Linux bash:./xxx:无法执行二进制文件报错,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 本文较为详细的分析了C#读取二进制文件方法。分享给大家供大家参考。具体分析如下: 当想到所有文件都转换为 XML时,确实是一件好事。但是,这并非事实。仍旧还有大量的文件格式不是XML,甚至也不是ASCII。二进制...
  • main2.cpp 生成1个二进制文件。 main3.c 读取二进制文件。 用fgets可以读取指定长度的字符串。 可用于读取格式化固定位址的二进制结构数据。
  • 二进制文件不是以ASCII代码存放数据的,它将内存中数据存储形式不加转换地传送到磁盘文件,因此它又称为内存数据的映像文件。因为文件中的信息不是字符数据,而是字节中的二进制形式的信息,因此它又称为字节文件。 ...
  • minio 的二进制执行文件,适用于linux系统,加权限带参数执行即可
  • :warning_selector: 该脚本仅可在Termux中使用,不能在任何GnuLinux发行版中使用(可能在freeBSD中使用,因为它使用了名为pkg的二进制文件...大声笑,未经测试),因为它使用pkg二进制文件而不是apt来安装二进制...
  • 总的感觉,python本身并没有对二进制进行支持,不过提供了一个模块来弥补,就是struct模块。 python没有二进制类型,但可以存储二进制类型的数据,就是用string字符串类型来存储二进制数据,这也没关系,因为string...
  • 二进制文件存储方式比较方便,文本小,保密效果好 定义一个数据结构并实现相关操作 使用QDataStream进行读写操做 数据结构 #include struct AccountInfo { // 数据 QString Account; QString LogPasswd; // 初始...
  • 主要介绍了python读写二进制文件的方法,实例分析了Python读写二进制文件的相关技巧,需要的朋友可以参考下
  • 将任意指定的文件,以二进制的方式,指定区间进行切割。 可以将HTTP的请求图片、视频导出 可以去除文本文件BOM头 可以提取文件中间的乱码字节
  • C++二进制文件读写

    2018-04-09 22:50:55
    C/C++实现简单的二进制文件读取和写入示例 1.包含如何读取和写入数字,以及用缓存按字节读取 2.采用标准输入和输出函数创建、打开、关闭文本文件或二进制文件
  • 众所周知,go语言可打包成目标平台二进制文件是其一大优势,如此go项目在服务器不需要配置go环境和依赖就可跑起来。 操作 需求:打包部署到centos7 笔者打包环境:mac os 方法:进入main.go所在目录,输入如下命令,...
  • 这是一个将ruby脚本转换成二进制执行文件的工具,使用简单方便,功能强大,解压编译后生成rubyc可执行程序!转换ruby脚本时 使用rubyc 脚本.rb即可,可以自动检测依赖关系!使用非常方便!
  • Linux下查看二进制文件命令

    千次阅读 2021-05-09 03:13:34
    一、在Linux下查看二进制文件的软件:xxdhexdump二、编辑:1、biew2、hexedit3、vimVim 来编辑二进制文件。Vim 本非为此而设计的,因而有若干局限。但你能读取一个文件,改动一个字符,然后把它存盘。结果是你的文件...

    一、在Linux下查看二进制文件的软件:

    xxd

    hexdump

    二、编辑:

    1、biew

    2、hexedit

    3、vim

    Vim 来编辑二进制文件。Vim 本非为此而设计的,因而有若干局限。但你能读

    取一个文件,改动一个字符,然后把它存盘。结果是你的文件就只有那一个字符给改了,

    其它的就跟原来那个一模一样。

    要保证 Vim 别把它那些聪明的窍门用错地方,启动 Vim 时加上 "-b" 参数:

    vim -b datafile

    这个参数设定了 'binary' 选项。其作用是排除所有的意外副作用。例如,'textwidth'

    设为零,免得文本行给擅自排版了。并且,文件一律以 Unix 文件格式读取。

    二进制模式可以用来修改某程序的消息报文。小心别插入或删除任何字符,那会让程序运

    行出问题。用 "R" 命令进入替换模式。

    文件里的很多字符都是不可显示的。用 Hex 格式来显示它们的值:

    :set display=uhex

    另外,也可以用命令 "ga"  来显示光标下的字符值。当光标位于一个  字符上时,

    该命令的输出看起来就像这样:

    27, Hex 1b,  Octal 033

    文件中也许没那么多换行符。你可以关闭 'wrap' 选项来获得总览的效果:

    :set nowrap

    字 节 位 置

    要发现你在文件中的当前字节位置,请用这个命令:

    g CTRL-G

    其输出十分冗长:

    Col 9-16 of 9-16; Line 277 of 330; Word 1806 of 2058; Byte 10580 of 12206

    最后两个数字就是文件中的当前字节位置和文件字节总数。这已经考虑了 'fileformat'

    选项导致换行符字节不同的影响。

    要移到文件中某个指定的字节,请用 "go" 命令。例如,要移到字节 2345:

    2345go

    使 用 XXD

    一个真正的二进制编辑器用两种方式来显示文本: 二进制和十六进制格式。你可以在 Vim

    里通过转换程序 "xxd" 来达到这效果。该程序是随 Vim 一起发布的。

    首先以二进制方式编辑这个文件:

    vim -b datafile

    现在用 xxd 把这个文件转换成十六进制:

    :%!xxd

    文本看起来像这样:

    0000000: 1f8b 0808 39d7 173b 0203 7474 002b 4e49  ....9..;..tt.+NI

    0000010: 4b2c 8660 eb9c ecac c462 eb94 345e 2e30  K,.`.....b..4^.0

    0000020: 373b 2731 0b22 0ca6 c1a2 d669 1035 39d9  7;'1.".....i.59.

    现在你可以随心所欲地阅读和编辑这些文本了。 Vim 把这些信息当作普通文本来对待。

    修改了十六进制部分并不导致可显示字符部分的改变,反之亦然。

    最后,用下面的命令把它转换回来:

    :%!xxd -r

    只有十六进制部分的修改才会被采用。右边可显示文本部分的修改忽略不计。

    linux 下查看二进制文件

    查看二进制有以下几种方法: 方法一:hexdump apt-get install libdata-hexdumper-perl 安装好之后就可以直接hexdump your_binary_file ...

    linux下查看进程命令

    他们都是用来显示当前运行的进程,但是: ps -aux 是用BSD的格式来显示python这个进程显示的项目有:USER , PID , %CPU , %MEM , VSZ , RSS , TTY , ...

    Linux下查看某个命令的参数

    1.一般每个命令都带有help参数,使用方法如下: shutdown --help 提示:shutdown为关机命令,在真实环境使用时需要root权限,比如前面加sudo. 2.使用man命令查看,使 ...

    linux下的二进制文件的编辑和查看

    linux下的二进制文件的编辑和查看 http://blog.csdn.net/wangxiaoqin00007/article/details/6618003 一.在Linux下查看二进制文件的软件 ...

    Linux下查看USB设备的VID、PID命令

    Linux下查看PID命令 cat /proc/bus/usb/devices 或 lsusb 方法一:在/etc/init.d/rcS中添加mount -t usbfs none /proc/bus ...

    linux下查看进程占用端口和端口占用进程命令

    Linux下查看进程占用端口: 查看程序对应进程号:ps –ef|grep 进程名 REDHAT :查看进程号所占用的端口号:netstat –nltp|grep 进程号 ubuntu:查看进程占用端 ...

    linux下查看内存的命令

    top能显示系统内存.我们常用的Linux下查看内容的专用工具是free命令. 下面是对内存查看free命令输出内容的解释: total:总计物理内存的大小. used:已使用多大. free:可用有 ...

    linux下查看当前用户的 三个命令

    linux下查看当前用户的 三个命令 1,whoami; 2,id -un; 3,who -H  可以列出当前所有的    NAME (用户名)    LINE (窗口列表)    TIME(开启时间 ...

    Linux下查看内核、CPU、内存及各组件版本的命令和方法

    Linux下查看内核.CPU.内存及各组件版本的命令和方法 Linux查看内核版本: uname -a                        more /etc/*release       ...

    随机推荐

    httpclient介绍

    前言 超文本传输协议(HTTP)也许是当今互联网上使用的最重要的协议了.Web服务,有网络功能的设备和网络计算的发展,都持续扩展了HTTP协议的角色,超越了用户使用的Web浏览器范畴,同时,也增加了需 ...

    B - Kefa and Company

    B - Kefa and Company Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I6 ...

    MyEclipse_6.0.1GA_E3.3.1集成版下载地址

    因在开发中经常使用到myeclipse 对比相关版本,还是觉得6.0 –6.5 比较适合开发,其他的开发起来比较卡,下面是下载地址 MyEclipse_6.0.1GA_E3.3.1集成版下载地址:   ...

    转:web_custom_request 和 web_submit_data的差别

    web_custom_request方法可以发送POST和GET类型的请求 web_submit_data只能发送POST类型的请求 所有web_submit_data方法发送的请求都可以使用web_ ...

    Visual Studio 2017正式版安装

    Visual Studio号称宇宙第一IDE, 2017年3月7日强大的微软帝国时隔两年多终于发布新一代IDE Visual Studio 2017.支持的功能简直不能太多,详情移步:https:// ...

    两种实现方式mycat多租户,枚举分片,注解拦截

    第一种: 优点:支持进一步分片 缺点:schema配置繁琐 注解式  /*!mycat:schema=[schemaName] */   注意:这在navicat 里面是会报错的,请用命令行登陆myc ...

    移除list中null元素

    查询结果为null, list.size()却是1 移除该null元素 totalList.removeAll(Collections.singleton(null));

    JSOI2010 缓存交换

    题目链接:戳我 考虑一个贪心--就是每次我们都选择队列里面之后最晚加入的元素弹出. 维护一个nxt数组就行了. 特判一下之后不会再加入的元素. 代码如下: #include

    sql server 2008分页

    SELECT id, name, staffopenid, imageurl, content, ordernum, praisenum, createdate, lable, label2, man ...

    展开全文
  • 主要介绍了Python读取二进制文件代码方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • Tcpdump 4.4.0 版本,解压后是一个二进制执行文件,可以直接执行,不需要安装,不需要编译,不需要依赖。
  • 本篇文章主要介绍了java实现解析二进制文件的方法(字符串、图片),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 将任何二进制文件转换为 C 源代码的简单实用程序,可以稍后编译并链接到可执行文件 bin2o 将任何二进制文件转换为 *.o 的简单脚本,它可以直接与其他目标文件链接到最终的可执行文件。 它还创建了适当的头文件 要求...
  • linux下二进制执行文件分析

    千次阅读 2020-11-29 14:24:58
    一 背景也许大家都遇到过这种场景,就是有二进制代码,比如深度分析下此文件到底是什么格式的图片等,这篇文章就记录我分析下二进制可执行文件的过程,已经自己读写二进制文件的一些坑。分析的二进...

    一  背景

    也许大家都遇到过这种场景,就是有二进制代码,比如深度分析下此文件到底是什么格式的图片等,这篇文章就记录我分析下二进制可执行文件的过程,已经自己读写二进制文件的一些坑。分析的二进制执行文件为linux下的可执行文件。

    二  常用二进制文件静态分析命令

    2.1 file基本信息查看

    linux下有个最常用的通用命令,来分析任何文件的基本格式,那就是file  ,来看下:

    可以看到基本信息,比如是什么类型文件,只是概述,还有些其他选项,可以用-h 查看。

    2.2 ldd动态链接库信息

    动态链接库,即没有在编译链接的时候直接打入到程序中的,而是运行时候动态加载了,从而节省内存,通过动态链接库,我们可以知道这个可执行文件用了哪些动态库,方法也比较简单。这是我写的一个小程序的动态链接库信息,通过链接库分析的信息也同样比较少,用这个命令多查看依赖链接库找不到的问题。

    2.3 nm符号查看

    nm可以列出二进制可执行文件,动态库,静态库中的符号信息,包括符号的类型,符号名称,比如函数名,全局变量等,通过这些信息可以看到不少有用的信息,通过函数名猜函数功能,使用的帮助如下:

    配合grep信息可以很方便的进行符号搜索:

    对于一些动态库,直接nm可能查不到信息,可以通过nm -D命令查看。

    2.4 strings 查看二进制文件中的字符串

    strings信息可以打印二进制文件中的字符串信息,结合grep进行搜索,用grep命令其实可以直接在二进制文件中搜索内容,但是不够直观,用strings看起来的更直观些:strings 会把任何可打印字符串都显示出来,比nm的内容更多,截取部分如下:

    2.5 objdump 将二进制代码转汇编指令

    objdump是个值得深入学习的指令,不光可以还原汇编指令,还可以读取二进制中特定段的信息,更可怕的是,如果我们的程序是以-g -o0等调试不优化的情况下,用objdump -S指令可能尽可能地还原源代码信息(没看错,是还原出源代码信息),其实也可以理解这些信息是完整的在可执行文件中的,要不然gdb调试的时候没办法单步追踪了,测试如下:

    2.6 readelf 读取ELF文件格式

    如果二进制文件是ELF格式的,通过file文件可以查看文件格式.使用readelf指令可以方便分析ELF文件的结构,比如节信息,elf头文件信息,比如我们在分析文件是否为病毒文件的时候,需要读取elf文件头信息,做一些特征的判断,或作为特征参与机器学习的判断。

    readelf读取文件头

    还有些其他命令,有兴趣的小伙伴,可以通过-h命令还原看下。

    三 动态查看文件结构

    3.1 ltrace 跟踪进程调用库函数过程

    这也是一个很棒的命令,我们可以查看程序执行的时候调用库函数信息,还可以在线查看执行的进程的库函数调用情况,找几个比较典型的命令,测试的代码比较简单如下:

    #include <stdlib.h>
    #include <stdio.h>
    
    
    
    int main(void)
    {
       short shs[5] ={1,234,567,789,890};
       int   ins[5] ={890,88111,23333,7777,6666};
       FILE * fp = fopen("a.bin","wb");
       for (int i = 0; i < 5; i++) {
           fwrite(&shs[i],sizeof(short),1,fp);
           fwrite(&ins[i],sizeof(int),1,fp);
       }
       printf("read....\n");
       fclose(fp);
       fp = fopen("a.bin","rb");
       short a;
       int b;
      for (int i = 0; i <5;i++) {
         fread(&a,sizeof(short),1,fp);
         fread(&b,sizeof(int),1,fp);
         printf("i:%d a:%d,b:%d\n", i,a,b);
      }
       fclose(fp);
      return 0;
    }
    
    

    3.1.1 ltrace 查看库函数调用情况

    ltrace 查看库函数调用情况

    3.1.2 ltrace 查看库函数调用占用时间

    这在查看系统调用耗时很有用。

    # -T 是查看调用时间开销
    ltrace -T
    #-t -tt -ttt 是查看调用绝对时间,t越多越精确
    ltrace -t
    
    ltrace 查看绝对时间

    3.1.3 ltrace 查看系统调用信息

    ltrace -S
    

    系统调用信息显然比库函数显示更多,追踪更复杂的情况可以使用。

    还有-p pid 追踪具体的进行id的调用情况也很有用,这里面就不举例子了。如果没有这个命令,如果是centos环境可以通过yum install -y ltrace安装。

    3.2 strace

    strace和ltrace的命令差不多,strace更偏向于系统调用的追踪或信号产生的情况。安装命令yum -y install strace强大地方在于可以指定系统调用的类型:

    -e trace=set 
    只跟踪指定的系统 调用.例如:-e trace=open,close,rean,write表示只跟踪这四个系统调用.默认的为set=all. 
    -e trace=file 
    只跟踪有关文件操作的系统调用. 
    -e trace=process 
    只跟踪有关进程控制的系统调用. 
    -e trace=network 
    跟踪与网络有关的所有系统调用. 
    -e strace=signal 
    跟踪所有与系统信号有关的 系统调用 
    -e trace=ipc 
    跟踪所有与进程通讯有关的系统调用 
    -e abbrev=set 
    设定 strace输出的系统调用的结果集.-v 等与 abbrev=none.默认为abbrev=all. 
    -e raw=set 
    将指 定的系统调用的参数以十六进制显示. 
    -e signal=set 
    指定跟踪的系统信号.默认为all.如 signal=!SIGIO(或者signal=!io),表示不跟踪SIGIO信号. 
    -e read=set 
    输出从指定文件中读出 的数据.例如: 
    -e read=3,5 
    -e write=set 
    

    比如以下命令:

    还有很多有用的选项,有兴趣的可以尝试下。

    3.3 GDB命令

    gdb命令其实是我们最常用的,调试程序的利器,用来查看二进制文件的结构,非常合适,可以把程序运行起来通过gdb -p pid方便地调试。也可如下运行:基本命令说明下:

    set args 设置参数
    b main 设置中断位置为main函数
    r 开始运行
    l 打印当前的函数内容
    p 打印变量值
    

    四 图形化界面分析二进制执行文件

    网上找到一个图形化界面分析二进制程序的,名字叫Relyze 虽然是收费的,但是可以正常用一段时间,一段时间后才提示,界面如下,强大之处在于可以显示调用关系信息等。其实原理都类似,没有比命令行更多的功能,只是看起来更方便而已。

    4.1 基本文件信息

    可执行文件基本信息

    4.2 头和段信息查看

    头和段信息

    4.3 搜索

    字符信息搜索

    4.4 调用关系图

    双击可以看到调用关系图信息,便于做进一步分析。

    其他的也没啥特殊点了,有兴趣的朋友可以下载试试。

    五 诗词欣赏

    浣溪沙
    [宋] [秦观]
    
    漠漠轻寒上小楼,晓阴无赖似穷秋,淡烟流水画屏幽。
    自在飞花轻似梦,无边丝雨细如愁,宝帘闲挂小银钩。
    
    
    展开全文
  • linux下运行二进制文件

    千次阅读 2022-07-24 09:51:42
    对于前后端完全分离的项目来说,都需要分别打包运行,前端文件就需要打包成二进制文件或者是在windows环境下的.exe文件。在linux下,首先来说需要注意的是要进行更改文件权限的操作使用...执行二进制文件直接用。...
  • 安卓可用的ethtool 二进制文件,里面包含了各个平台的版本,具体ethtool的使用请参照相关说明使用。
  • 用来读取二进制文件和写入二进制文件的函数
  • 指定文本、或二进制文件、指定发送目标端口和目标IP、将文件内容以UDP数据包的形式发送出。 开发中测试推送二进制报文非常简单
  • 二进制文件大小端转换工具,单独工具;二进制文件大小端转换工具,单独工具;二进制文件大小端转换工具,单独工具
  • C++ 学习之文件操作-二进制文件

    千次阅读 2021-10-04 12:32:59
    以二进制的方式对文件进行读写操作 打开方式要指定为 ios::binary 1、写文件 二进制方式写文件主要利用流对象调用成员函数write 函数原型 :ostream& write(const char * buffer,int...//写二进制文件 class person
  • 具有三种搜索功能。 - 使用十六进制搜索字节 - 搜索纯文本字符串 - 搜索较小的二进制文件

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,234,418
精华内容 493,767
关键字:

二进制文件如何执行