В настоящее время я работаю над инструментом, который идентифицирует загрузки и хранения доступа к глобальным и переменным поля в произвольных программах. Кроме того, доступные переменные должны быть идентифицированы по именам/идентификаторам исходного уровня. Для этого я скомпилирую исходный код программы под диагностикой в LLVM IR с информацией об отладке. Пока что так хорошо, генерируемые узлы метаданных содержат требуемые идентификаторы уровня источника. Тем не менее, я не могу подключить некоторые ИЛ-идентификаторы LLVM и информацию в метаданных.LLVM IR: идентификация переменных с узлами метаданных
Для примера рассмотрим SATIC член класса:
class TestClass {
public:
static int Number;
};
Соответствующий LLVM IR выглядит следующим образом:
@_ZN12TestClass6NumberE = external global i32, align 4
...
!15 = !DIDerivedType(tag: DW_TAG_member, name: "Number", scope: !"_ZTS12TestClass", file: !12, line: 5, baseType: !16, flags: DIFlagPublic | DIFlagStaticMember)
В этом контролируемом примере я знаю, что "@ _ZN12TestClass6NumberE" является идентификатор для «Номер». Однако, в общем, я не вижу, как я могу узнать, какие IR-идентификаторы соответствуют тем метаданным.
Может ли кто-нибудь помочь мне?