2012-01-26 29 views
7

Tôi cần phải chuyển đổi mã nguồn lắp ráp x86 thành tệp .ll có thể đọc được LLVM của con người (còn gọi là ngôn ngữ assembly LLVM). Tôi có thể làm cái này như thế nào? Nếu không có giải pháp trực tiếp nào thì có thể thực hiện một giải pháp trong cơ sở hạ tầng LLVM với ít nỗ lực nhất có thể?Soạn thảo mã nguồn với LLVM

Tôi đoán, giải pháp mà tôi đang tìm kiếm sẽ là một số loại đối tác của llc chuyển đổi .s tệp trở lại .ll đại diện.

+3

Câu hỏi này đã được hỏi và trả lời. Không có giải pháp trực tiếp do nhiều thứ (ví dụ như các nhánh gián tiếp). Bạn có thể tìm thấy dự án như llvm-qemu và libcpu hữu ích cho bạn. Trong mọi trường hợp, câu hỏi này là một sự lừa đảo của http://stackoverflow.com/questions/6981810/translation-of-machinecode-into-llvm-ir-disassembly-reassembly-of-x86-64-x86 –

+1

Cảm ơn bạn. Tôi đã xem xét các dự án mà bạn đã đề cập. Thật không may, _llvm-qemu_ trông chết. Và _libcpu_ trông giống như đang đi theo cách riêng của nó trong phân tích cú pháp hơn là sử dụng cơ sở hạ tầng của LLVM (vì vậy nó dường như không hoàn toàn trong việc hỗ trợ x86 ISA). Trên thực tế, tôi nghĩ rằng công cụ tôi đang tìm kiếm nên thực hiện công việc của ** AsmPrinter ** của LLVM nhưng theo hướng ngược lại dịch các lệnh ISA gốc thành _MachineInstr_ LLVM-_MCInst_ của LLVM. – bsa2000

+0

Còn tiểu dự án LLVM ** llvm-mc ** thì sao? Nó có lớp _AsmParser_ có thể ăn tập tin .s và tạo ra biểu diễn của nó dựa trên lớp _MCInst_. Trong trường hợp này, phần duy nhất vẫn được hoàn tác là quay trở lại theo hướng ngược lại đối với lớp _MCLowering_ hướng tới đại diện dựa trên _MachineInstr_ của LLVM. – bsa2000

Trả lời

8

Chỉ dành cho những người vẫn đang tìm kiếm thêm thông tin về chủ đề này, tôi muốn chia sẻ thông tin về một dự án đang diễn ra (http://dslab.epfl.ch/proj/s2e) mà tôi đã tìm thấy trên web. Dự án có hai thành phần:

  1. x86-to-LLVM backend cho dịch động mã máy x86 để LLVM IR
  2. RevGen công cụ để phân tích tĩnh của mã nhị phân x86, có khả năng dịch x86, lắp ráp nội tuyến để LLVM IR

Đây là RevGen nguyên mẫu: RevGen lấy đầu vào là x86 nhị phân và xuất ra mô-đun LLVM tương đương theo ba bước. Đầu tiên, RevGen tìm kiếm tất cả các khối mã thực thi và chuyển đổi chúng thành các khối dịch LLVM. Thứ hai, khi không có thêm khối dịch để che phủ, RevGen biến đổi chúng thành các khối cơ bản và xây dựng lại biểu đồ dòng điều khiển của tệp nhị phân gốc theo định dạng LLVM. Thứ ba, RevGen giải quyết các cuộc gọi hàm bên ngoài để xây dựng mô-đun LLVM cuối cùng. Để phân tích động, bước cuối cùng liên kết mô-đun LLVM với thư viện thời gian chạy cho phép thực thi mô-đun LLVM.

+0

Những công cụ này là để làm việc với các chương trình đã được lắp ráp. trừ khi bạn nói hoặc là có thể sản xuất bitcoin LLVM/IR từ một x86 .ASM? – TechZilla

+0

@techzilla đã tìm thấy thứ gì đó bắt đầu từ mã nguồn x86? – franck

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