LLVM находит инструкции загрузки / хранения, которые работают с кучей - PullRequest
1 голос
/ 03 марта 2020

Я работаю над некоторыми инструментами LLVM и хотел бы определить инструкции по загрузке и хранению, которые записывают в память кучи.

Сейчас я могу идентифицировать вызовы malloc et c. и я могу сказать, когда выделяется куча памяти. Есть ли в LLVM IR что-нибудь, что отличает загрузку / хранение в стеке от кучи? Я предполагаю, что нет.

Подход, который я думал использовать, состоял в том, чтобы отслеживать адреса памяти, возвращаемые malloc во время выполнения, а затем инструментальные вызовы к getelementptr, где во время выполнения я вижу, является ли базовый адрес тем, который имеет было выделено malloc. Я также назначил бы любые загрузки / хранилища, которые используют указатель, возвращаемый getelementptr, где код инструментария будет работать только в том случае, если адрес является адресом кучи.

У меня вопрос: как я могу определить такие нагрузки /магазины? Создает ли LLVM граф зависимостей данных или что-то в этом роде, к которому я могу обратиться, чтобы определить эти инструкции? По сути, я хочу идентифицировать все загрузки / хранилища, которые используют указатель, возвращаемый определенной инструкцией getelementptr.

Конечно, если есть более простой способ сделать это, пожалуйста, дайте мне знать. Я совсем новичок в этом.

...