主要尝试通过pwn方向将计算机组成原理和数据结构相关的知识串一下,达到快速学习的目的。本人非科班,跨考计算机(悲

本篇的话主要借鉴了探姬师傅的hello-ctf的pwn入门教程0.汇编语言(x86)(个人觉得是很好的入门教程)
可能一些解读和学习有很多不当之处,欢迎各位大佬鞭策

汇编语言

在开始正式学习二进制安全之前,需要先进行汇编语言的学习,这里我就根据教程的指引来对汇编语言展开相关性学习。

Start!

从一个最简单的例子开始:
很多同学入门pwn的时候都是从栈溢出来开始的,而想要理解栈溢出的基本原理,通过汇编语言是必要的。这里的话我们通过几个简单的程序来介绍汇编语言和栈,这里我使用的环境是Ubuntu20,程序一般情况下是64位。(如果有特殊情况的话会提前说明)

各位小伙伴自行装好相关的虚拟机和工具,或者不知道什么时候会更一期工具教学捏^^

Hello World

我们先给出一个程序源代码

1
2
3
4
5
6
7
//main.c
# include<stdio.h>

int main(){
printf("hello world");
return 0;
}

这是一个大家都能够看明白的程序,更是许多人的入门第一程序,那么接着我们会用到GCC来将其编译为二进制文件,从而使得其可以在计算机上进行运行,在这个过程中,我们需要将C语言源码转换为汇编语言。

首先的话我们要对这段C语言源码进行如下操作:

gcc -S main.c -o main.s -masm=intel

这个命令使用GCC从C源文件”main.c”生成汇编代码。下面是命令的解释:

  • gcc:这是调用GNU编译器集合的命令。
  • -S:此选项告诉GCC生成汇编代码而不是生成可执行文件。
  • main.c:这是要编译的源文件。
  • -o main.s:此选项指定生成的汇编代码的输出文件。在这种情况下,输出文件名为”main.s”。
  • -masm=intel:此选项指定要使用的汇编语法。在这里,它将汇编语法设置为Intel样式。默认情况下,通常使用AT&T语法。

因此,运行此命令时,GCC将从”main.c”文件生成Intel样式的汇编代码,并将其保存在”main.s”文件中。您可以检查”main.s”文件,以查看C程序的相应汇编代码。