Size: a a a

WebAssembly — русскоговорящее сообщество

2020 August 03

MV

Mikhail Voronov in WebAssembly — русскоговорящее сообщество
в wasi-libc аллокаторе при выделении большого размера выделяется напрямую с помощью memory_grow
источник

MV

Mikhail Voronov in WebAssembly — русскоговорящее сообщество
а не внутренних bin листов dlmalloc
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Mikhail Voronov
в wasi-libc аллокаторе при выделении большого размера выделяется напрямую с помощью memory_grow
Насколько я знаю все контракты ограничивают макс колличество страниц. И там оно сильно ниже 2 ** 16
источник

MV

Mikhail Voronov in WebAssembly — русскоговорящее сообщество
+ там есть т.н. simple_malloc, которую линкуется в случае, если в программе нет free, чтобы не тащить весь dlmalloc. А он хорош в данном случае тем, что там не заголовков чанков аллокаций (в которых могут быть \x000).
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Mikhail Voronov
+ там есть т.н. simple_malloc, которую линкуется в случае, если в программе нет free, чтобы не тащить весь dlmalloc. А он хорош в данном случае тем, что там не заголовков чанков аллокаций (в которых могут быть \x000).
Ну типичный bump аллокатор
источник

MV

Mikhail Voronov in WebAssembly — русскоговорящее сообщество
MaxGraey
Ну типичный bump аллокатор
да
источник

MV

Mikhail Voronov in WebAssembly — русскоговорящее сообщество
MaxGraey
Насколько я знаю все контракты ограничивают макс колличество страниц. И там оно сильно ниже 2 ** 16
ну вот это проблема да, но мало ли где можно ограничения самому выбрать
источник

MV

Mikhail Voronov in WebAssembly — русскоговорящее сообщество
кстати, интересно, с учётом jit'а к чему можно доступ так получить
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Mikhail Voronov
кстати, интересно, с учётом jit'а к чему можно доступ так получить
Ни к чему. Если выйдешь за пределы линейной памяти получишь oob trap
источник

MV

Mikhail Voronov in WebAssembly — русскоговорящее сообщество
MaxGraey
Ни к чему. Если выйдешь за пределы линейной памяти получишь oob trap
это только потому что load/store 32-битными числами оперируют
источник

MV

Mikhail Voronov in WebAssembly — русскоговорящее сообщество
а если ты сможешь выделить (пока не будем в даваться в подробности как) исполняемый x86_64 код в васм памяти, то это не спасёт
источник

MV

Mikhail Voronov in WebAssembly — русскоговорящее сообщество
в смысле в гипотетической ситуации когда этот heap overflow легко конвертится в arbitrary jump и мы (каким-то образом) записали в васм кучу исполняемый x86_64 код, то можно прыгнуть на него (ну тут ещё точный адрес нужно знать)
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Mikhail Voronov
а если ты сможешь выделить (пока не будем в даваться в подробности как) исполняемый x86_64 код в васм памяти, то это не спасёт
Не очень понял. При oob в песочнице ты будешь пытаться писать в guarded page и ос выкинет тебе исключение. Ну для linux / unix по крайней мере
источник

lp

lil pep in WebAssembly — русскоговорящее сообщество
так я не понял, тот код разве не изнутри wasm'а?
источник

MV

Mikhail Voronov in WebAssembly — русскоговорящее сообщество
lil pep
так я не понял, тот код разве не изнутри wasm'а?
внутри, но он джитится в x86_64 же
источник

MV

Mikhail Voronov in WebAssembly — русскоговорящее сообщество
т.е. в конечном итоге он выполняется, как просто x86_64 asm
источник

lp

lil pep in WebAssembly — русскоговорящее сообщество
безусловно, только действительно все load/store ограничены песочницей.
источник

lp

lil pep in WebAssembly — русскоговорящее сообщество
то что доступны только 32-битные адреса дела не меняет
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Так, во первых насколько мне известо все блокчейны используют стримовые AOT компиляторы или интерпретаторы
источник

MV

Mikhail Voronov in WebAssembly — русскоговорящее сообщество
MaxGraey
Не очень понял. При oob в песочнице ты будешь пытаться писать в guarded page и ос выкинет тебе исключение. Ну для linux / unix по крайней мере
ну ты можешь же просто создать статическую переменную с шеллкодом, она будет загружена в васм память
источник