✡️Register
Mục đích mà của các Register:
Giúp truy xuất dữ liệu nhanh chóng
Tốc độ xử lí dữ liệu cao
Mỗi thanh ghi sẽ có các chức năng khác nhau phục vụ cho các mục đích xử lí dữ liệu khác nhau.
Có 10 thanh ghi ở cấu trúc x86_32 và 16 thanh ghi đối với cấu trúc x86_64.
Có thể nhớ kích thước của các thanh ghi như sau:

Trong đó có 1 vài thanh ghi cần lưu ý như sau:
RAX: là thanh ghi đích, hiểu đơn giản thì nó là nơi lưu trữ các kết quả của phép toán số học.
RBX: là thanh ghi cơ sở.
RCX: là thanh ghi counter. Ví dụ trong 1 vòng for thì thanh ghi RBX sẽ lưu trữ giá trị index i.
RDX: là thanh ghi dữ liệu. Nó sẽ hữu ích trong phép toán nhân chia mà ta có kết quả lớn.
RIP: thanh ghi con trỏ của instructor(lệnh).
RSP: thanh ghi con trỏ đỉnh ngăn xếp (stack).
RBP: thanh ghi con trỏ đáy(base) ngăn xếp (stack).
Tạm thời để không bị lẫn thì mình sẽ dừng lại đây. Trong quá trình thực hành thì mình sẽ nói sau. Để hiểu hơn về thanh ghi tôi sẽ demo 1 đoạn code dưới đây:


để bạn tránh hiểu nhầm thì 1 thanh ghi sẽ chỉ chứa được địa chỉ và giá trị. Nó không thể chứa được 1 chuỗi :v mà chỉ chứa địa chỉ của 1 chuỗi.
-----------------------------------------------------------------------------------------------------

==> EDX lưu trữ kích thước 15 bytes của strings "In ra..."
-----------------------------------------------------------------------------------------------------

==> sau khi thực hiện được 2 instruction tiếp theo thì giá trị thanh ghi sẽ được thay đổi như đúng những gì ta mong muốn.
-----------------------------------------------------------------------------------------------------

Sau khi instruction int 0x80 được gọi thì chúng ta sẽ thu được dòng chữ mong muốn. Nhưng chú ý một điều là EAX bây giờ đã được tăng lên 0x15 bằng đúng với kích thước của dòng chữ kia. Thì bạn có thể nhớ lại EAX có chức năng gì.
-----------------------------------------------------------------------------------------------------
Tương tự với phần còn lại ta sẽ thu được kết quả mà ta mong muốn:
![]()
Last updated