172 похожих чатов

Магическим образом ничего не работает в расте. Всегда есть ансейф который

нужно использовать правильно.

Если меряться тем как с помощью ансейфа реализовать заабузить какой-то из контрактов, то я тоже в это могу:

https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=923fcf595c97148e7afbe2551ab0d4a1

5 ответов

29 просмотров

ну так тогда и спорить не о чем

Vladimir- Автор вопроса
Dima
ну так тогда и спорить не о чем

Я просто говорил про то, что Pin решает проблему "UB при передвижении структуры которая ссылается сама на себя" Решает он её вводя контракт, который проверяет что структура фиксирована в памяти. Дальше уже та логика которую ты хочешь получить - нужна ссылка на свою структуру, позаботься чтобы твою структуру можно было бы создать только Pin.

Vladimir
Я просто говорил про то, что Pin решает проблему "...

Я просто говорил про то, что Pin решает проблему "UB при передвижении структуры которая ссылается сама на себя" Решает он её вводя контракт, который проверяет что структура фиксирована в памяти. что значит проверяет? Pin::new работает только для тех типов которые Unpin, то есть где гарантии пина не важны, Pin::new_unchecked отдает соблюдение котнракта на откуп прогаммисту Дальше уже та логика которую ты хочешь получить - нужна ссылка на свою структуру, позаботься чтобы твою структуру можно было бы создать только Pin. ты же понимаешь что это можно сделать только через аллокацию, что во многих случаях как бы отстой

Vladimir- Автор вопроса
Dima
Я просто говорил про то, что Pin решает проблему "...

> что значит проверяет? Pin::new работает только для тех типов которые Unpin, то есть где гарантии пина не важны, Pin::new_unchecked отдает соблюдение котнракта на откуп прогаммисту new_unchecked - unsafe, там гарантий никаких нет. Точно также как отправка данных между тредами работает только для типов которые Send. Но свои "smart" поинтеры ты тоже можешь реализовать, и реализовать для них unsafe Send. Разницы тут нет. > ты же понимаешь что это можно сделать только через аллокацию, что во многих случаях как бы отстой. Дак не обязательно. Да раст не позволяет тебе вернуть из функции структуру которая запинена на стек. потому что стек так устроен. Но создать на стеке и передавать эту структуру внутрь функции никто не запрещает. https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=042db2d1b1b59db65e02a3d0b9afba3c

Vladimir
> что значит проверяет? Pin::new работает только д...

1) Да 2) Да, но я это и написал конкретно к предложенному тобой способу Дальше уже та логика которую ты хочешь получить - нужна ссылка на свою структуру, позаботься чтобы твою структуру можно было бы создать только Pin.

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

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта