汇编语言:第一讲

汇编语言第一讲:计算机的组织架构和汇编语言介绍 第一讲:计算机的组织架构和汇编语言介绍 阅读详情

前言:

  这学期选修了汇编语言,通过发表学习记录,希望可以帮助加深我的理解,扎实掌握汇编语言相关知识。这门课是网络安全攻防课程的基础,学校强调逆向工程方法。除此之外,我还希望可以深入学习到汇编程序的开发,落实一些编程方法,掌握一部分单片机的开发技巧。另外,本文不仅是课上的学习记录,也包含了补充和拓展。

参考书籍:

C++反汇编与逆向分析技术揭秘(第2版)

C++反汇编与逆向分析技术揭秘(第2版)-钱林松 张延清-微信读书 (qq.com)

《汇编语言》王爽

汇编语言-王爽-微信读书 (qq.com)

《深入理解计算机系统》

深入理解计算机系统(原书第3版) -兰德尔 E.布莱恩特 等-微信读书

目录

前言:

 备注:

 正文:

随堂笔记:

冯诺依曼计算机:

课堂实验:以静态方式逆向修改输出字符串

Linux部分:

Windows部分:

巩固拓展:

 备注:

Q:为什么学汇编?

A:

学会了汇编语言,就能够在CPU的寄存器上进行控制和操作,掌握直接对计算机硬件编程的方法,从而对计算机有更深刻的认识。对网络空间安全来说,与汇编直接相关的逆向工程是一个重要方向。

Q:汇编语言和高级语言的比较

A:

汇编语言与处理器密切相关,高级语言与具体计算机无关

汇编语言功能有限,涉及硬件细节,高级语言提供强大的功能,不必关系琐碎问题

汇编语言本质上就是机器语言,高级语言不针对具体计算机系统

Q:汇编语言的应用场合

A:

 关于课程:

1. 11次*3小节,星期一 第10-12节 (1-11周)

2. 平时成绩(50%):作业1次+签到4次

3. 期末作业(50%):简单逆向题目

4. 课程内容:6次汇编基础课程+逆向实战

 正文:

随堂笔记:

  

冯诺依曼计算机:

计算机的基本工作原理是存储程序和程序控制。

冯诺依曼计算机基本特点:

1>采用存储程序方式,即程序和数据放在同一个存储器中

2>存储器按地址访问

3>指令由操作码和地址码构成

4>机器以运算器为中心,输入/输出设备都要经过CPU和存储器

计算机由运算器、控制器、存储器、输入设备、输出设备五大部件构成。

机器字长:

是指该计算机能进行多少位二进制数的并行 运算,实际上是指该计算机中的运算器有多少位,通常计 算机的数据总线和寄存器的位数与机器字长一致。

运算器:

是对信息或数据进行处理和运算的部件,可以 实现各种算术运算和逻辑运算。

控制器:

主要用来实现计算机本身运行过程的自动化, 即实现程序的自动执行,是计算机的管理机构和指挥中心。

寄存器:

中央处理器内的组成部分。寄存器是有限存储 容量的高速存储部件,它们可用来暂存指令、数据等。

CPU:

每一个CPU芯片都有许多管脚,这些管脚和总线相连。

一个CPU可以引出的三种总线的宽度标志了这个CPU的不同方面的性能。

地址总线:

地址总线的宽度决定了CPU的寻址能力;

数据总线:

数据总线的宽度决定了CPU与其它器件进行数据传送 时的一次数据传送量;

控制总线:

控制总线宽度决定了CPU对系统中其它器件的控制能 力。

存储器:

课堂实验:以静态方式逆向修改输出字符串

现在假设,源代码不见了,只有这个exe文件,我想输出其他字符串怎么办? 

 现使用这个C程序进行实验:

#include<cstdio>
#include<cstdlib>
int main()
{
	printf("hello world!");
	system("pause");
	return 0;
}

实验步骤:编译,运行,查看编译后代码、修改、查看运行结果、 

Linux部分:

以RHEL8为例:

dnf -y install gcc
vim hello.c
gcc hello.c
chmod 777 hello.c
./hello.c
gcc -S hello.c
cat hello.s

可以看到汇编文件内容:

.file	"hello.c"
	.text
	.section	.rodata
.LC0:
	.string	"hello world!"
	.text
	.globl	main
	.type	main, @function
main:
.LFB0:
	.cfi_startproc
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	movl	$.LC0, %edi
	movl	$0, %eax
	call	printf
	movl	$0, %eax
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE0:
	.size	main, .-main
	.ident	"GCC: (GNU) 8.2.1 20180905 (Red Hat 8.2.1-3)"
	.section	.note.GNU-stack,"",@progbits
xxd a.out

 可以看到可执行程序部分:

Windows部分:

 出现这种状况的原因是Windows的保护机制,因此下面尝试修改成与“world”等长的"SCUuu"


可以发现:

在Windows中:可执行文件PE,以MZ为标志

在Linux中,可执行文件以ELF为标志 

巩固拓展:

《汇编语言》Chapter1

1.1机器语言

机器语言是机器指令的集合,机器指令是一台机器可以正确执行的命令。

电子计算机的机器指令是一列二进制数字。计算机将之转变为高低电平,以使计算机的电子器件受到驱动,进行运算。

每一种微处理器,由于硬件设计和内部结构的不同,就需要用不同的电平脉冲来控制。

所以,每一种微处理器都有自己的机器指令集,也就是机器语言。

1.2汇编语言

汇编语言的主体是汇编指令。

汇编指令是机器指令便于记忆的书写格式。

1.3汇编语言由三类指令组成:汇编指令、伪指令、其他符号

1.4存储器

1.5指令和数据:在内存或磁盘上,没有任何区别,都是二进制信息。

1.6存储单元:存储器被划分为若干个存储单元。

微机存储器的存储单元是以字节,其容量就是以字节最小单位来计算的。

1.7CPU 

CPU要想进行数据的读写,必须和外部器件进行3类信息交互:

                      地址信息、控制信息、数据信息

分别通过 地址总线、控制总线、数据总线进行传送

1.8地址总线:一个CPU有N根地址线,则可以说这个CPU地址总线宽度为N。

1.9数据总线:数据总线的宽度决定了CPU和外界的数据传送速度。

1.10控制总线:有多少根控制总线,意味着CPU对外部器件的多少种控制。

小结:

每一种CPU都有自己的汇编指令集、存储单元从0开始编号

1.11内存地址空间

举例,一个CPU的地址总线宽度为10,那么可以寻址1024个内存单元——

——每根导线上0/1不同状态的组合指向内存不同的位置——2^10=1024个内存单元

1.12主板

每一台PC机都有一个主板,主板上核心器件通过总线相连。

1.13接口卡

计算机所有可用程序控制其工作的设备,必须受到CPU的控制。

CPU对外部设备都不能直接控制,直接控制这些设备的是插在扩展槽上的接口卡。

1.14各类存储芯片

随机存储器、ROM、接口卡上的RAM

1.15内存地址空间

对于上图的各类存储器,CPU把他们都当作内存来看待,

把它们总的看作一个由若干存储单元组成的逻辑存储器,

这个逻辑存储器就是我们所说的内存地址空间。

每个物理存储器在这个逻辑存储器中占有一个地址段,即一段地址空间。

CPU在这个空间中读写数据,实际上就是在相对应的物理存储器中读写数据。

内存地址空间的大小受到CPU地址总线宽度的限制。

举例:

8086CPU:地址总线宽度20,则可以定位2^20个内存单元——内存1MB

80386CPU:地址总线宽度32,则可以定位2^32个内存单元——内存4GB

现代的64位计算机,地址总线宽度64,可定位2^64个内存单元——理论最大内存16384PB

总结:

我们在基于一个计算机硬件系统编程的时候,必须知道这个系统中的内存地址空间分配情况。因为当我们想在某类存储器中读写数据时,必须知道它的第一个单元的地址和最后一个单元的地址,才能保证读写操作是在预期的存储器中进行。

比如,我们希望显示器输出,就必须将这段信息写到显存中,显卡才能将它输出到显示器,而要向显存中写入数据,就必须知道显存在内存地址空间中的地址。

举例8086PC机内存地址空间分配情况:

 我们用汇编语言写程序时,必须要从CPU角度考虑问题。

Intel汇编语言程序设计学习-第一章 基本概念 阅读详情

相关推荐

汇编语言学习第一节

汇编语言学习第一节 ** 一.汇编语言基础 1****.汇编基础****** (1)系统总线:总线(Bus)是用于多个部件相互连接、传递信息的公共通道,物理上就是一组公用导线。类似与现实世界中的公共汽车一样,可以将各个站点的人联系起来。 (2)汇编语言中,习惯使用后缀字母区别不同进制的数据。 例如,使用字母B(或小写字母形式b,来自二进制的英文单词Binary)表示二进制数,使用字母H(或小写字母形式h,来自十六进制的英文单词Hexadecimal)表示十六进制数,而十进制数通常不需要特别说明(或者用后缀字

weixin_44373385的博客 659

【第一节】汇编语言的介绍

汇编语言是一种低级编程语言,它使用助记符(mnemonics)来表示机器指令。与机器语言相比,汇编语言更易于人类阅读和编写。

攻城狮7号的博客 2822

汇编语言教程:打造你的第一款汇编语言小游戏 汇编语言教程攻略

游戏详细简介 游戏名称:“太空探险” 游戏简介:这是一款基于x86汇编语言开发的简单2D游戏。在游戏中,玩家扮演一名宇航员,驾驶宇宙飞船在太空中探险,目标是收集散布在太空中的能量宝石,同时避开障碍物和敌人。游戏使用文本模式显示,通过键盘控制飞船的移动和射击。 游戏特色: 跨平台性:虽然基于x86汇编开发,但代码经过适当修改,可以在多种操作系统上运行。 实时交互:游戏响应速度快,玩家可以实时控制飞船的移动和射击。 挑战与乐趣并存:游戏设置了多个关卡,难度逐渐增加,让玩家在挑战中享受游戏的乐趣。 完整代码

m0_72216164的博客 1877

汇编语言:第二讲

这学期选修了汇编语言,通过发表学习记录,希望可以帮助加深我的理解,扎实掌握汇编语言相关知识。这门课是网络安全攻防课程的基础,学校强调逆向工程方法。除此之外,我还希望可以深入学习到汇编程序的开发,落实一些编程方法,掌握一部分单片机的开发技巧。另外,本文不仅是课上的学习记录,也包含了补充和拓展。参考书籍:C++反汇编与逆向分析技术揭秘(第2版)C++反汇编与逆向分析技术揭秘(第2版)-钱林松 张延清-微信读书 (qq.com)《汇编语言》王爽汇编语言-王爽-微信读书 (qq.com)《深入理解计算机系统》

d3535的博客 1704

PCA9548实战:从硬件连接到Linux驱动的I2C扩展全解析

本文详细解析了PCA9548 I2C多路复用器从硬件连接到Linux驱动配置的全过程。涵盖硬件引脚连接、电源去耦、地址选择等关键设计要点,以及Linux驱动加载、设备树配置和应用层编程技巧,帮助开发者高效实现I2C总线扩展。

weixin_28726391的博客 405

NVIDIA Orin AGX开发环境搭建避坑指南:从Ubuntu 22.04到ROS2完整配置流程

本文详细介绍了NVIDIA Orin AGX开发环境搭建的全流程,从Ubuntu 22.04系统安装到ROS2深度优化,涵盖驱动部署、CUDA环境配置、散热与功耗管理等关键步骤。特别针对Orin AGX的特性提供了实用避坑指南和性能优化技巧,帮助开发者高效完成开发环境配置。

weixin_28340315的博客 450

第三讲 汇编语言程序

学习汇编语言时所作的笔记。

qq_51542797的博客 2832

Cisco三层交换机的详细配置

** 本文适用于新手小白以及微微基础的同学来用于参考,实验是在Cisco Packet Tracer Student 进行,实验最终效果如图所示,所有命令配置与图中的一致。 使用到的机器型号为:五台电脑,一台服务器,三个普通交换机(2960型号),一个三层交换机(3560-24PS),两台普通服务器(2811) 文章目录一、什么是三层交换机二、配置交换机步骤1.配置二层交换机2.配置三层交换机3.配置两台路由器以及最后一台电脑 一、什么是三层交换机 1.三层交换机 = 三层路由+二层交换机 2.工作在

真正的大师,永远都怀着一颗学徒的心。 4万+

汇编语言入门

学习汇编前你应该知道的知识   1、汇编需要什么工具和程序,到哪里下载?     目前阶段,汇编程序仅需要两个程序就够了。masm.exe,link.exe。 前者是编译程序,后者是链接程序。另外,为了验证和调试程序,还需要一个程序debug.exe,该程序由windows本身就提供。     将二者下载后,放到某一个目录中(任意目录都可以),考虑到很多命令需要通过键盘

Charles' home 5万+

RT-Thread学习笔记(5):SPI驱动框架分析

1、两个设备模型 在spi驱框架中,一般会自己初始化一个总线设备(rt_spi_bus),当我们通过挂载后,会相应注册一个从设备(rt_spi_device)。 1、总线设备模型 struct rt_spi_bus { struct rt_device parent; rt_uint8_t mode; const struct rt_spi_ops *ops; struct rt_mutex lock; struct rt_spi_device *owner; };

BLBQ962464的博客 1万+

cocos2dx lua + protobuf

vs 2015 cocos2dx 3.10  lua  protobuf1. 下载 protobuf 源码     https://github.com/bnnswyp/protobuf/tree/master/protobuf-2.5.0    解压后的文件列表如下所示         其中 vsprojects 文件夹为 protobuf 的vs 工程2. 打开 protobuf.sln 编译...

u014486706的博客 2161

树莓派ARM汇编语言编程十讲(第4讲)

内容简介 树莓派单板机(Raspberry Pi Single Computer)是一种极了不起的产品,用户可以以非常低的成本获得一个Linux环境并带GPIO硬件扩展的迷你计算机系统。新一代树莓派4B还提供了良好的工业物联网和AIoT支持。树莓派单板机拥有完整的生态链,软硬件资源丰富,是嵌入式系统开发和智能硬件产品创新的很好选择。 作为嵌入式系统与嵌入式智能硬件开发基础中的基础,汇编语言是许多从...

袁易学的博客(Yuan Yixue's Blog) 2749

免费获取船舶轨迹数据?手把手教你用Python处理中国海洋卫星AIS数据

本文详细介绍了如何免费获取中国海洋卫星AIS数据,并使用Python进行船舶轨迹数据的处理与分析。从数据源评估到自动化处理流水线,再到高级分析与可视化技巧,手把手教你避开常见问题,实现高效数据处理。特别适合航运数据分析、物流优化和海上安全研究等领域的研究者和开发者。

weixin_42616115的博客 320

汇编语言 第一章 绪论

本内容大概由两部分组成,第一部分为观看老师PPT的内容,主要记录了章节的知识点.第二部分为一些知识点中我不太了解的内容,经过查阅资料后以Q/A的形式补充在引用框里,第二部分也可能是一些我联想到的知识点.

2301_81008647的博客 515

drm 之modes

#define _GNU_SOURCE #include <errno.h> #include <fcntl.h> #include <stdbool.h> #include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/mman.h> #include <time.h&...

u012794472的专栏 3716

操作系统权限提升(十五)之绕过UAC提权-基于白名单DLL劫持绕过UAC提权

先将操作在本地执行,使用procmon进行监控,过滤DLL和 NAME NOT FOUND ,寻找可以替换的DLL文件,注意文件的权限是否可以在目录写入,可以看到在C盘的tools目录的文件中有一个srrstr.dll被调用,但是没有加载,我们生成恶意的DLL文件看看是否可以被劫持。在Windows中许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库文件,即dll文件,放置于系统中,个人理解类似于我们编程中引入的模块。将我们生成的DLL文件改名为我们要劫持的DLL文件名。

把自己活成一道光,因为你不知道,谁会借着你的光,走出了黑暗。请保持心中的善良,因为你不知道,谁会借着你的善良,走出了绝望。请保持你心中的信仰,因为你不知道,谁会借着你的信仰,走出了迷茫。请相信自己的力量,因为你不知道,谁会因为相信你,开始相信了自己.... 1873

汇编语言第一周学习

胡小楠的汇编语言第一周学习 yep

weixin_63051469的博客 5497

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

树莓派ARM汇编语言编程十讲(第1讲)

树莓派ARM汇编语言编程十讲 内容简介 树莓派单板机(Raspberry Pi Single Computer)是一种极了不起的产品,用户可以以非常低的成本获得一个Linux环境并带GPIO硬件扩展的迷你计算机系统。新一代树莓派4B还提供了良好的工业物联网和AIoT支持。树莓派单板机拥有完整的生态链,软硬件资源丰富,是嵌入式系统开发和智能硬件产品创新的很好选择。 作为嵌入式系统与嵌入式智能硬件开发...

袁易学的博客(Yuan Yixue's Blog) 5032

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

汇编语言实验课:第一次记录

1.理解程序 第一次的实验课首先是理解两个程序: 第一个程序是输出Hello world! ;完整段的Hello World程序 DATAS SEGMENT STRING DB 'Hello World!',13,10,'$' DATAS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS START: MOV AX,DATAS MOV DS,AX LEA DX,STRING MOV A

咸鱼4号 993

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

树莓派ARM汇编语言编程十讲(第3讲)

内容简介 树莓派单板机(Raspberry Pi Single Computer)是一种极了不起的产品,用户可以以非常低的成本获得一个Linux环境并带GPIO硬件扩展的迷你计算机系统。新一代树莓派4B还提供了良好的工业物联网和AIoT支持。树莓派单板机拥有完整的生态链,软硬件资源丰富,是嵌入式系统开发和智能硬件产品创新的很好选择。 作为嵌入式系统与嵌入式智能硬件开发基础中的基础,汇编语言是许多从...

袁易学的博客(Yuan Yixue's Blog) 4066

[汇编语言]第一个程序

汇编语言第一个程序编写的方法讲解

Protein_zmm的博客 1528

汇编语言学习笔记目录

汇编语言学习笔记目录

qq_51542797的博客 270

汇编语言——第一个程序

汇编程序软件:emu8086 当然使用masm和link也挺好。 assume cs:codesg codesg segment mov ax,2000h mov ss,ax mov sp,0 add sp,10 pop ax pop bx push ax push bx pop ax pop bx ...

大草的博客 1050

树莓派ARM汇编语言编程十讲(第5讲)

内容简介 树莓派单板机(Raspberry Pi Single Computer)是一种极了不起的产品,用户可以以非常低的成本获得一个Linux环境并带GPIO硬件扩展的迷你计算机系统。新一代树莓派4B还提供了良好的工业物联网和AIoT支持。树莓派单板机拥有完整的生态链,软硬件资源丰富,是嵌入式系统开发和智能硬件产品创新的很好选择。 作为嵌入式系统与嵌入式智能硬件开发基础中的基础,汇编语言是许多从...

袁易学的博客(Yuan Yixue's Blog) 1440

汇编语言 第一章-基础知识

【学习汇编主要是:学习汇编的编程思想,掌握机器运行的思维】汇编语言是直接在硬件上工作的编程语言,首先要了解硬件系统的结构,才能有效的应用汇编语言对其编程。1.汇编课程的研究重点如何利用硬件系统的编程结构和指令集有效灵活的控制系统进行工作2.汇编语言的主体是汇编指令3.汇编指令和机器指令的差别在于指令的表示方法上汇编指令是机器指令便于记忆的书写格式4.汇编语言时机器指令的助记符5.汇编语言的组成1.汇编指令(机器码的助记符)2.伪指令(由编译器执行)

2302_80490510的博客 843

树莓派ARM汇编语言编程十讲(第6讲)

内容简介 树莓派单板机(Raspberry Pi Single Computer)是一种极了不起的产品,用户可以以非常低的成本获得一个Linux环境并带GPIO硬件扩展的迷你计算机系统。新一代树莓派4B还提供了良好的工业物联网和AIoT支持。树莓派单板机拥有完整的生态链,软硬件资源丰富,是嵌入式系统开发和智能硬件产品创新的很好选择。 作为嵌入式系统与嵌入式智能硬件开发基础中的基础,汇编语言是许多从...

袁易学的博客(Yuan Yixue's Blog) 1048
上一篇: Linux实验记录:使用iSCSI服务部署网络存储
下一篇: 汇编语言:第二讲
D.Thrive
博客等级 码龄3年 667粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值