Khi bạn nhìn vào nhị phân
48 c7 c0 01 00 00 00
bạn cần phải tháo rời nó để hiểu ý nghĩa của nó.
Thuật toán tháo rời không khó, nhưng phức tạp. Nó giả sử tìm kiếm nhiều bảng.
Các thuật toán được mô tả trong tập 2 của hướng dẫn sử dụng cho nhà phát triển Intel,
Intel® 64 and IA-32 Architectures
Software Developer’s Manual
Volume 2 (2A, 2B & 2C):
Instruction Set Reference, A-Z
Bạn bắt đầu đọc từ chương gọi là INSTRUCTION FORMAT
.
Hoặc, có những cuốn sách tốt mà dành toàn bộ chương về chủ đề này, chẳng hạn như
X86 Instruction Set Architecture, Mindshare, by Tom Shanley.
Một chương toàn là dành riêng cho tháo nhị phân X86.
Hoặc bạn có thể bắt đầu đọc các thuật toán tổng quát từ một hướng dẫn cho cùng một ngôn ngữ được thực hiện bởi AMD:
AMD64 Architecture
Programmer’s Manual
Volume 3:
General-Purpose and System Instructions
Ở đây, trong chương Instruction Encoding
bạn sẽ tìm thấy automaton định nghĩa ngôn ngữ này của hướng dẫn, và từ sơ đồ đồ họa này bạn có thể viết dễ dàng bộ giải mã.
Sau khi bạn thực hiện việc này, bạn có thể quay lại Sách hướng dẫn sử dụng Intel, ổ đĩa thứ 2 và sử dụng nó làm sách tham khảo.
Tôi cũng thấy hữu ích là reverse engineering class từ http://opensecuritytraining.info/. Trang web này được tạo ra bởi một sinh viên Phd từ CMU, hầu hết nó không được thực hiện tốt, nhưng nó đòi hỏi thời gian dài hơn để nghiên cứu và áp dụng nó.
Sau khi bạn hiểu các ý tưởng cơ bản, bạn có thể xem qua một dự án miễn phí triển khai thuật toán. Tôi thấy hữu ích cho dự án distorm.Lúc đầu, điều quan trọng là không nhìn vào các dự án trừu tượng (như qemu hoặc objdump), mà cố gắng thực hiện các dissasemblers cho nhiều ngôn ngữ trong cùng một mã như bạn sẽ bị lạc. Distorm
chỉ tập trung vào x86 và thực hiện nó một cách chính xác và đầy đủ. Nó chuyển tải bằng ngôn ngữ chính thức định nghĩa ngôn ngữ X86, trong khi sách hướng dẫn sử dụng Intel và AMD xác định ngôn ngữ X86 bằng cách sử dụng ngôn ngữ tự nhiên.
Dự án khác hoạt động tốt là udis86.
Tôi đã nhìn thấy các câu hỏi tương tự tại đây. Nếu tôi có thể tìm thấy điều này trên Google, tôi sẽ không hỏi. Thực tế là tôi nhận thức được tài liệu tham khảo tôi đăng trong câu hỏi của mình cũng cho thấy tôi không quá lười biếng để tự tìm kiếm. – Christoph
@Oded, googling cho "tiền tố hướng dẫn x86 0x48" khá phức tạp nếu bạn không biết bạn đang tìm kiếm gì ... – Griwes
@Oded Tôi đã viết lại câu hỏi của mình để có nhiều nhà phát triển cụ thể hơn. Với tham chiếu (thực sự tốt!) Tại x86asm.net, tôi đoán tôi chỉ cần hiểu cách opcode bị phá vỡ. Griwes đã giúp với điều đó. – Christoph