2011-12-16 14 views
8

Tôi đang tìm kiếm một thư viện disassembler Java x86 nên có các tính năng sau:Bất kỳ thư viện phân tách Java x86 linh hoạt hướng đối tượng nào?

  • tháo X86 Mã
  • Mô tả lệnh với các lớp Java X86 và Objects
  • Các lớp lệnh nên chấp nhận một vị khách trong đó có một generic trở lại giá trị

Vì vậy, nếu tôi có một số mã mà sẽ tháo rời như thế này:

MOV EAX, EBX 
CALL 1234 
JMP 88 

thì thư viện sẽ tạo ba đối tượng cho MOV, CALL và JMP. Sau đó, tôi triển khai một khách truy cập thực hiện những điều đa dạng (ví dụ: diễn giải, chuyển đổi thành x64 hoặc hướng dẫn cho kiến ​​trúc bộ vi xử lý khác).

Xin cảm ơn trước.

+0

Tôi không tin rằng tồn tại một bộ tách rời như vậy, bởi vì trình lắp ráp là thủ tục. Vì vậy, bạn không thể chuyển đổi từ thủ tục thành Object Oriented mà không cần thiết kế lại ứng dụng và phải được thực hiện bằng tay. – Zemzela

+0

Điểm không phải là về việc chuyển đổi thủ tục sang thiết kế hướng đối tượng. Tôi chỉ muốn một thư viện mô tả các thủ tục như các đối tượng Java và tôi có thể làm bất cứ điều gì tôi muốn với chúng. – belgther

+1

Nhưng tại sao bạn không sử dụng bộ tách rời x86 thông thường để tháo rời nhị phân và phân tích đầu ra bằng một Java-Programm. Sau đó bạn có thể đọc mã đã tháo rời trong danh sách các đối tượng đại diện cho các lệnh MOV hoặc CALL; hoặc bạn có thể cố gắng xây dựng một cấu trúc cây cố gắng xác định các phần tử con theo hướng dẫn nhảy. –

Trả lời

1

Tôi không biết về bất kỳ thư viện nào được triển khai hoàn toàn bằng Java. Mặc dù, tôi đã nghe nói về bộ tách rời distorm. Nó được phát triển trong C. Nhưng trình bao bọc Java có sẵn cho thư viện này. Có một cái nhìn vào nó. Nó có thể hữu ích cho bạn.

+0

Cảm ơn bạn đã gợi ý về sự biến dạng. Nhưng tôi thấy nó có hai nhược điểm: đầu tiên, nó không thực sự hướng đối tượng và hướng dẫn giải mã không chấp nhận khách truy cập. thứ hai, nó chứa các toán hạng dưới dạng một chuỗi, có nghĩa là chúng phải được phân tích cú pháp lại. – belgther

+1

Viết một trừu tượng cho khách truy cập cho một cái gì đó cung cấp cho bạn sự hỗ trợ chi tiết nên dễ dàng. Phần thực sự khó khăn là "phân tích cú pháp mã máy", và sự biến dạng có vẻ tốt ở đó. Ngoài ra, điều này không giống như phân tích chuỗi đối với tôi: http://code.google.com/p/distorm/source/browse/trunk/examples/java/distorm/src/diStorm3/Operand.java – tucuxi