2014-10-19 2 views
0

저는 LLVM의 초보자입니다. 그리고 프로그램의 모든 호출 명령어를 "스택의 다음 명령어 주소를 push하거나 호출 수신 함수로 점프"로 바꾸고 싶습니다. 그렇다면이 대체품을 어디에서 구현할 수 있는지 아는 사람이 있습니까? 패스를 작성하고 clang 컴파일 체인에 삽입 하시겠습니까? 어떻게 교체 할 수 있습니까?호출 명령어를 LLVM으로 바꿉니다.

감사합니다.

+0

왜 당신은 스택에 다음 명령을 밀어할까요? LLVM 세계에서 의미가있는 것은 아닙니다. – Puppy

+0

사실, 나는 함수 호출/복귀 사이트에 대한 보호를하고 싶다. 죄송합니다, 스택에서 "다음 명령어 주소"를 눌러야합니다. – xiaogw

답변

0

새로운 LLVM을 만드는 것이 좋습니다. 컴파일러가 생성 할 기계 코드를 알 수 있도록 내장 함수에 대한 타겟 별 정의를 제공해야합니다. 귀하의 경우에는 푸시 + 점프를 구현하는 타겟 별 정의를 제공해야합니다.

당신이 당신의 고유이 후에는 당신의 고유로을하지 않은 모든 call 지침은 LLVM IR를 검색 당신의 고유에을 것을 호출 지침을 대체하는 LLVM 패스를 만들 수 있습니다. 새로운 고유 기능을 추가하는 방법에 대한

문서 : 자신의 LLVM을 구현하는 방법에 대한 http://llvm.org/docs/ExtendingLLVM.html

튜토리얼 통과 : http://llvm.org/docs/WritingAnLLVMPass.html

+0

호출 명령어는 호출 후 명령어 주소를 스택으로 푸시합니다. 그래서 나는 call 명령어를 push + jump 명령어로 대체하려고합니다. ELF의 모든 호출 명령어를 push + jump 명령어로 대체하려고합니다. – xiaogw

+0

귀하의 설명에 따라 위의 답변을 업데이트했습니다. –

+0

답변 해 주셔서 감사합니다. LLVM 내장 함수에 관한 문서를 찾으려고했지만 초보자를위한 온라인 예제가 거의없는 것처럼 보입니다. 지금까지 나는 콜 인스트럭션과 호출 (ret)에 대한 명령어에 대해 IR을 통해 몇 가지 검색을 수행 할 수 있다고 생각합니다. 그러나 어셈블리로 만드는 방법에 대해서는 아직 모릅니다. 내재적이거나 도움이 될만한 것에 대한 자세한 내용을 제공 할 수 있습니까? 다시 한 번 감사드립니다 – xiaogw