二进制基础

news2024/11/29 9:36:09

最近开始入坑系统安全大坑,调转方向开始了解pwn,那就要补一些那少得可怜的底层基础啦

  • 先学几个单词:
    • exploit:用于攻击的脚本与方案
    • payload:攻击载荷,是目标进程被劫持控制流的数据(精心构造的恶意数据,目标进程执行后就会触发这个漏洞)
    • shellcode:调用攻击目标的shell的代码
  • 还有一些工具
    在这里插入图片描述

linux下的C语言编译

C语言在pwn里面有着举足轻重的地位,C往往是计算机科班学习的第一门语言(自学的就看自己啦哈哈),C上可写高级语言,下可操作硬件,同时在pwn中有40%的漏洞是由C/C++编写的,是非常重要的一部分。

命令观察

在kali的命令行中,如图进行测试实验
在这里插入图片描述
通过vim创建并编写C语言文件,gcc进行编译,之后可以看到生成了a.out文件,这就是linux里面的可执行文件了。后面要执行的时候注意要用"./a.out",直接写“a.out”的话会被当成命令而显示未找到命令

可以加上‘-o’参数指定输出文件名:
在这里插入图片描述
拿到pwn先运行,看看他是干啥的,再去反编译等内容

打印一下二进制程序:
在这里插入图片描述
这实际就是可执行文件了
再查看一下他的格式
在这里插入图片描述

显示是ELF,64位,小端序(LSB)的,是linux下的可执行文件的格式。

linux提供了读ELF文件的命令:readelf
可以用:readelf -a filename | less
在这里插入图片描述
里面也会记录所用到的一些函数
在这里插入图片描述

  • nm可以查看运行的一些过程,可以看有哪些符号表,用到了哪些函数
    在这里插入图片描述
  • hexdump可以查看其十六进制
    hexdump question_1_x64 | less
    在这里插入图片描述
  • ldd:查看里面用到的库函数的位置
    在这里插入图片描述
    file可以看到用了哪个链接器,但是ldd可以把用到的东西全部显示出来
    如:下面路径下就会有一个libc.so.6
    在这里插入图片描述
  • objdump:可以将程序反编译成汇编指令
    命令:objdump -d filename | less
    在这里插入图片描述
    这是APT模式下的汇编指令,要是想看Intel的汇编指令,可以加参数-M intel:objdump -d -M intel filename | less
    在这里插入图片描述

编译过程

gcc命令可以对C语言文件进行编译,但实际上这条命令为我们隐藏了很多中间过程,具体过程如下图所示
编译过程

  1. 首先要进行一个预处理,不过这对pwn来说不用太关心,这之后就会得到预处理过后的C语言代码
  2. 编译:C语言代码经过汇编转化为汇编代码(此时起作用的是一个汇编器),此时还是给程序员看的汇编代码,而不是给机器看的机器代码(机器只能读懂机器码)
  3. 汇编:由汇编代码生成机器码,之后生成的就是ELF文件了(此时这个文件就已经是个目标文件而且保存的是机器码,但是此时还并不是一个可执行文件,还需要进行链接,因为当前她只包含了C语言代码中自己写的那部分文本,其调用的功能是由系统中的链接库实现的,需要链接)
  4. 链接:将编译后的文件链接成可执行文件

在这里插入图片描述

可执行文件

概念

  • 狭义:CPU可以对文件中的数据读取并解析执行,即问津中的数据是机器码的文件
    • .out .exe .dll .so
  • 广义:文件中的数据是可执行代码的文件
    • .out .exe .sh .py

一些命令

  • file ldd nm hexdump
  • objdump -d -M intel
  • readelf -a
  • gdb
  • socat tcp-l:8888,fork exec:./a.out,reuseaddr

其中较常用的是file、ldd,比较重要的是gdb

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1159891.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python画图之HelloKitty

Python-turtle画出HelloKitty(有趣小游戏) 一、效果图二、安装库1.常用镜像源2.库下载 三、Python代码 一、效果图 二、安装库 1.常用镜像源 1. 豆瓣http://pypi.douban.com/simple/ 2. 清华大学:https://pypi.tuna.tsinghua.edu.cn/simple…

智能视频监控平台EasyCVR出现偶发通道在线,但是无法播放的情况要怎么解决?

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同,支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。流媒体视频平台EasyCVR拓展性强,视频能力丰富,具体可实现视频监控直播、视频轮播、视频录像、云存储…

Scrum of Scrums大规模敏捷管理流程

​​​​​​​Leangoo领歌​​​​​​​是一款永久免费的专业的敏捷开发管理工具,提供端到端敏捷研发管理解决方案,涵盖敏捷需求管理、任务协同、进展跟踪、统计度量等。 Leangoo领歌上手快、实施成本低,可帮助企业快速落地敏捷&#xff0c…

Linux学习之进程二

目录 进程状态 R (running)运行状态与s休眠状态: disk sleep(深度睡眠状态) T (stopped)(暂停状态) t----tracing stop(追踪状态) X死亡状态(dead) Z(zombie)-僵尸进程 孤儿进程 进程优…

Android问题

这里面要加入 ,加入前是点击待君登录直接跳回手机主界面了 加入上述代码即可 Android之Inflate() Inflate()作用就是将xml定义的一个布局找出来,但仅仅是找出来而且隐藏的,没有找到的同时并显示功能。 android上还有一个与Inflate()类似功能的…

【AI视野·今日CV 计算机视觉论文速览 第274期】Tue, 24 Oct 2023

AI视野今日CS.CV 计算机视觉论文速览 Tue, 24 Oct 2023 Totally 138 papers 👉上期速览✈更多精彩请移步主页 Interesting: 📚Wonder3D, 基于交叉扩散模型的单图像三维形状生成。(from 香港大学) website:https://www.xxlong.site/Wonder3D/ Daily Co…

Flutter 04 按钮Button和事件处理、弹框Dialog、Toast

一、按钮组件 1、按钮类型: 2、按钮实现效果: import package:flutter/material.dart;void main() {runApp(const MyApp()); }class MyApp extends StatelessWidget {const MyApp({Key? key}) : super(key: key);overrideWidget build(BuildContext co…

X64(64位)汇编指令与机器码转换原理

X64(64位)汇编指令与机器码转换原理 1 64位寻址形式下的ModR/M字节1.1 寻址方式1.2 寄存器编号 2 汇编指令转机器码2.1 mov rcx, 1122334455667788h2.2 mov rcx,[r8]与mov [r8],rcx2.3 mov rcx,[r8r9*2] 本文属于《 X86指令基础系列教程》之一&#xff…

重温云栖,分享十年成长:我和云栖的故事

文章目录 前言活动背景我和云栖的交际历届峰会主题2009201020112012201320142015201620172018202120222023 技术带来的变化工作生活关注的领域 后记 前言 云栖大会,前身可追溯到2009年的地方网站峰会,2011年演变为阿里云开发者大会,2015年正式…

python线程(进程子单位)

进程是由CPU给分配的执行单元,比较消耗空间和内存 创建、使用线程 import threading# 进程 # 线程 from time import sleepdef download():list1 ["girl.png", "boy.png", "child.png"]for l in list1:print(l)sleep(1.5)print(&qu…

ThinkPad T14 2023评测|thinkpad t14 gen4

一、购买地址 我在淘宝、京东、联想商城、苏宁易购都看了看,最终确定了在抖音官方商城买电脑,主要是价格低,足足少了四百,还送了一个电脑包和一个鼠标。 二、硬件信息 2.1 内存 这个运行内存比较有意思,我还是第一次买…

前端JavaScript

文章目录 一、JavaScript概述JS简介1.ECMAScript和JavaScript的关系2.ECMAScript的历史3.什么是javas?4.JavaScript的作用? 三者之间的作用JS基础1.注释语法2.引入js的多种方式3.结束符号 变量与常量变量1.JavaScript声明2.var与let的区别常量 基本数据类…

【Linux进程】再谈软件—操作系统(Operator System)

目录 操作系统(Operator System) 概念 设计OS的目的 如何理解 "管理"——先描述再组织 系统调用和库函数概念 总结 操作系统(Operator System) 概念 任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。 笼统的理解,操作系统…

206. 反转链表、Leetcode的Python实现

博客主页:🏆看看是李XX还是李歘歘 🏆 🌺每天分享一些包括但不限于计算机基础、算法等相关的知识点🌺 💗点关注不迷路,总有一些📖知识点📖是你想要的💗 ⛽️今…

Springboot+shiro,完整教程,带你学会shiro

您的第一个 Apache Shiro 应用程序 引入依赖&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLoc…

一文深入了解 CPU 的型号、代际架构与微架构

在 10 月 16 号的时候&#xff0c;Intel 正式发布了第 14 代的酷睿处理器。但还有很多同学看不懂这种发布会上发布的各种 CPU 参数。借着这个时机&#xff0c;给大家深入地讲讲 CPU 的型号规则、代际架构与微架构方面的知识。 CPU 在整个计算机硬件中、技术体系中都算是最最重…

关于pytorch张量维度转换及张量运算

关于pytorch张量维度转换大全 1 tensor.view()2 tensor.reshape()3 tensor.squeeze()和tensor.unsqueeze()3.1 tensor.squeeze() 降维3.2 tensor.unsqueeze(idx)升维 4 tensor.permute()5 torch.cat([a,b],dim)6 torch.stack()7 torch.chunk()和torch.split()8 与tensor相乘运算…

嵌入式Linux系统的闪存设备和文件系统学习纪要

嵌入式Linux系统的闪存设备和文件系统学习纪要 Linux下的文件系统结构如下&#xff1a; NAND Flash 是一种非易失性存储器&#xff08;Non-Volatile Memory&#xff09;&#xff0c;常用于闪存设备和固态硬盘&#xff08;SSD&#xff09;中。以下是几种常见的 NAND Flash 种类&…

234. 回文链表、Leetcode的Python实现

博客主页&#xff1a;&#x1f3c6;看看是李XX还是李歘歘 &#x1f3c6; &#x1f33a;每天分享一些包括但不限于计算机基础、算法等相关的知识点&#x1f33a; &#x1f497;点关注不迷路&#xff0c;总有一些&#x1f4d6;知识点&#x1f4d6;是你想要的&#x1f497; ⛽️今…

iptables 与 firewalld

iptables 一、主机型&#xff08;包过滤防火墙&#xff09; 1、简介&#xff1a; 包过滤型防火墙是一种网络安全设备或软件&#xff0c;它工作在 2、3、4 层&#xff0c;通过检查网络数据包的源地址、目标地址、协议、端口等信息&#xff0c;根据预定义的规则来决定是否允许…