✡️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:

Bạn có thể hình dung các thanh ghi nó như sau: AH = AL = 8 bits, AX = 16 bits

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:

Sau khi thực hiện instruction <_start> thì ecx sẽ thay đổi như dưới
ecx bây giờ sẽ lưu trữ địa chỉ của dòng chữ "In ra man..."

để 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