Yuri
Читал уже, тут как перехватить функцию из либы
Yuri
Мне же нужно из бинарника.
Sergey
Мне же нужно из бинарника.
Если он собран без rdynamic, можешь про это забыть.
Yuri
Как мне сказали раньше, метод похож на тот, когда в начало подменяемой функцию пихают джамп на новую функцию. Такие примеры я тоже смотрел, в ответ мне сказали, что «там предполагается, что есть исходники/объектники хукаемых функций»
Yuri
Если он собран без rdynamic, можешь про это забыть.
Не знаю как он собран, но люди успешно так делают.
Sergey
Не знаю как он собран, но люди успешно так делают.
Если делают, значит он всё-таки собран с rdynamic, либо используют тяжёлый ptrace.
Yuri
Как можно проверить?
Sergey
Как можно проверить?
objdump -x имя_бинарника. Сейчас сказать не могу, чем отличается, не помню. Собери два бинарника, с rdynamic и без rdynamic, и посмотри, чем отличаются.
Sergey
Могу точно сказать, что на таблицу символов нужно смотреть.
Yuri
Таблица символов, как метод подмены? Где то подобное видел
Sergey
Возможно, rdynamic недостаточно, а ещё нужен fPIE, но это не точно.
Yuri
С таким параметром, мне говорили что нужно собирать либы
Sergey
С таким параметром, мне говорили что нужно собирать либы
Библиотеки собираются с fPIC. Хотя разницы между fPIC и fPIE практически никакой. Исполняемые файлы обычно статические, собранные без fPIE. Это, предположительно, может помешать подмене.
Yuri
Какие есть способы подмены?
Yuri
То что другие патчат ядро сервера, я видел своими глазами
Sergey
Какие есть способы подмены?
Я тебе отправлял ссылку выше.
Yuri
Это один из способов
Sergey
То что другие патчат ядро сервера, я видел своими глазами
Там свои методы, основанные на ftrace, если я не ошибаюсь.
Yuri
Еще мне говорили, что без асм там не обойтись
Sergey
Это один из способов
Это один из наиболее простых. Остальные ты и сам знаешь.
Yuri
Как я подозреваю, там что то завязано на получении адреса заменяемой функции, создании её интерфейса, м послудающей замене
Anonymous
Как я подозреваю, там что то завязано на получении адреса заменяемой функции, создании её интерфейса, м послудающей замене
статьи об этом даже на хабре есть, можешь про ptrace погуглить и инжект с помощью него
Vitaliy
Я не могу понять дизайн optional. Он требует динамической аллокации ?
Vitaliy
А если не стандартный, а бустовый ?
Vitaliy
Не требует. Зачем?
Я тоже не вижу зачем, но в тех реализациях, которые совместимы с C++11 я не могу найти явного подтверждения. Там достаточно запутанный код ₽
Igor
Я тоже не вижу зачем, но в тех реализациях, которые совместимы с C++11 я не могу найти явного подтверждения. Там достаточно запутанный код ₽
If an optional<T> contains a value, the value is guaranteed to be allocated as part of the optional object footprint, i.e. no dynamic memory allocation ever takes place.
Vitaliy
Это цитата cppreference ?
Igor
Да, то же самое в стандарте написано.
Igor
Я не могу понять дизайн optional. Он требует динамической аллокации ?
нет, optional<Some> занимает на стеке sizeof(Some) + sizeof(bool) и динамическими аллокациями не пользуется
Vitaliy
как не видишь? там буфер необходимый под placement new.
Окей, ещё предстоит выбрать реализацию.
Vitaliy
А вообще смотрю объект который будет обеспечивать роль nullable object при сохранении в БД.
Vitaliy
Люди зачем-то придумали использовать shared_ptr
Maksym
потому что не все хотят буст тащить, а 17-й стандарт только подвезли
Vitaliy
потому что не все хотят буст тащить, а 17-й стандарт только подвезли
Есть header only реализации это раз. Бусины уже затащен это два ))))
Nikita
зато в shared_ptr можно хранить объекты, которые нельзя ни копировать, ни перемещать))
Vitaliy
Люди зачем-то придумали использовать shared_ptr
И особенно странно выглядит shared_ptr<string>
Vitaliy
Когда стринги сам заботится о своих ресурсах
Anatoly
И особенно странно выглядит shared_ptr<string>
а если return std::make_shared<std::string>(1'000'000, '0'); ? и тебе банально надо расшарить большой объект среди клиентов?
Anatoly
Люди зачем-то придумали использовать shared_ptr
от безысходности, тогда как с optional стало проще моделировать "либо известно значение, либо нет". shared_ptr все же не про то.
ttldtor
Зачем 10 лет? Просто модуль ядра написать хотя бы для начала.
Anatoly
Передачу по ссылке никто не отменял
а кто гарантирует, что этот объект еще будет жить?
Nikita
Передачу по ссылке никто не отменял
такое пройдёт, только если чётко определён владелец строчки
Alexander
Передачу по ссылке никто не отменял
лол, тебе шеред нужен, чтобы у стринга не вызвался деструктор раньше времени!
Vitaliy
а кто гарантирует, что этот объект еще будет жить?
Такие ситуации обычно возникают, если в лямбду значение захватить. У нас на проекте таких ситуаций вроде нету.
Aidar
Когда стринги сам заботится о своих ресурсах
тут недавно чувак делал cow зачемто
Ivan
ну, cow может быть полезен если есть дофига одинаковых RO ресурсов
Andrey
ну, cow может быть полезен если есть дофига одинаковых RO ресурсов
Угу, при этом изменения приватные и бывают редкими в процентах от пользователей.
Dmitry
нееш
ttldtor
лять, почему не создать ещё один чат про крипту и туда спамить вакансиями?
ttldtor
https://github.com/boost-experimental что-нибудь из этого попадёт в бусты или это слишком революционное?
Nikita
Если софт проприетарный то вы скорее всего не имеете права это делать
Если имеет право динамически линковаться, то имеет
Alexander "SonnySlave"
http://blincubator.com/
ttldtor
ну там (инкубатор) 2 из 3 тех же либ. te пока нет. Вообще от Кшиштофа либки не принимают. Лицом не вышел, видимо. Уже и переименовался в Криса, чтобы имя было проще прозносить, а все равно не берут в бусты)
Nikita
И особенно странно выглядит shared_ptr<string>
COW отменили, жирные строки теперь копируются
Alexander "SonnySlave"
Эм, че?
раньше в одной имплементации строк (от gcc) строки были COW
Oleg
я в курсе
Denis
с появлением мув семантики cow реализация стала сасай
Oleg
но сейчас там и без ков все норм
Andrey
Нет, зависит от алаймента, смотри реализацию
Скорее нужно смотреть, что стандарт гарантирует про выравнивание.
Nikita
но сейчас там и без ков все норм
"норм", если строки маленькие