从0开始和社畜师傅PWN_认识程序

        刚从第一章开始看,emmm总体来说就是先认识了解:file、ldd、nm、objdump等这些命令的使用,社畜师傅也说了,主要用到的还是file和ldd这两歌命令

        首先拿到一个PWN程序,可以先使用file命令来判断是32位还是64位。

        

l        dd结果分为三列,第一列:程序依赖库的名字;第二列:系统提供库的名字;第三列:库加载的开始地址。而在pwn中可以多次用ldd命令查看,来判断该程序是否提供了ASLR保护

        后面的话还看了一些汇编的命令

        机械码的16进制代表的就是汇编代码,然后汇编代码可以约等于c语言代码。

        还有gcc,我上网查了一些资料:

       

1.1 预处理(Pre-Processing)
        这个阶段主要处理源文件中的#indef、#include和#define预处理命令;
        这里主要是把一些include的头文件和一些宏定义,放到源文件中。

  • 输入的是C语言的源文件
  • 输出 :生成一个中间/预加载文件 *.i(以 .i 结尾的文件)
  • 这个阶段对应的gcc命令如下:
  • #gcc –E(预处理) test.c(源文件) -o test.i(将结果生成的文件)
  • 说明:它通过对源文件test.c使用E选项来生成中间文件test.i

1.2 汇编(Assembling)

  • 输入:中间文件*.i
  • 输出:编译后生成汇编编语言文件*.s
  • 这个阶段对应的gcc命令如下:
  • #gcc -S(汇编) test.i -o test.s(汇编编语言文件)
  • 说明:它通过对源文件test.c使用S选项来生成汇编文件test.s

1.3 编译(Compiling)

  • 输入文件:汇编文件*.s
  • 输出文件:二进制机器代码*.o
  • 这个阶段对应的gcc命令如下:
  • #gcc -c(编译) test.s -o test.o

* gcc -c
        在功能上,预处理、编译、汇编是3个不同的阶段
        但gcc在实际操作时可以把这3个步骤合并为一个步骤来执行,即使用 -c选项:

  • 输入文件:源码*.c文件
  • 输出文件:二进制机器代码*.o
  • 这个阶段对应的gcc命令如下:

        # gcc –c test.c -o test.o
        // -o指定了output_filename
        或 :
        #gcc -c test.c
        //省略-o output_filename
        //默认输出为test.o
        //与源文件同名,后缀为.o
1.4 链接(Linking)

  • 输入文件:二进制机器码*.o文件
  • 输出文件:与其它的机器代码和库文件汇集成一个可执行的二进制代码文件(无后缀)
  • 这个阶段对应的gcc命令如下:
  • #gcc (没有选项符号) test.o example.o -o test
  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值