2014-10-19 3 views
0

Я новичок в LLVM. И я хочу заменить все инструкции вызова в программе «push next address address at stack, jump to callle function». Так кто-нибудь знает, где я могу реализовать эту замену? Напишите пропуск и вставьте в цепочку компиляции clang? И как я могу реализовать эту замену?Заменить команду вызова с помощью LLVM

Спасибо!

+0

Почему вы хотите, чтобы нажать на следующую команду в стеке? Это не то, что имеет смысл в мире LLVM. – Puppy

+0

На самом деле, я хочу сделать некоторую защиту на сайте функции call/return. Извините, он должен нажать «следующий адрес инструкции» в стеке. – xiaogw

ответ

0

Я предлагаю создать новый LLVM instrinsic. Вы должны будете предоставить определение конкретной цели для вашего внутреннего, чтобы компилятор знал, какой машинный код будет сгенерирован. В вашем случае вы должны указать конкретное определение, которое реализует push + jump.

После того, как у вас есть внутренние вы можете создать проход LLVM, который ищет в LLVM IR для всех call инструкций, которые не являются к вашему внутреннему и заменяет их с инструкциями вызова, которые являются к вашему внутреннему.

Документация по добавлению новой внутренней функции: http://llvm.org/docs/ExtendingLLVM.html

Учебник о том, как реализовать свой собственный LLVM передать: http://llvm.org/docs/WritingAnLLVMPass.html

+0

Команда вызова будет вызывать адрес инструкции после вызова в стек. Поэтому я хочу заменить инструкцию вызова инструкциями push + jump. Я хочу заменить всю команду вызова в ELF инструкциями push + jump. – xiaogw

+0

Я обновил свой ответ выше, основываясь на ваших разъяснениях. –

+0

Спасибо Майку за ваш ответ. Я попытался найти некоторые документы о внутренней функции LLVM, но, похоже, для новичков довольно мало примеров онлайн. До сих пор, я думаю, что я могу выполнить поиск по IR по команде вызова и инструкции, следующей за вызовом (для ret). Но до сих пор не знаю, как это сделать в сборке. Можете ли вы предоставить более подробную информацию о внутреннем или что-нибудь, что может помочь. Еще раз спасибо – xiaogw

Смежные вопросы