CJK Workbench
Quy trình

Dịch ngược thực hành, từng hàm một

03
Tình huống

Cách bắt đầu dịch ngược thực hành

Chọn một hàm nhỏ từ chương trình C do chính bạn biên dịch và nghiên cứu nó từ lệnh đầu tiên đến return cuối cùng. Luật và điều khoản giấy phép khác nhau theo từng quốc gia, nên chỉ dùng mã của chính bạn hoặc tệp luyện tập. Bốn bước ở bên dưới.

01

Mở thư mục dự án của bạn

Chọn một thư mục làm việc chứa mã nguồn C, một bản sao của tệp đã biên dịch và, về sau, listing đã xuất.

02

Xuất listing văn bản

Để Shell chạy lệnh xuất của disassembler trên bản sao, hoặc tự lưu listing, để kết quả là một tệp văn bản.

03

Nhờ giải thích

Nhờ agent đọc listing và giải thích hàm từng dòng, rồi lưu ghi chú bằng write_file.

04

Kiểm tra câu trả lời

So sánh ghi chú với mã nguồn và listing của bạn, đọc diff trong Ask first, và kiểm thử kết quả trong phòng lab nếu điều đó hợp pháp.

Một listing minh họa để đọc

add_numbers.asm
; add_numbers.asm - teaching listing, x64 Windows
; Returns the sum of its first two integer arguments.
; Argument 1 arrives in ecx (low half of rcx).
; Argument 2 arrives in edx (low half of rdx).
add_numbers:
    mov eax, ecx    ; copy argument 1 into eax
    add eax, edx    ; add argument 2, the sum stays in eax
    ret             ; return to the caller, result in eax

Hàm này cộng hai số nguyên. Theo quy ước Windows x64, các đối số đến trong ecx và edx, tổng được tạo trong eax, và ret trả quyền điều khiển về nơi gọi.

Hai bài tập cho lớp dịch ngược

Bắt đầu với một hàm do bạn viết

Câu hỏi thường gặp của người mới là bắt đầu học assembly như thế nào, và câu trả lời là một hàm do chính bạn viết. Hãy viết một hàm C ngắn, biên dịch nó và xuất listing dưới dạng văn bản. read_file mở listing và agent giải thích từng lệnh: thanh ghi nào giữ đối số nào, stack làm gì và kết quả trả về đâu. write_file lưu các phần giải thích đó trong notes/begin.md. Trong Plan only, agent liệt kê các bước này trước. Chưa có gì được chạy. Sau đó chuyển sang Ask first và đọc diff trước mỗi lần lưu. Cuối cùng so sánh ghi chú với mã nguồn của bạn và, nếu hợp pháp, kiểm thử hàm đã biên dịch trong phòng lab.

Lập tài liệu cho các hàm của thư viện của chính bạn

Một bài tập hay khi dịch ngược API là liệt kê các hàm mà thư viện của bạn công khai và ghi lại mỗi đối số làm gì. Hãy lưu danh sách các hàm được nhập và công khai từ công cụ của bạn dưới dạng văn bản, sau đó agent dùng grep tìm mọi lệnh gọi tới một hàm và read_file mở các dòng xung quanh. Nó soạn bảng nháp trong notes/api.md, và edit_file hiển thị mỗi thay đổi dưới dạng diff. Hãy bắt đầu với một hàm. Cùng phương pháp này giúp bạn khôi phục cách mã cũ của mình từng hoạt động. Agent có thể sai về kiểu hoặc mục đích, nên hãy so từng dòng với mã nguồn và bài kiểm thử của bạn trước khi chấp nhận.

CJK Workbench cho Windows

Làm việc với ví dụ của riêng bạn

Tải CJK Workbench ↗