18:51
0
Các thanh ghi 32 bit
1. Nhóm các thanh ghi công dụng chung:
  • 8 Thanh ghi đa năng 32 bit: EAX, EBX, ECX, EDX, ESI, EDI, DBP, ESP dùng để lưu trữ tham số của các phép tính, tham số của các phép tính địa chỉ, và con trỏ bộ nhớ (bên ngoài), thanh ghi ESP đặc biệt chỉ dùng làm con trỏ ngăn xếp. 
  • 6 thanh ghi đoạn 16 bit: CS, DS, SS, ES, FS, GS dùng để lưu trữ bộ chọn đoạn để quản lý bộ nhớ trong mô hình phẳng hoặc phân đoạn. 
  • Thanh ghi cờ EFLAGS 32 bit dùng để giám sát 32 trạng thái của dử liệu đang tính toán trong các thanh ghi nói trên 
  • Thanh ghi con trỏ lệnh EIP dùng để lưu địa chỉ lệch của mã lệnh sắp tiến hành. thanh ghi này hầu như không cho phép truy cập, nếu muốn thì chỉ có thể dung lệnh call để đọc giá trị của con trỏ lệnh từ ngăn xếp. 
  • 4 thanh ghi quản lý bộ nhớ 48 Bit đó là: GDTR, LDTR, IDTR dùng để quản lý bộ nhớ (ram) 
  • 1 thanh ghi nhiệm vụ 64 bit dùng để điều khiển các chức năng đặc biệt khi hệ điều hành thay đổi cách quản lý bộ nhớ (ví dụ hệ điều hành dos thì quản lý bộ nhớ theo kiểu thực còn windows thì quản lý theo kiểu phân trang, bảo vệ…) 
  • 5 thanh ghi điều khiển 32 bit: CR0, CR1, CR2, CR3, CR4 
  • 8 thanh ghi 32 bit từ DR0 –DR7 debug dùng để kiểm tra quá trình debug bên trong vi xử lý.
2. Nhóm các thanh ghi tạm
đây là các thanh ghi trung gian từ 32 bit cho đến 127 bit, trong quá trình vi xử lý tiếp nhận mã lệnh từ tiểu hệ bộ nhớ L1, nó sẽ chia nhỏ cái lệnh đó ra thành nhiều vi lệnh rồi chuyển giao cho các bộ ALU tính toán, hoặc nếu có tính toán số thực thì nó sẻ chuyển giao cho bộ đồng xử lý toán học giải quyết, sau khi tính toán nó sẽ tổng kết số liệu lại rồi trả kết quả, đây là mô hình siêu đường ống cực kỳ phức tạp.
————–
Chi tiết
Nhắc lại kiến thức cũ về các thanh ghi 16bit
Khi 1 chương trình được nạp vào bộ nhớ thì nó bao gồm các phần sau đây:
  • code: chứa các mã lệnh,nó được nạp vào 1 phần của bộ nhớ tại 1 khoảng không gian vật lý riêng,phần này là code segment
  • data: chứa các dữ liệu của chương trình và các dữ liệu phát sinh,nó nạp vào data segment
  • stack: chứa địa chỉ quay về,cất và phục hồi các thanh ghi,nằm ở stack segment

Để quản lý bộ nhớ thì có kỹ thuật phân trang (paging) hoặc phân đoạn (segmentation).

Phân đoạn thì như trên đã nêu.các segment được chia ra và đặt “lung tung” trên bộ nhớ,hệ điều hành quản lý bằng cách tạo ra danh sách quản lý các vùng còn trống trên bộ nhớ

Trong mỗi segment cũng chia ra những phần nhỏ,ví dụ như code segment chẳn hạn chứa 1 dãy liên tục các lệnh liên tục nhau thì vị trí từng lệnh cũng được đánh dấu,đó là địa chỉ offset
Các thanh ghi phân đoạn(segment) sẽ làm nhiệm vụ đánh dấu địa chỉ của nơi bắt đầu các segment trên bộ nhớ
  • trong đoạn data segment:
  • SI : trỏ đến dữ liệu nguồn
    DI : trỏ đến dữ liệu đích
    BX :chỉ số nền
    DX : chỉ đến dữ liệu được hiển thị
    DS : trỏ đến vị trí bắt đầu data segment

  • trong đoạn code segment :
  • IP : trỏ đến lệnh kế tiếp được thực hiện
    CS : trỏ đến đầu code segment

  • trong đoạn Stack Segment :
  • SP : trỏ đến đỉnh stack
    BP : độ dời so với đỉnh
    SS : trỏ đến đáy stack segment
—-
Các thanh ghi 32 bit
Có thêm các thanh ghi mở rộng tên gọi mở rộng từ nhựng tên cũ
gồm các thanh ghi EAX EBX ECX EDX ESI EDI ESP EBP …



Thanh ghi EAX EBX ECX EDX :
Các thanh ghi này cũng có chức năng tương tự các thanh ghi AX BX CX DX
Tuy nhiên trong vì đây là các thanh ghi 32bit nên ta cũng có thể sử dụng các thanh ghi trong đó như là các thanh ghi
8bit 16bit 32bit tùy ý như EAX(32bit) AX(16bit) AH(8bit) AL(8bit)
Công dụng :
  • EAX : Dùng cho các phép toán,logic,chuyển dữ liệu
  • EBX : Dùng để lưu giữ địa chỉ
  • ECX : Dùng làm bộ đếm các vòng lặp
  • EDX : Dùng phối hợp EAX trong phép nhân chia …
  • EIP : thanh ghi con trỏ lệnh.đây là thanh ghi rất quan trọng.nó sẽ trỏ đến vị trí của lệnh kế tiếp khi 1 lệnh đuơc thực thi.Vì thế nó là 1 thanh ghi đặc biệt mà nó sẽ không tham gia vào các lệnh như là 1 toán hạng được
  • ESI EDI : các thanh ghi chỉ mục(index).Hay sử dụng trong chuỗi hoặc mảng
  • ESP : trỏ đến đầu stack.stack là 1 vùng trong bộ nhớ chứa các biến tạm thời,các dữ liệu và địa chỉ.
  • Stack làm việc theo nguyên tắc LIFO(last in first out).
  • EBP : là 1 thanh ghi dùng trong việc truy xuất dữ liệu trong stack.Công dụng EBP còn trong việc lưu trữ vị trí lệnh tiếp theo khi ứng dụng thực hiện lệnh CALL để gọi hàm(chương trình ccon).để return lại lệnh kế tiếp.
Các thanh ghi cờ :
Gồm thanh ghi cờ trạng thái và thanh ghi cờ điều khiển.Các cờ hay dùng trong các phép tính,điều kiện thực hiện các phép nhảy:
  • CF : ON khi cộng có nhớ,trừ có mượn ở bit cao
  • AF : ON khi có mượn hay có nhớ ở bit3
  • SF : ON khi phép tính có bit cao nhất âm
  • OF : ON khi phép tính có dấu sai.nêu cộng 2 số cùng dấu mà kết quả có dấu ngược thì có tràn xảy ra.Khi ta cộng hai sô khác dấu thì không bao giờ có tràn.
  • PF : ON khi 8bit thấp là số chẵn
  • ZF : ON khi phép toán trả về giá trị 0

Ví dụ:
nhảy JNE nếu ZF = 0 chẵn hạn
EAX có giá trị 00000200
ECX có giá trị 00000100
thì nếu :
Code:
CMP EAX,ECX
JNE SHORT 00000301

x86 memory segmentation :
4 thanh ghi segment quen thuộc trong 16bit là CS DS ES và SS được gán giá trị 0 và giới hạn của bộ nhớ đến 4Gb.

Thanh ghi FS
Trong x86 trên windowns các thanh ghi FS dùng để trỏ đến các cấu trúc dự liệu nhỏ,các luồng ….
Cụ thể hơn :
Trên win32 ,khi một ứng dụng được chạy.thì nó sinh ra 1 process,process sẽ do Process Environment Block(PEB) quản lý.
MỘt process có thể có 1 luồng(thread) hoặc nhiều luồng nhưng ít nhất phải có 1 luồng.các luồng này do
Thread Information Block(TIB) quản lý.
Ta có thể dùng FS để truy xuất đến vùng này
Ta có bảng địa chỉ sau để truy xuất vào TIB
Contents of the TIB.
Position Length Windows Versions Description.
  • FS:[0x00] 4 Win9x and NT Current Structured Exception Handling (SEH) frame
  • FS:[0x04] 4 Win9x and NT Top of stack
  • FS:[0x08] 4 Win9x and NT Current bottom of stack
  • FS:[0x0C] 4 Unknown – TIB Subsystem?
  • FS:[0x10] 4 NT Fiber data
  • FS:[0x14] 4 Win9x and NT Arbitrary data slot
  • FS:[0x18] 4 Win9x and NT Linear address of TIB
  • —- End of NT subsystem independent part —-
  • FS:[0x1C] 4 NT Environment Pointer
  • FS:[0x20] 4 NT Process ID
  • FS:[0x24] 4 NT Current thread ID
  • FS:[0x28] 4 NT Active RPC Handle
  • FS:[0x2C] 4 Win9x and NT Linear address of the thread-local storage array
  • FS:[0x30] 4 NT Linear address of Process Environment Block (PEB)
  • FS:[0x34] 4 NT Last error number
  • FS:[0x38] 4 NT Count of owned critical sections
  • FS:[0x3C] 4 NT Address of CSR Client Thread
  • FS:[0x40] 4 NT Win32 Thread Information
  • FS:[0x44] 124 NT, Wine Win32 client information (NT), user32 private data (Wine), 0x60 = LastError (Win95), 0x74 = LastError (WinME)
  • FS:[0xC0] 4 NT Reserved for Wow32
  • FS:[0xC4] 4 NT Current Locale
  • FS:[0xC8] 4 NT FP Software Status Register
  • FS:[0xCC] 216 NT, Wine Reserved for OS (NT), kernel32 private data (Wine)
  • FS:[0x124] 4 NT Pointer to KTHREAD (ETHREAD) structure
  • FS:[0x1A4] 4 NT Exception code
  • FS:[0x1A8] 18 NT Activation context stack
  • FS:[0x1BC] 24 NT, Wine Spare bytes (NT), ntdll private data (Wine)
  • FS:[0x1D4] 40 NT, Wine Reserved for OS (NT), ntdll private data (Wine)
  • FS:[0x1FC] 1248 NT, Wine GDI TEB Batch (OS), vm86 private data (Wine)
  • FS:[0x6DC] 4 NT GDI Region
  • FS:[0x6E0] 4 NT GDI Pen
  • FS:[0x6E4] 4 NT GDI Brush
  • FS:[0x6E8] 4 NT Real Process ID
  • FS:[0x6EC] 4 NT Real Thread ID
  • FS:[0x6F0] 4 NT GDI cached process handle
  • FS:[0x6F4] 4 NT GDI client process ID (PID)
  • FS:[0x6F8] 4 NT GDI client thread ID (TID)
  • FS:[0x6FC] 4 NT GDI thread locale information
  • FS:[0x700] 20 NT Reserved for user application
  • FS:[0x714] 1248 NT Reserved for GL
  • FS:[0xBF4] 4 NT Last Status Value
  • FS:[0xBF8] 532 NT Static UNICODE_STRING buffer
  • FS:[0xE0C] 4 NT Pointer to deallocation stack
  • FS:[0xE10] 256 NT TLS slots, 4 byte per slot
  • FS:[0xF10] 8 NT TLS links (LIST_ENTRY structure)
  • FS:[0xF18] 4 NT VDM
  • FS:[0xF1C] 4 NT Reserved for RPC
  • FS:[0xF28] 4 NT Thread error mode (RtlSetThreadErrorMode)

Nhìn vào bảng trên, ta hoàn toàn có thể truy xuất luôn đến cả PEB tại vị trí FS:[0x30] và FS:[0x18] sẽ là địa chỉ của TIB.

0 nhận xét:

Đăng nhận xét