Size: a a a

2020 August 16

z

zeroid in pro.cxx
N 2
Можно ли обратится к рандомному адресу в памяти и поменять его, или операционка этого не позволяет?
Кого поменять, адрес?
источник

N2

N 2 in pro.cxx
Значение по адресу, артмани кароче
источник

z

zeroid in pro.cxx
N 2
Значение по адресу, артмани кароче
источник

ПК

Побитый Кирпич... in pro.cxx
N 2
нет ну не рандомные например как артмани находить и менять что-то, просто есть ли у осей средства защиты от такого
Можно, у ОС есть спец. инструменты для этого
источник

o

osm1um in pro.cxx
Побитый Кирпич
Можно, у ОС есть спец. инструменты для этого
источник

o

osm1um in pro.cxx
Если говорить об Windows, то ты можешь получить HANDLE с конкретными правами и выполнять с процессом какие-то действия: завершить, прочитать/записать что-то в виртуальной памяти и т.д.

Насколько я понимаю, процесс может ограничить внешним процессам доступ к конкретным правам, или памяти.

В WinAPI для этого есть функция OpenProcess, чтобы получить HANDLE. Для чтения/записи, если не ошибаюсь ReadProcessMemory/WriteProcessMemory.
источник

VM

Vladimir Maslenko in pro.cxx
osm1um
Если говорить об Windows, то ты можешь получить HANDLE с конкретными правами и выполнять с процессом какие-то действия: завершить, прочитать/записать что-то в виртуальной памяти и т.д.

Насколько я понимаю, процесс может ограничить внешним процессам доступ к конкретным правам, или памяти.

В WinAPI для этого есть функция OpenProcess, чтобы получить HANDLE. Для чтения/записи, если не ошибаюсь ReadProcessMemory/WriteProcessMemory.
Можно ещё просто DLL в память загрузить и работать с памятью напрямую, как буд то из самого процесса: (int*)(0x00000000), где нули - адрес в памяти. Но может так же потребоваться использовать VirtualAlloc для защищенных мест памяти.
источник

VM

Vladimir Maslenko in pro.cxx
Вот ещё по этой теме.
источник

O

Ofee in pro.cxx
Alex
Ну да, зачем вообще заглядывать в тот блок кода. если он по определению не должен компилироваться?
Это не макросы, поэтому if constexpr никогда не допускает невалидный код. Другое дело, что инстанцирования внутри тела не происходят до тех пор, пока мы не попадём в соответствующую ветку. Это, собственно, одно из его основных предназначений
источник

AN

Alexander N in pro.cxx
CreateRemoteThread его для инжектов юзают часто. Поток находится в пространстве того процесса
источник

A

Alex in pro.cxx
Ofee
Это не макросы, поэтому if constexpr никогда не допускает невалидный код. Другое дело, что инстанцирования внутри тела не происходят до тех пор, пока мы не попадём в соответствующую ветку. Это, собственно, одно из его основных предназначений
Я понял, но это сильно сужает область применимости if constexpr, как в моём примере, где в зависимости от флага у структуры есть или нет поля, и посмотреть на это поле в if constexpr нельзя.

А есть какая-то причина, по которой требуется валидность "мёртвого" кода? Это просто недоработка стандарта, или без этого требования реализовать компилятор или непротиворечиво написать стандарт невозможно?
источник

m

magras in pro.cxx
Alex
Я понял, но это сильно сужает область применимости if constexpr, как в моём примере, где в зависимости от флага у структуры есть или нет поля, и посмотреть на это поле в if constexpr нельзя.

А есть какая-то причина, по которой требуется валидность "мёртвого" кода? Это просто недоработка стандарта, или без этого требования реализовать компилятор или непротиворечиво написать стандарт невозможно?
Это не так работает. У тебя есть примеры когда новое поведение было бы полезно?
источник

A

Alex in pro.cxx
Есть, меня ж неспроста выбесила эта фишка if constexpr. Непонятно, за каким чёртом валидировать код, если он всё равно будет выпилен. Вот пример из жизни:

https://godbolt.org/z/8b3xWq
источник

O

Ofee in pro.cxx
Alex
Я понял, но это сильно сужает область применимости if constexpr, как в моём примере, где в зависимости от флага у структуры есть или нет поля, и посмотреть на это поле в if constexpr нельзя.

А есть какая-то причина, по которой требуется валидность "мёртвого" кода? Это просто недоработка стандарта, или без этого требования реализовать компилятор или непротиворечиво написать стандарт невозможно?
Моё личное мнение: потому что это конструкция не для избавления от мёртвого кода, скорее всего, изначально if constexpr и не задумывался для этой цели

Лично я бы хотел для избавления от мёртвого кода иметь отдельный инструмент, если он действительно нужен
источник

АК

Александр Караев... in pro.cxx
Alex
Есть, меня ж неспроста выбесила эта фишка if constexpr. Непонятно, за каким чёртом валидировать код, если он всё равно будет выпилен. Вот пример из жизни:

https://godbolt.org/z/8b3xWq
У тебя не шаблонный контекст. Вынеси в отдельную функцию, шаблонизированную двумя bool, будет работать
источник

m

magras in pro.cxx
Alex
Есть, меня ж неспроста выбесила эта фишка if constexpr. Непонятно, за каким чёртом валидировать код, если он всё равно будет выпилен. Вот пример из жизни:

https://godbolt.org/z/8b3xWq
Это синтетический пример. Я просто не понимаю зачем в функции где все типы известны использовать if constexpr. У тебя не может измениться выражение в if и как следствие у тебя всегда будет выбираться одна ветка if. Зачем тогда вообще этот if?
источник

АК

Александр Караев... in pro.cxx
Alex
Есть, меня ж неспроста выбесила эта фишка if constexpr. Непонятно, за каким чёртом валидировать код, если он всё равно будет выпилен. Вот пример из жизни:

https://godbolt.org/z/8b3xWq
template <class T>
int f(T t) {
 if constexpr (sizeof(T) > 0) {
   return 1;
 }
 else {
   return T::wtf;
 }
}

f(1);


Этот код прекрасно компилируется
источник

A

Alex in pro.cxx
В реальном коде это было внутри лямбды, которая коллбэк, что-то типа визитора, и эта лямбда вызывалась с совершенно разными типами, из которых мне нужно было отпилить то, что мне не интересно и компилиться не должно. Шаблонизировать этот контекст можно только искусственным раздуванием кода.
источник

АК

Александр Караев... in pro.cxx
Alex
В реальном коде это было внутри лямбды, которая коллбэк, что-то типа визитора, и эта лямбда вызывалась с совершенно разными типами, из которых мне нужно было отпилить то, что мне не интересно и компилиться не должно. Шаблонизировать этот контекст можно только искусственным раздуванием кода.
Он уже шаблонизирован, вероятно
источник

A

Alex in pro.cxx
ну, кстати, сейчас подумаю, решает ли шаблонная лямбда эту задачу.
А был бы шаблонизирован - не было бы ошибки компиляции. Которая была, и я убил на неё полдня.
источник