Чтобы не приходилось возиться с экспортами, vmprotect по хорошему должен уметь делать demangling
Определить что для символа стоит использовать librustc_demangle вместо того что сейчас vmprotect использует сейчас можно по одному из двух признаков:
Префикс: _Z (по аналогии с C++, однако там возможный синтаксис шире чем встречается в C++)
Суффикс: 17hXXXXXXXXXXXXXXXXE (X-hexadecimal number, ::h... суффикс в Rust означает какому пакету принадлежит функция)
После которого опционально следует .llvm.XXX... (X - uppercase hex / _ / @)
- legacy схема mangling rust, библиотека что я прислал собрана с ней
Префикс: _R
Суффикс .llvm.XXX... тут тоже может присутствовать (Он добавляется когда включена параллельная компиляция кода)
- v0 схема mangling rust (https://doc.rust-lang.org/beta/rustc/sy ... bol-format)
IDA PRO по умолчанию применяет эту библиотеку для Rust кода:
https://docs.hex-rays.com/user-guide/pl ... gling-name
Краш при использовании системы лицензирования
Re: Краш при использовании системы лицензирования
На самом деле немного не так. Он пересекается с GNU_V3, поэтому деманглинг от GCC частично обрабатывает символы от Rust:
https://github.com/gcc-mirror/gcc/blob/ ... dem.c#L164
P.S. Добавлено в 2377.
Re: Краш при использовании системы лицензирования
> На самом деле немного не так. Он пересекается с GNU_V3, поэтому деманглинг от GCC частично обрабатывает символы от Rust:
Это я понимаю, под признаками я имел в виду как отличить идентификаторы что gnu v3 demangler будет неправильно переваривать - у Rust всегда последний компонент это ::h0000000000000000, но вы и сами разобрались судя по всему
Красота какая, теперь в Rust при желании можно не декларативно через код выбирать функции для защиты, спасибо!
Это я понимаю, под признаками я имел в виду как отличить идентификаторы что gnu v3 demangler будет неправильно переваривать - у Rust всегда последний компонент это ::h0000000000000000, но вы и сами разобрались судя по всему
Красота какая, теперь в Rust при желании можно не декларативно через код выбирать функции для защиты, спасибо!