Страница 1 из 1

inline

СообщениеДобавлено: 07.04.2021 04:21:18
Seenkao
Интересует будет ли inline работать из скомпилированной DLL/SO библиотеки? (по моему я бред написал... это надо реализовывать самому, если так уж важно подобное?)

Re: inline

СообщениеДобавлено: 07.04.2021 04:47:47
скалогрыз
что значит "inline" из скомпилированной DLL?

из динамической библиотеки функции загружаются адресом (GetProcAddress).
адрес является агрументом для инструкции call (и ей подобной на целевой архитектуре)
что уже и есть НЕ-inline.

Чтобы сделать из некой функции подгруженной из DLL/SO inline, необходимо модифицировать собственный код, заменив все места вызова "call" непосредственно на тело функции. (Тело функции найти несложно, есть же её адрес! но вот зармер тела функции можно либо предположить на основе информации о бинарном файле, либо прочитать из debug-info, если он есть)
Кроме "копируемое" тело функции необходимо так же менять, чтобы использовались правильные переменные, регистры и адреса памяти.

...общий смысл - переделывать "произвольную функцию" из DLL/SO в inline, это задача на дисассемблирование и перекомпиляцию.
Задачу можно решить, если
1) есть надёжный и достоверный DebugInfo (привет Cheb-у)
2) если решать её нужно разово, для конкретного приложения (н.р. используется для взлома)

Проще уж взять какой-нить JIT компилятор, и загружать код из удобного байткода, чем машинных инструкций.

И на .dll это тоже вполне себе ложится, т.к. dll-ка может возвращать байт код функции, который при исполнении JIT-ить...
Хотя... даже это не выход, ведь следующий шаг для inline-а это вшить тело одной функции в другую, а это вновь задача, на разбор код, и соединение переменных и их местоположения.

...а зачем тебе это? пишешь свой .NET?

Re: inline

СообщениеДобавлено: 07.04.2021 04:59:21
Seenkao
Нет, я для информации.

Благодарю за развёрнутый ответ. Как и писал "бред" спросил. Если реализовывать подобное, то самому код писать... будет ли овчинка выделки стоить? )))

Просто проверил работает или нет инструкция inline - в обычном коде, да работает. Что позволит избежать "бредовых" (по моему мнению) ситуаций с кодом.