Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 缓冲区溢出后的函数调用_C_Buffer Overflow - Fatal编程技术网

C 缓冲区溢出后的函数调用

C 缓冲区溢出后的函数调用,c,buffer-overflow,C,Buffer Overflow,我看过一段视频: 我不明白两件事: 我看不到函数调用,但它发生了 他是如何得到一个具体的号码的,他把这个号码写进了档案 他试图写入特定的值(可能是堆栈中某个位置的函数地址)。为什么可能?我如何重复这一点?缓冲区溢出是一种“问题”,它可能会让程序在自己的内存堆栈上进行写操作 这有两个作用: 用一个微不足道的值覆盖IP(指令指针)的返回地址 (over)在堆栈中写入数据,用作函数参数 当当前函数退出时,指令指针将更改为堆栈中的地址。如果该地址是恶意代码的地址,则代码将像程序的地址一样执行 如

我看过一段视频:

我不明白两件事:

  • 我看不到函数调用,但它发生了
  • 他是如何得到一个具体的号码的,他把这个号码写进了档案

他试图写入特定的值(可能是堆栈中某个位置的函数地址)。为什么可能?我如何重复这一点?

缓冲区溢出是一种“问题”,它可能会让程序在自己的内存堆栈上进行写操作

这有两个作用:

  • 用一个微不足道的值覆盖IP(指令指针)的返回地址
  • (over)在堆栈中写入数据,用作函数参数
当当前函数退出时,指令指针将更改为堆栈中的地址。如果该地址是恶意代码的地址,则代码将像程序的地址一样执行


如果在使用这种特权的程序中执行代码,这可能会允许一个人使用根特权执行代码。

首先,他将函数foo()的硬编码地址存储在读取变量“x”的“文件”中。他将其存储为“134513853”,当转换为十六进制时变成:0x80484bd,它必须是函数foo()的地址。 那么按照执行的顺序,, 程序从文件中读取foo()地址,并将其复制到x。然后它用这个地址覆盖缓冲区,这样在它溢出缓冲区后,它就会覆盖返回地址

例如:

如果这是函数堆栈的外观

缓冲区---------------->

EBP------------------->

返回地址------->某些0x值0x80484bd

EBP----------------->0x80484bd


返回地址----------->0x80484bd从技术上讲,函数不被调用,指令指针返回函数的代码。