2011-08-08 33 views
19

Tôi muốn dịch X86_64, x86, thực thi ARM thành LLVM IR (tháo gỡ).Dịch mã machinecode thành LLVM IR (tháo gỡ/lắp ráp X86_64. X86. Mã ARM vào mã bit LLVM)

Bạn đề xuất giải pháp nào?

+0

Tôi đã kiểm tra llvm-objdump, nhưng như xa như tôi hiểu, nó tạo ra x86_64/x86 lắp ráp - những gì tôi muốn là LLVM lắp ráp. –

+1

Có rất nhiều bộ tháo rời cho x86_86, x86, cánh tay. Có lẽ một số trình biên dịch assemlber với mục tiêu "LLVM IR"? –

+7

Đó không phải là tháo gỡ, đó là bản dịch! –

Trả lời

2

Tôi nghi ngờ sẽ có giải pháp phổ quát (suy nghĩ về các nhánh gián tiếp, vv), LLVM IR có nhiều "cấp cao hơn" so với bất kỳ bộ lắp ráp nào. Mặc dù có thể dịch trên cơ sở cho mỗi BB. Bạn có thể muốn kiểm tra các dự án llvm-qemu và libcpu trong số những người khác.

+3

LLVM có thể nắm bắt thông tin cấp cao, IMHO không bắt buộc. Tôi tin rằng có thể tồn tại giải pháp - có lẽ không phải là một cách tiếp cận phổ quát, nhưng vẫn còn. Cảm ơn bạn đã tham khảo tuyệt vời: llvm-qemu và libcpu trông thú vị. :) –

+1

Btw. Nếu có [có thể LLVM để trsnalation Javascript và nó thực sự thực hiện] (http://stackoverflow.com/questions/7295922/what-platform-can-i-compile-binaries-for-using-llvm-low-level-virtual -machine/7325817 # 7325817), một hội đồng khác cũng có thể;). Câu hỏi, bạn và khi nào sẽ làm điều đó :). –

10

Cân nhắc sử dụng công cụ RevGen được phát triển trong số S2E project. Nó cho phép chuyển đổi x86 nhị phân sang LLVM IR. Mã nguồn có thể được kiểm tra từ chi nhánh Revgen của kho GIT có sẵn bằng url https://dslabgit.epfl.ch/git/s2e/s2e.git.

+1

Tôi thấy bạn đã [đề cập ở đây] (http://stackoverflow.com/a/9059978/544721) một [giấy] khác (http://infoscience.epfl.ch/record/149975/files/x86-llvm- translator-chipounov_2.pdf) liên quan đến x86 -> LLVM dịch. Cảm ơn bạn đã tham khảo tuyệt vời. –

+0

Tôi gặp sự cố với các liên kết được cung cấp. 'git clone https: // dslabgit.epfl.ch/git/s2e/s2e.git' không thể sao chép: /. –

+0

Tôi chưa gặp bất kỳ sự cố nào trên Ubuntu 10.10. Đảm bảo bạn đã cài đặt git và sửa cài đặt tường lửa/proxy. Ngoài ra bạn có thể tìm thấy một số tài liệu liên quan trên trang web của dự án _https: //s2e.epfl.ch/embedded/s2e/index.html_ – bsa2000

0

Chỉ cần gửi một số tài liệu tham khảo về dịch ARM nhị phân để LLVM IR:

giải giáp - cánh tay nhị phân để llvm ir disassembler

https://code.google.com/p/disarm/

Tuy nhiên, tôi đã không thử nó, do đó không chắc chắn về nó chất lượng và sự ổn định. Bất kỳ ai khác có thể đăng thông tin bổ sung về dự án này?

+1

Liên kết được cung cấp không hoạt động –

+0

Có vẻ như tác giả đã rút nó ... May mắn thay, tôi có một svn địa phương để sao lưu mã của nó. – HackNone

7

Liên quan đến công cụ RevGen được đề cập bởi @ bsa2000, giấy mới nhất "A compiler level intermediate representation based binary analysis and rewriting system" này đã chỉ ra một số hạn chế trong S2E và Revinc.

Tôi kéo chúng ra khỏi đây.

  1. thiếu sót của bản dịch động:

    S2E [16] và Revnic [14] trình bày một phương pháp để tự động dịch x86 để LLVM sử dụng QEMU. Không giống như cách tiếp cận của chúng tôi, các phương pháp này chuyển đổi các khối mã thành LLVM khi đang giới hạn việc áp dụng LLVM chỉ phân tích một khối tại một thời điểm.

  2. IR không đầy đủ:

    Revnic [14] và RevGen [15] khôi phục một IR bằng cách sáp nhập các dịch khối, nhưng IR bị thu hồi là không đầy đủ và chỉ có giá trị cho thực hiện hành; do đó, các phân tích toàn bộ chương trình khác nhau sẽ cung cấp thông tin không đầy đủ.

  3. không chồng trừu tượng hoặc quảng bá thông tin

    Hơn nữa, mã dịch giữ lại tất cả các giả định của ban song phương nary về cách bố trí ngăn xếp. Chúng không cung cấp bất kỳ phương thức nào để có được ngăn xếp trừu tượng hoặc quảng bá các vị trí bộ nhớ tới các ký hiệu, điều cần thiết cho việc áp dụng một số phân tích cấp nguồn .

1

Có dự án mới, là trong một số giai đoạn đầu, The libbeauty: https://github.com/jcdutton/libbeauty

Điều về dự án: Libbeauty: Một cụ Xếp-Kỹ thuật, 24 tháng 12 năm 2013, Michael Larabel - http://www.phoronix.com/scan.php?page=news_item&px=MTU1MTU

Nó chỉ hỗ trợ tập hợp con của x86_64 làm đầu vào ngay bây giờ. Một trong những mục tiêu của dự án - là để có thể biên dịch LLVM IR được tạo trở lại để lắp ráp để có được nhị phân có cùng chức năng.

+0

Dự án có vẻ đẹp! Cảm ơn! –

8

mcsema là bộ tăng tốc nhị phân chất lượng sản xuất. Phải mất x86 và x86-64 và tĩnh "nâng" nó lên LLVM IR. Nó được duy trì tích cực, BSD được cấp phép, và có các bài kiểm tra và tài liệu mở rộng.

https://github.com/trailofbits/mcsema

Các vấn đề liên quan