Как провести переполнение буфера в PHP/Python?

Вот пример в c:

#include <stdio.h>
#include <string.h>

void bad() {
    printf("Oh shit really bad~!\r\n");
}

void foo() {
    char overme[4] = "WOW";
    *(int*)(overme+8) = (int)bad;
}

int main() {
   foo();
}
6
задан user198729 17 January 2010 в 14:27
поделиться

5 ответов

Тот факт, что Python и PhP интерпретируются, как предложены другими, на самом деле не точка. Дело в том, что почти все API и языковые семантики, которые они выставляют, сильно проверяют ошибки, что делает невозможным использование эксплуатационного неопределенного поведения. Даже если вы компилируете языки, это все равно было бы невозможно. Это не значит, что вы не могли выставить небезопасные API, которые могут делать все возможное. Фактически, используя модуль Pythons CTypes, должно быть возможно создать аналогичное поведение, но значительно сложнее сделать это случайно.

9
ответ дан 8 December 2019 в 16:03
поделиться

Как PHP является языком сценариев и не имеет указателей, а тип строки - это двоичное безопасное, такие вещи не будут работать в PHP.

Но зачем вы хотели бы сделать такую ​​вещь?

(О, там могут быть ошибки в PHP, что привело к переполнению буфера, но это ничто, что может в любом случае, и обычно фиксируется довольно Ffaff. .)

2
ответ дан 8 December 2019 в 16:03
поделиться

Я не уверен, что понимаю, чего вы пытаетесь достичь, но вы, возможно, захотите взглянуть на NSSet . Если значение colString является определенным, кажется, что вы хотите, чтобы ваша программа делала крутые вещи.

NSSet *numbersAndColors = [NSSet setWithObjects:@"oneGreen", @"twoBlue", @"threeSilver", nil];
NSString *colString = [[NSString alloc] initWithString:@"threeSilver"];

if ([numbersAndColors containsObject:colString])
{
    // do cool stuff
}

NSSet быстрее NSSray , когда нужно знать, существует ли конкретный объект, но один важный аспект NSSet заключается в том, что он не поддерживает порядок объектов. Как правило, он используется, когда вы не заботитесь о порядке и хотите просто проверить, существует ли объект в наборе.

-121--4950860-

Создайте файл карты из компоновщика. Он покажет, как выделяется память. Это хорошее начало при оптимизации использования памяти. Он также покажет все функции и способ размещения кодового пространства.

-121--1158389-

К сожалению, вы достигли слабости в Python. К сожалению, это по замыслу, так что с этим мало что можно сделать. Возможно, вы должны остаться с C.

Как Мартин против Лёвиса сказал :

Python не поддерживает переполнения буфера, извините.

PS Wow. Кажется, несколько месяцев назад я прочитал этот пост, но прошло уже 7 лет с днем.

2
ответ дан 8 December 2019 в 16:03
поделиться

Делать что-то подобное в PHP не приведет к тому же поведению.

PHP интерпретируется и всегда проверяет, является ли операция, которую вы делаете или не действительны. Так что вы не можете - например - переполнить буфер.

1
ответ дан 8 December 2019 в 16:03
поделиться

Потому что PHP, Python и каждый интерпретированный язык сначала должны пройти через интерпретатор, и у вас нет полного доступа к памяти, этот вид языков не позволит вам делать какие-то игры, такие как код, который вы разместили.

1
ответ дан 8 December 2019 в 16:03
поделиться
Другие вопросы по тегам:

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