SIGSEGV 分段错误,不同的消息
SIGSEGV Segmentation fault, different message
我正在尝试 运行 程序来测试缓冲区溢出,但是当程序崩溃时它显示如下 SIGSEGV 错误:
Program received signal SIGSEGV, Segmentation fault.
0x00000000004006c0 in main (argc=2, argv=0x7fffffffde78)
但是我正在学习的教程收到以下消息:
Program received signal SIGSEGV, Segmentation fault. 0x41414141 in ??
()
因此我无法获得缓冲区溢出的确切内存位置。
我在编译我的程序时已经使用了-fno-stack-protector
。因为在此之前我收到 SIGABRT 错误。
有没有人有任何线索,以便我可以与教程同步。
SIGSEGV
是当您的程序试图访问它不应该访问的内存位置时发出的信号。两个典型的场景是:
- 引用一个未初始化的指针。
- 越界访问数组。
但是请注意,即使在这两种情况下,也不能保证 SIGSEGV
总是 发生。所以不要指望 SIGSEGV
消息即使使用相同的代码也总是相同的。
我能够找出两者的区别。
实际上我在 Ubuntu 64 位虚拟机上尝试了相同的代码。
但是后来我尝试在虚拟机上安装 Ubuntu 32 位,所以现在我也收到了与教程中相同的消息。
我在 64 位和 32 位 OS 中注意到的另一个区别是,当使用 32 位时,我们可以使用 $esp 检查堆栈,但在 64 位中-位机我们要用$rsp
我正在尝试 运行 程序来测试缓冲区溢出,但是当程序崩溃时它显示如下 SIGSEGV 错误:
Program received signal SIGSEGV, Segmentation fault. 0x00000000004006c0 in main (argc=2, argv=0x7fffffffde78)
但是我正在学习的教程收到以下消息:
Program received signal SIGSEGV, Segmentation fault. 0x41414141 in ?? ()
因此我无法获得缓冲区溢出的确切内存位置。
我在编译我的程序时已经使用了-fno-stack-protector
。因为在此之前我收到 SIGABRT 错误。
有没有人有任何线索,以便我可以与教程同步。
SIGSEGV
是当您的程序试图访问它不应该访问的内存位置时发出的信号。两个典型的场景是:
- 引用一个未初始化的指针。
- 越界访问数组。
但是请注意,即使在这两种情况下,也不能保证 SIGSEGV
总是 发生。所以不要指望 SIGSEGV
消息即使使用相同的代码也总是相同的。
我能够找出两者的区别。
实际上我在 Ubuntu 64 位虚拟机上尝试了相同的代码。 但是后来我尝试在虚拟机上安装 Ubuntu 32 位,所以现在我也收到了与教程中相同的消息。
我在 64 位和 32 位 OS 中注意到的另一个区别是,当使用 32 位时,我们可以使用 $esp 检查堆栈,但在 64 位中-位机我们要用$rsp