逆向工程体系化入门

逆向工程体系化入门

一、课前测试

1、X86寄存器中,EAX寄存器主要用于()

A 计数器 B 累加器 C 函数返回值 D 程序指针

2、C语言中,printf函数属于哪个标准库?()

A time.h B string.h C stdio.h D ctype.h

3、函数调用时,用于保存参数的数据结构是?()

A 链表 B 栈 C 堆 D队列

4、32位CPU的内存寻址空间为?()

A 1G B 2G C 4G D 8G

5、在下列编程语言中,开发效率最高的是?()

A 机器语言 B 汇编语言 C C语言 D C++语言

6、ASCII码使用几个bit进行编码?()

A 7 0x00-0x7f B 8 C 16 D 24

7、下面的动态链接库中,哪个是图形设备接口?()

A kernel32.dll B User32.dll C GDI32.dll D advapi32.dll lib

8、数据在内存中有两种存储方式,分别是大端存储和小端存储,Windows操作系统采用的是哪一种存储方式?()
A 大端 B 小端

二、逆向工程基础体系

逆向工程是计算机领域或网络安全领域难度较大的学习内容,需要的前置知识点较多,包括数据的存储及表示、C语言、C++、汇编语言、操作系统、Windows操作系统、Linux操作系统、ELF文件、PE文件、算法、计算机组成原理、数据结构等。标红部分为本节课主要讲解的内容。
在这里插入图片描述

三、数据的存储及表示

数据的存储及表示包括进制及转换、数据的宽度及表示范围、文本字符等内容。
在这里插入图片描述

四、C语言编译过程

1、从源代码到可执行文件

  • 在命令行中执行gcc hello.c可生成a.out。
  • 如果要指定目标文件的名称,命令为:gcc hello.c -o hello
  • 整个编译过程分为4个步骤:预处理(Preprocessing)、编译(Compilaiton)、汇编(Assembly)和链接(Linking)。

2、预编译

  • gcc -E hello.c -o hello.i
  • 预编译过程主要处理源代码中以“#”开始的预编译指令

3、编译

  • 编译的命令为: gcc -S hello.c -o hello.s

4、汇编

  • 命令为gcc -c hello.s -o hello.o或者gcc -c hello.c -o hello.o
  • 可通过objdump查看目标文件:objdump -sd hello.o

5、链接

  • 命令为gcc hello.o -o hello
  • 通过objdump可查看可执行文件的内容:objdump -d -j .txt hello
  • 目标文件需要链接一大堆文件才能得到最终的可执行文件。链接过程包括地址和空间分配(Address and Storage
    Allocation)、符号决议(Symbol Resolution)和重定向(Relocation)等。

五、汇编语言

图中对汇编语言寄存器和指令进行梳理,并包含了大量的实验。
在这里插入图片描述

六、内存管理

​ 内存管理主要包含内存的基本概念、栈与调用约定、堆与内存管理。内存布局和堆栈是核心。
在这里插入图片描述

七、PE文件

PE文件是portable File Format(可移植文件)的简写,我们比较熟悉的DLL和exe文件都是PE文件。了解PE文件格式有助于加深对操作系统的理解,掌握可执行文件的数据结构机器运行机制,对于逆向破解,加壳等安全方面方面的同学极其重要。
在这里插入图片描述

八、相关资源

思维导图原图
1、逆向工程基础
2、数据的存储及表示
3、汇编语言
4、内存管理
5、Windows操作系统
6、PE文件

文本资源
1、C语言编译过程
2、测试题

工具
1、OD
2、c32asm
3、RadASM

其他
1、radasm+od查看实验数据
2、hello.c

百度网盘链接:https://pan.baidu.com/s/1Wxtf0avHZRN6BZ92cmUjpw
提取码:m05m

猜你喜欢

转载自blog.csdn.net/weixin_43363675/article/details/115261222