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

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

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

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

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

5 ответов

24 просмотра

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

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.

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Ребят в СИ можно реализовать ООП?
Николай
33
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
2
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта