Соединение с удаленным сервером с помощью Java и ssh ключа

Переполнение буфера в строгом смысле перезаписи стека или самой "кучи" потребовало бы также:

  1. ошибка А в платформе (они существовали в прошлом и могут хорошо снова)
  2. использование JNI (значительно больше использующий управляемый код)

переполнение буфера А в том смысле, что у Вас есть код с помощью буфера и кода, ответственна за парсинг его правильно, но сбой, чтобы сделать так возможен. Например, Вы могли бы записать синтаксический анализатор XML, и кто-то мог предоставить Вам уродливое (или законный, но редкий) запрос, который, вследствие дизайна Вашего синтаксического анализатора перезаписывает ранее проверенные данные с некоторой полезной нагрузкой, которая заставит Ваше приложение вести себя плохо.

Эта последняя форма менее вероятна, но плохо записанная строковая функция чистки sql широко распределила, который имел проблему, такую как это, будет привлекательная цель.

6
задан skaffman 11 September 2009 в 13:55
поделиться

1 ответ

Из стандартного раздела 3.1 C ++:

Объявление вводит имена в единицу перевода или повторно объявляет имена, введенные предыдущим декларации. Объявление определяет интерпретацию и атрибуты этих имен.

В следующем абзаце говорится (выделено мной), что объявление является определением , если ...

... оно не объявляет функцию без указания тело функции:

void sqrt(double);  // declares sqrt

... он объявляет статический член в определении класса:

struct X
{
    int a;         // defines a
    static int b;  // declares b
};

... он объявляет имя класса:

class Y;

... он содержит ключевое слово extern без инициализатор или тело функции:

extern const int i = 0;  // defines i
extern int j;  // declares j
extern "C"
{
    void foo();  // declares foo
}

... или typedef или с использованием оператора .

typedef long LONG_32;  // declares LONG_32
using namespace std;   // declares std

Теперь рассмотрим важную причину, по которой важно понимать разницу между объявлениями и определение: Правило одного определения . Из раздела 3.2.1 стандарта C ++:

Ни одна единица перевода не должна содержать более одного определения любой переменной, функции, типа класса,

5
ответ дан 17 December 2019 в 02:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: