-1

私はバッファ オーバーフローの問題を抱えており、hello world を印刷しようとしています。以下は私のコードですが、このファイルを別のファイルで実行すると、セグメンテーション 11 の問題が発生します。"./executable < input.cpp (これは以下のファイルです)。バッファ オーバーフローの問題を解決するために何か間違ったことをしていますか?

#include<stdio.h>

using namespace std;


main()
{
    printf("A");
    //00000b00
    for (int i = 0; i < 4; i++)

    printf("%c%c%c%c",0x00,0x0b,0x00,0x00);



}

以下は、私が hello world を印刷しようとしている実際のコードです。上記は私の入力文字列です。

#include <iostream>

using namespace std;
 int i;
unsigned int* p;

void f1() {

   int a=10;
  char str[4];

  cout << "Please enter a string:";
  while (!cin.eof()) {
    cin.get(str[i]);
    i++;
  }

printf("address of str is:%x\n",str);

  cout << "The string you entered is:";
    printf("address of a is:%x\n",&a);
  cout << str << endl;
}

void f2()
{
  cout << "Hello World!\n";
}

main()
{ 
  printf("The address of function f2:%08x\n",f2);
  f1();
}
4

2 に答える 2

1

このファイルを別のファイルで実行すると、セグメンテーション 11 の問題が発生します。

  ./executable < input.cpp

バッファオーバーフローの問題を解決するために何か間違ったことをしていますか?

はい。バッファ オーバーフロー攻撃はそのようには機能しません。大量の C ソース コードをメモリにダンプしても、魔法のようにマシンがコンパイルして実行するわけではありません。大まかに一般化するには、メモリにダンプするデータに次のものが含まれている必要があります。

  1. 次のデータをスタック内の適切な場所に配置するためのパディング
  2. 次の実行可能コードを指す、古いリターン アドレスの場所にある代替アドレス
  3. もう少しパディング、通常は「NOP スライド」
  4. 一部の実行可能コード

古典的な「楽しみと利益のためにスタックを破壊する」を読んでください。また、最新のシステムでこれらのエクスプロイトを機能させるには、一部の保護 (非実行可能スタック、ASLR、スタック カナリア) を無効にする必要がある場合があることに注意してください。

于 2013-09-03T03:17:04.167 に答える