网络安全实验室第八周学习内容

一.字长和端序

1.字

字是表示计算机自然数据单位的术语,在某个特定计算机中,字是其用来一次性处理事务的一个固定长度的位(bit)组,在现代计算机中,一个字等于两个字节(Byte)等于8位(bit)。

2.字长

机器字长:是指CPU 一次能处理的数据的位数,通常与CPU的寄存器位数有关。

指令字长:计算机指令字的位数。指令字长取决于从操作码的长度、操作数地址的长度和操作数地址的个数。不同的指令的字长是不同的。

储存字长:是一个存储单元存储一串二进制代码(存储字),这串二进制代码的位数称为存储字长。

数据字长:计算机数据存储所占的位数。

3.断序

大端:数据的高字节储存在内存的低地址中,低字节储存在内存的高地址中。

小端:数据的低字节储存在内存的低地址中,高字节储存在内存的高地址中。

2. 初步了解x86架构

冯·诺依曼结构:
是一种计算机体系结构,也被称为冯·诺依曼体系结构。它是现代计算机体系结构的基础,由冯·诺依曼(John von Neumann)于1945年提出。冯·诺依曼结构以其简洁、通用和灵活的特性成为计算机设计的基石。

冯·诺依曼结构的核心思想是将程序指令和数据存储在同一块存储器中,并通过共享的总线进行读取和写入操作。以下是一个生动形象的例子,说明冯·诺依曼结构的核心概念:

想象你有一个非常简单的计算机,它由以下几个组件组成:

1.存储器(Memory):这是一个大的存储空间,用于存储程序指令和数据。所有的指令和数据都以二进制形式存储在存储器中,并通过地址进行访问。
2.中央处理器(Central Processing Unit,CPU):CPU 是计算机的核心部件,它负责执行指令和处理数据。CPU 包括算术逻辑单元(ALU)和控制单元(Control Unit),用于执行算术和逻辑运算以及控制程序的执行。
3.输入设备(Input Device):例如键盘和鼠标等用于输入数据和指令的设备。
4.输出设备(Output Device):例如显示器和打印机等用于输出结果的设备。
现在,我们来看一个具体的例子,假设你想编写一个简单的程序来计算两个数字的和:

首先,你会用键盘输入两个数字,并将这些输入数据存储在内存中的指定位置。
接下来,你的程序会通过 CPU 的控制单元,从存储器中读取指令。这些指令告诉 CPU 如何执行加法运算。
CPU 的算术逻辑单元(ALU)会从存储器中读取输入数据,并进行加法运算。


寄存器:

 STM32中的寄存器是一种内部存储器,用于存储和操作芯片的各种状态和控制信息。这些寄存器通常由硬件实现,并且在芯片启动时就已经被初始化。开发者可以使用编程语言或者专用的编译器来访问这些寄存器,从而实现对芯片的控制和配置。

        在STM32中,每个寄存器通常有一个唯一的名称和一个固定的内存地址,用于访问该寄存器的值。这些寄存器被分为不同的类型,包括控制寄存器(CR)、状态寄存器(SR)、数据寄存器(DR)等。

        控制寄存器用于控制芯片的各种功能和模式,例如时钟控制、GPIO模式设置、外设模块使能等。状态寄存器用于存储芯片的各种状态信息,例如外设状态、中断状态、错误状态等。数据寄存器用于存储芯片的各种数据,例如ADC采样结果、UART传输数据、定时器计数器值等。

        在编程过程中,开发者需要了解各个寄存器的具体作用和使用方法,从而实现对芯片的控制和操作。同时,由于寄存器对芯片的性能和功耗等方面都有影响,因此开发者需要根据具体的应用场景和需求,合理地配置和使用这些寄存器,以达到最优的性能和功耗表现。


堆:

堆(heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象,即是一种顺序储存结构的完全二叉树
 

 栈:
存储货物或供旅客住宿的地方,可引申为仓库、中转站,所以引入到计算机领域里,就是指数据暂时存储的地方,所以才有进栈、出栈的说法。

  栈是限制插入和删除只能在一个位置上进行的线性表。

线性表概念见:简单概括什么是线性结构和非线性结构_iamxiaobai_的博客-CSDN博客

这里的“只能在一个位置上进行插入和删除”指的是栈顶,栈顶是会随着栈里面的数据元素的多少变化的,是动态变化的,一直指向栈的最上面一个数据元素。

既然有栈顶,那么就会有栈底,栈底的元素是不允许直接插入和删除的。
 

三.完成BUUCTF,Reverse模块前三题

1.得到exe.文件,用ida64bit打开,如图:

发现有main函数,点击F5查看伪代码

 

得到flag 

2.使用ida64bit打开

 未发现主函数,直接shift+F12查看c语言代码

看到疑似字符串{hello_world},点击跟进 

 ctrl+x查看被引用到哪个函数中,f5查看伪代码

.分析此函数,得知是将字符串中的字母o改为数字0,若输入的字符串与刚刚转换后的字符串相同则输出该字符串

本题的flag应为{hell0_w0rld}

3. 

这个题目和reverse1可以说是一模一样,只不过是PE文件和ELF文件的区别:
这里给出解题步骤,解题具体过程就不给出了,可以到reverse1中看一下,两道题基本一模一样

拖到IDA Pro中,Shift+F12查找字符串,发现 this is the right flag!字段,直接看交叉引用
F5编译为反汇编代码
分析代码:将字符串中‘r’和’i‘换成了1

这里给出flag:flag{hack1ng_fo1_fun}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

为什么名字不能重复呢?

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值