chore: Syntax Highlighting

This commit is contained in:
camera-2018
2023-08-15 01:03:42 +08:00
parent 9351ddc524
commit 4ce9a285d8
9 changed files with 48 additions and 43 deletions

View File

@@ -16,7 +16,7 @@
以最基本的 C 语言为例C 语言的函数局部变量就保存在栈中。
```C
```c
#include<stdio.h>
int main()
{
@@ -33,7 +33,7 @@ int main()
可以发现`ch``ch2`刚好差`8`个字节,也就是`ch`的长度。
`ch`只有`8`个字节,那么如果我们向`ch`中写入超过`8`个字节的数据呢?很显然,会从`ch`处发生溢出,写入到`ch2`的空间中,覆盖`ch2`的内容。
```C
```c
#include<stdio.h>
int main()
{
@@ -54,7 +54,7 @@ int main()
对于以上程序,“栈溢出”带来的后果仅仅是修改了局部变量的值,会造成一些程序的逻辑错误:
```C
```c
#include<stdio.h>
int main()
{
@@ -81,7 +81,7 @@ int main()
在 C 语言编译之后,通常会产生汇编语言,汇编语言的字节码可以直接在物理 CPU 上运行。而 C 语言函数调用会被编译为如下形式:
```C
```c
#include<stdio.h>
int add(int a,int b)
{
@@ -187,20 +187,20 @@ ROP 网上已有非常系统的资料,在这里不做过多的叙述,可参
格式化字符串的利用思路来源于`printf`函数中的`%n`format 标签,该标签的作用和`%s``%d`等不同,是将已打印的字符串的长度返回到该标签对应的变量中。在正常情况下的使用不会出现什么问题:
```C
```c
printf("abcd%n",&num);
//输出abcd,并且num的值为4
```
但如果在编写代码时忘记 format 字符串:
```C
```c
printf(something_want_print);
```
此时若攻击者可以自定义该字符串,就可以使用`%d``%p``%s`等打印栈上数据,或者`%n`来覆写栈上的数据,如果覆写了返回地址,就可以实现任意代码执行。
```C
```c
char ch[20];
scanf("%s",ch);// 输入 %d%n%n%n%n%n
printf(ch);