Thứ Bảy, 2 tháng 7, 2011

OllyDbg - Tut8

I. Giới thiệu chung

Với phần 8 của loạt tuts này, phần này tập trung vào giới thiệu về vòng lặp và các câu lệnh liên quan tới chuỗi. Bài viết sẽ không sa đà vào giải thích cặn kẽ từng cấu trúc của vòng lặp mà sẽ đi nhanh và tập trung nhấn mạnh vào những phần quan trọng. 

II. Giới thiệu về vòng lặp

Một vòng lặp là một chuỗi các lệnh được lặp lại. Số lần lặp có thể đã được xác định trước hoặc phụ thuộc vào điều kiện. Thông thường trong Asm thì bộ đếm vòng lặp thường là thanh ghi ECX, nó được khời tạo bằng số lần lặp. Sau khi thực hiện xong các lệnh bên trong vòng lặp giá trị của thanh ghi ECX sẽ tự động giảm đi 1. Nếu như giá trị của ECX còn khác 0 thì các lệnh trong vòng lặp còn tiếp tục được thực hiện , còn nếu như ECX bằng 0 thì sẽ thoát khỏi vòng lặp và thực hiện các lệnh tiếp theo bên dưới vòng lặp. Lấy ví dụ minh họa:

XOR ECX, ECX\ Đoạn lệnh này thực hiện nhiệm vụ khởi gán cho thanh ghi
ADD ECX, 15 / ECX.Số lần lặp lúc này sẽ là 15 và được lưu trong thanh ghi ECX.
LOOP:
DEC ECX // Giá trị của thanh ghi ECX sẽ được giảm đi 1
……………… \ Thực hiện các lệnh trong thân vòng lặp
……………… /
TEST ECX, ECX \ Chừng nào giá trị của ECX còn khác 0
JNE LOOP / thì còn tiếp tục thực hiện

Minh họa ví dụ trên trong Olly như sau :


Vùng mà tôi khoanh vàng ở trên hình đó chính là vòng lặp, các lệnh trong vòng lặp này sẽ được thực hiện lặp lại cho tới khi nào thanh ghi ECX có giá trị 0. Các câu lệnh bắt đầu từ 0×00401008 cho tới 0x0040100C chính là thân của vòng lặp. Do chỉ mang tính chất minh họa nên tôi để toàn lệnh NOP, các bạn có thể thay thế bằng các lệnh khác. Hiện tại chúng ta đang ở tại câu lệnh XOR ECX, ECX , nhấn F7 để trace và quan sát giá trị của thanh ghi ECX.

Download toàn bộ bài viết: http://kienmanowar.files.wordpress.com/2008/09/ollydbg_tut8.pdf

Source: Kienmanowar.wordpress.com    

Không có nhận xét nào:

Đăng nhận xét