Size: a a a

pro.graphon (and gamedev)

2020 May 14

AV

Anton Vertver in pro.graphon (and gamedev)
Привет снова всем. У меня появилась проблема с дебагом приложения из другого процесса, так как все классы выделяются через new. Вопрос заключается в том, что законно ли переопределить оператор new на аллокатор CoTaskMemAlloc или VirtualAlloc чтобы можно было использовать из другого процесса?
источник

VD

Vlad Doc in pro.graphon (and gamedev)
Anton Vertver
Привет снова всем. У меня появилась проблема с дебагом приложения из другого процесса, так как все классы выделяются через new. Вопрос заключается в том, что законно ли переопределить оператор new на аллокатор CoTaskMemAlloc или VirtualAlloc чтобы можно было использовать из другого процесса?
Не вижу ничего чтобы помешало.
источник

AV

Anton Vertver in pro.graphon (and gamedev)
Vlad Doc
Не вижу ничего чтобы помешало.
секурити, UB (да, это незаконно со стороны языка), ну и плюс выделение напрямую в вирт.памяти
источник

AV

Anton Vertver in pro.graphon (and gamedev)
В стеке хотя бы безопасность нормальная, а в вирт.памяти хоть из другого процесса мапиться можно
источник

AV

Anton Vertver in pro.graphon (and gamedev)
Хотя, как дебаг вариант это нормально подходит
источник

VD

Vlad Doc in pro.graphon (and gamedev)
Anton Vertver
секурити, UB (да, это незаконно со стороны языка), ну и плюс выделение напрямую в вирт.памяти
Можно поподробнее почему переопределение new UB?
источник

AV

Anton Vertver in pro.graphon (and gamedev)
Vlad Doc
Можно поподробнее почему переопределение new UB?
VirtualAlloc выделяет память с протектом RW
источник

AV

Anton Vertver in pro.graphon (and gamedev)
а для использования кода нужно сначала записать код, а потом с помощью VirtualProtect уже задать RX
источник

AV

Anton Vertver in pro.graphon (and gamedev)
Хотя, вру, в VirtualAlloc есть флаг
источник

AV

Anton Vertver in pro.graphon (and gamedev)
Но опять же, память может во все не выделиться
источник

AV

Anton Vertver in pro.graphon (and gamedev)
И тогда получается кидать эксепшн как в C++?
источник

U

UsernameAK in pro.graphon (and gamedev)
Anton Vertver
Привет снова всем. У меня появилась проблема с дебагом приложения из другого процесса, так как все классы выделяются через new. Вопрос заключается в том, что законно ли переопределить оператор new на аллокатор CoTaskMemAlloc или VirtualAlloc чтобы можно было использовать из другого процесса?
тебе надо placement new
источник

AV

Anton Vertver in pro.graphon (and gamedev)
UsernameAK
тебе надо placement new
Проблемы это не решает. Все также придется страдать с VirtualAlloc и VirtualProtect
источник

AV

Anton Vertver in pro.graphon (and gamedev)
Да и тоже самое с CoTaskMemAlloc
источник

VD

Vlad Doc in pro.graphon (and gamedev)
Anton Vertver
Да и тоже самое с CoTaskMemAlloc
if(!ptr) throw std::bad_alloc{}
источник

U

UsernameAK in pro.graphon (and gamedev)
Anton Vertver
Да и тоже самое с CoTaskMemAlloc
ну так ты не выделишь память если ее нет
источник

AV

Anton Vertver in pro.graphon (and gamedev)
Vlad Doc
if(!ptr) throw std::bad_alloc{}
Самое забавное, что CoTaskMemAlloc может просто не работать если не будет вызван CoInitialize
источник

U

UsernameAK in pro.graphon (and gamedev)
Anton Vertver
Самое забавное, что CoTaskMemAlloc может просто не работать если не будет вызван CoInitialize
это очевидно. это ж COM
источник

AV

Anton Vertver in pro.graphon (and gamedev)
UsernameAK
ну так ты не выделишь память если ее нет
Значит и приложение должно крашнуться тогда
источник

AV

Anton Vertver in pro.graphon (and gamedev)
UsernameAK
это очевидно. это ж COM
Но вот только моя библиотека просто так не должна ложить другое приложение
источник