intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Nghệ Thuật Tận Dụng Lỗi Phần Mềm

Chia sẻ: EntrySKY ESIT's | Ngày: | Loại File: PDF | Số trang:0

242
lượt xem
82
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Mục đich cuối cùng của việc tận dụng lỗi phần mềm là thực thi các tác vụ mong muốn. Để làm được điều đó, trước hết chúng ta phải biết rõ cấu trúc của máy tính

Chủ đề:
Lưu

Nội dung Text: Nghệ Thuật Tận Dụng Lỗi Phần Mềm

  1. Chương 2 Máy tính và biên d ch M c đích cu i cùng c a vi c t n d ng l i ph n m m là th c thi các tác v mong mu n. Đ làm đư c đi u đó, trư c h t chúng ta ph i bi t rõ c u trúc c a máy tính, cách th c ho t đ ng c a b vi x lý, nh ng l nh mà b vi x lý có th th c hi n, làm sao truy n l nh t i b vi x lý. Vi c này cũng tương t như h c ch y xe máy v y. Chúng ta ph i bi t nh n vào nút nào đ kh i đ ng máy, nút nào đ b t đèn xin đư ng, làm sao đ r trái, làm sao đ d ng xe. Trong chương này, chúng ta s xem xét c u trúc máy tính mà đ c bi t là b vi x lý (Central Processing Unit, CPU), các thanh ghi (register), và b l nh (instruction) c a nó, cách đánh đ a ch b nh tuy n tính (linear addressing). K ti p chúng ta s bàn t i mã máy (machine code), r i h p ng (assembly language) đ có th chuy n qua trao đ i v cách chương trình biên d ch (compiler) chuy n m t hàm t ngôn ng C sang h p ng . K t thúc chương chúng ta s đưa ra m t mô hình v trí ngăn x p (stack layout, stack diagram) c a m t hàm m u v i các đ i s và bi n n i b . Trong su t tài li u này, chúng ta s ch nói đ n c u trúc c a b vi x lý Intel 32 bit. 2.1 H cơ s Trư c khi đi vào c u trúc máy tính, chúng ta c n n m rõ m t ki n th c n n t ng là h cơ s . Có ba h có s thông d ng mà chúng ta s s d ng trong tài li u này: 5
  2. CHƯƠNG 2. MÁY TÍNH VÀ BIÊN D CH H nh phân (binary) là h cơ s hai, đư c máy tính s d ng. M i m t ch s có th có giá tr là 0, ho c 1. M i ch s này đư c g i là m t bit. Tám (8) bit l p thành m t byte (có ký hi u là B). M t kilobyte (KB) là 1024 (210 ) byte. M t megabyte (MB) là 1024 KB. H th p phân (decimal) là h cơ s mư i mà chúng ta, con ngư i, s d ng hàng ngày. M i m t ch s có th có giá tr là 0, 1, 2, 3, 4, 5, 6, 7, 8, ho c 9. H th p l c phân (hexadecimal) là h cơ s mư i sáu, đư c s d ng đ tính toán thay cho h nh phân vì nó ng n g n và d chuy n đ i hơn. M i m t ch s có th có giá tr 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, và F trong đó A có giá tr là 10 (th p phân), B có giá tr là 11 và tương t v i C, D, E, F. 2.1.1 Chuy n đ i t h cơ s b t kỳ sang h cơ s mư i G i cơ s đó là R, s ch s là n, ch s v trí mang ít ý nghĩa nh t (least significant digit) là x0 (thư ng là s t n cùng bên ph i), ch s t i v trí mang nhi u ý nghĩa nh t (most significant digit) là xn−1 (thư ng là s t n cùng bên trái), và các ch s còn l i t x1 cho t i xn−2 . Giá tr th p phân c a con s này s đư c tính theo công th c sau: Gia tr. th p phan = x0 × R0 + x1 × R1 + ... + xn−2 × Rn−2 + xn−1 × Rn−1 ´i ˆ Ví d giá tr th p phân c a s nh phân 00111001 (R = 2, n = 8) là 1 × 20 +0 × 21 +0 × 22 +1 × 23 +1 × 24 +1 × 25 +0 × 26 +0 × 27 = 57, giá tr th p phân c a s th p l c phân 7F (R = 16, n = 2) là 15 × 160 + 7 × 161 = 127. 2.1.2 Chuy n đ i qua l i gi a h nh phân và h th p l c phân M i m t ch s trong h th p l c phân tương ng v i b n ch s h nh phân vì 16 = 24 . Do đó, đ chuy n đ i qua l i gi a hai h này, chúng ta ch c n chuy n đ i t ng b n bit theo B ng 2.1. Ví d giá tr nh phân c a s th p l c phân AF là 10101111 vì A tương ng v i 1010 và F tương ng v i 1111, giá tr th p l c phân c a s nh phân 01010000 là 50. 6
  3. 2.1. H CƠ S B ng 2.1: Chuy n đ i gi a h th p l c phân và nh phân Th p phân Th p l c phân Nh phân 0 0 0000 1 1 0001 2 2 0010 3 3 0011 4 4 0100 5 5 0101 6 6 0110 7 7 0111 8 8 1000 9 9 1001 10 A 1010 11 B 1011 12 C 1100 13 D 1101 14 E 1110 15 F 1111 7
  4. CHƯƠNG 2. MÁY TÍNH VÀ BIÊN D CH B ng 2.2: M t vài giá tr ph thông trong b ng mã ASCII 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 1 2 0 1 2 3 4 5 6 7 8 9 3 A B C D E F G H I J K L M N O 4 P Q R S T U V W X Y Z 5 a b c d e f g h i j k l m n o 6 p q r s t u v w x y z 7 2.1.3 B ng mã ASCII Vì máy tính ch hi u các bit 0 và 1 nên chúng ta c n có m t quy đ nh chung v cách bi u di n nh ng ký t ch như A, B, C, X, Y, Z. B ng mã ASCII là m t trong nh ng quy đ nh đó. B ng mã này ánh x các giá tr th p phân nh hơn 128 (t 00 t i 7F trong h th p l c phân) thành nh ng ký t ch thông thư ng. B ng mã này đư c s d ng ph bi n nên các h đi u hành hi n đ i đ u tuân theo chu n ASCII. Ngày nay chúng ta thư ng nghe nói v b ng mã Unicode vì nó th hi n đư c h u h t các ngôn ng trên th gi i và đ c bi t là ti ng Vi t đư c giành riêng m t vùng trong b ng mã. B n thân Unicode cũng s d ng cách ánh x ASCII cho các ký t nh hơn 128. B ng 2.2 li t kê m t s giá tr ph thông trong b ng mã ASCII. Theo đó, ký t ch A hoa có mã 41 h th p l c phân, và mã th p l c 61 tương ng v i ký t ch a thư ng, mã th p l c 35 tương ng v i ch s 5. Ngoài ra, m t vài ký t đ c bi t như ký t k t thúc chu i NUL có mã th p l c 00, ký t xu ng dòng, t o dòng m i (line feed, new line) có mã th p l c 0A, ký t d i con tr v đ u dòng (carriage return) có mã th p l c 0D, ký t kho ng tr ng có mã th p l c 20. Chúng ta đã xem xét qua ki n th c căn b n v các h cơ s và b ng mã ASCII. ph n k ti p chúng ta s bàn v b vi x lý c a máy tính. 8
  5. 2.2. KI N TRÚC MÁY TÍNH 2.2 Ki n trúc máy tính Máy tính g m ba b ph n chính là b x lý (CPU), b nh p chu n (bàn phím) và b xu t chu n (màn hình). Chúng ta s ch quan tâm đ n b x lý vì đây chính là trung tâm đi u khi n m i ho t đ ng c a máy tính. 2.2.1 B vi x lý (Central Processing Unit, CPU) B vi x lý đ c l nh t b nh và th c hi n các l nh này m t cách liên t c, không ngh . L nh s p đư c th c thi đư c quy t đ nh b i con tr l nh (instruction pointer). Con tr l nh là m t thanh ghi c a CPU, có nhi m v lưu tr đ a ch c a l nh k ti p trên b nh . Sau khi CPU th c hi n xong l nh hi n t i, CPU s th c hi n ti p l nh t i v trí do con tr l nh ch t i. Hình 2.1a gi s con tr l nh đang mang giá tr 12345678. Đi u này có nghĩa là CPU s th c hi n l nh t i đ a ch 12345678. T i đ a ch này, chúng ta có l nh 31 C0 (xor eax, eax). Vì l nh này chi m hai byte trên b nh nên sau khi th c hi n l nh, con tr l nh s có giá tr là 12345678 + 2 = 1234567A như trong Hình 2.1b. T i đ a ch 1234567A là l nh 90 (nop). Do l nh nop ch chi m m t byte b nh nên con tr l nh s tr t i ô nh k nó t i đ a ch 1234567B. Hình 2.1c minh h a giá tr c a con tr l nh sau khi CPU th c hi n l nh nop Hình 2.1b. Đ b n đ c d n m b t, chúng ta có các quy ư c sau: • Nh ng giá tr s đ c p đ n trong tài li u này s đư c bi u di n d ng th p l c phân tr khi có gi i thích khác. • Ô nh s có đ a ch th p hơn bên tay trái, đ a ch cao hơn bên tay ph i. • Ô nh s có đ a ch th p hơn bên dư i, đ a ch cao hơn bên trên. • Đôi khi chúng ta s bi u di n b nh b ng m t d i dài t trái sang ph i như đã minh h a Hình 2.1; đôi khi chúng ta s bi u di n b ng m t h p các ngăn nh , m i ngăn nh dài 04 byte tương ng v i 32 bit như trong Hình 2.2. T ví d v con tr l nh chúng ta nh n th y r ng n u mu n CPU th c hi n m t tác v nào đó, chúng ta c n th a mãn hai đi u ki n: 9
  6. CHƯƠNG 2. MÁY TÍNH VÀ BIÊN D CH con tr! l"nh=12345678 ... 31 C0 90 90 ... 12345678 (a) Đang ch đ n l nh th nh t con tr! l"nh=1234567A ... 31 C0 90 90 ... 12345678 (b) Đang ch đ n l nh th hai con tr! l"nh=1234567B ... 31 C0 90 90 ... 12345678 (c) Sau khi th c hi n l nh nop Hình 2.1: Con tr l nh 10
  7. 2.2. KI N TRÚC MÁY TÍNH th"p h!n (00000000) cao th"p cao h!n (FFFFFFFF) ... ... 41 42 43 44 ... ... Hình 2.2: Quy ư c bi u di n 1. Các l nh th c thi c n đư c đưa vào b nh . 2. Con tr l nh ph i có giá tr là đ a ch c a vùng nh ch a các l nh trên. Vì mã l nh th c thi và d li u chương trình đ u n m trên b nh nên ta có th t i mã l nh vào chương trình thông qua vi c truy n d li u thông thư ng. Đây cũng chính là mô hình c u trúc máy tính von Neumann v i b x lý và b ph n ch a d li u l n mã l nh đư c tách r i. Vi c ch n và s d ng mã l nh (shellcode) phù h p v i m c đích t n d ng l i n m ngoài ph m vi c a tài li u này. Chúng ta s không bàn t i cách t o các mã l nh mà thay vào đó chúng ta s gi s r ng mã l nh phù h p đã đư c n p vào b nh . Nói như v y không có nghĩa là vi c t o mã l nh quá đơn gi n nên b b qua. Ngư c l i, vi c t o mã l nh là m t v n đ r t ph c t p, v i nhi u k thu t riêng bi t cho t ng c u trúc máy, t ng h đi u hành khác nhau, th m chí cho t ng trư ng h p t n d ng riêng bi t. Hơn n a, ph n l n các mã l nh ph thông đ u có th đư c s d ng l i trong các ví d chúng ta s bàn t i nh ng ph n sau nên b n đ c có th t áp d ng như là m t bài t p th c hành nh . V i gi thi t đi u ki n th nh t đã hoàn thành, tài li u này s t p trung 11
  8. CHƯƠNG 2. MÁY TÍNH VÀ BIÊN D CH vào vi c gi i quy t v n đ th hai, t c là đi u khi n lu ng th c thi c a máy tính. Theo ý ki n cá nhân c a tác gi , đây thư ng là v n đ m u ch t c a vi c t n d ng l i, và cũng là lý do chính khi n chúng ta g p nhi u khó khăn trong vi c đ c hi u các tin t c báo chí. Th c t cho th y (và s đư c d n ch ng qua các ví d ) trong ph n l n các trư ng h p t n d ng l i chúng ta ch c n đi u khi n đư c lu ng th c thi c a chương trình là đã thành công 80% r i. Trong ph n này, chúng ta đ c p đ n con tr l nh, và ch p nh n r ng con tr l nh ch a đ a ch ô nh c a l nh k ti p mà CPU s th c hi n. V y thì con tr l nh th t ra là gì? 2.2.2 Thanh ghi Con tr l nh 2.2.1 th t ra là m t trong s các thanh ghi có s n trong CPU. Thanh ghi là m t d ng b nh t c đ cao, n m ngay bên trong CPU. Thông thư ng, thanh ghi s có đ dài b ng v i đ dài c a c u trúc CPU. Đ i v i c u trúc Intel 32 bit, chúng ta có các nhóm thanh ghi chính đư c li t kê bên dư i, và m i thanh ghi dài 32 bit. Thanh ghi chung là nh ng thanh ghi đư c CPU s d ng như b nh siêu t c trong các công vi c tính toán, đ t bi n t m, hay gi giá tr tham s . Các thanh ghi này thư ng có vai trò như nhau. Chúng ta hay g p b n thanh ghi chính là EAX, EBX, ECX, và EDX. Thanh ghi x lý chu i là các thanh ghi chuyên dùng trong vi c x lý chu i ví d như sao chép chu i, tính đ dài chu i. Hai thanh ghi thư ng g p g m có EDI, và ESI. Thanh ghi ngăn x p là các thanh ghi đư c s d ng trong vi c qu n lý c u trúc b nh ngăn x p. C u trúc này s đư c bàn đ n trong Ti u m c 2.2.4.3. Hai thanh ghi chính là EBP và ESP. Thanh ghi đ c bi t là nh ng thanh ghi có nhi m v đ c bi t, thư ng không th đư c gán giá tr m t cách tr c ti p. Chúng ta thư ng g p các thanh ghi như EIP và EFLAGS. EIP chính là con tr l nh chúng ta đã bi t. EFLAGS là thanh ghi ch a các c (m i c m t bit) như c d u (sign flag), c nh (carry flag), c không (zero flag). Các c này đư c thay đ i như là m t hi u ng ph c a các l nh chính. Ví 12
  9. 2.2. KI N TRÚC MÁY TÍNH d như khi th c hi n l nh l y hi u c a 0 và 1 thì c nh và c d u s đư c b t. Chúng ta dùng giá tr c a các c này đ th c hi n các l nh nh y có đi u ki n ví d như nh y n u c không đư c b t, nh y n u c nh không b t. Thanh ghi phân vùng là các thanh ghi góp ph n vào vi c đánh đ a ch b nh . Chúng ta hay g p nh ng thanh ghi DS, ES, CS. Trong nh ng th h 16 bit, các thanh ghi ch có th đ nh đ a ch trong ph m vi t 0 đ n 216 − 1. Đ vư t qua gi i h n này, các thanh ghi phân vùng đư c s d ng đ h tr vi c đánh đ a ch b nh , m r ng nó lên 220 đ a ch ô nh . Cho đ n th h 32 bit thì h đi u hành hi n đ i đã không c n dùng đ n các thanh ghi phân vùng này trong vi c đ nh v b nh n a vì m t thanh ghi thông thư ng đã có th đ nh v đư c t i 232 ô nh t c là 4 GB b nh . 2.2.3 B nh và đ a ch tuy n tính Thanh ghi là b nh siêu t c nhưng đáng ti c dung lư ng c a chúng quá ít nên chúng không ph i là b nh chính. B nh chính mà chúng ta nói đ n là RAM v i dung lư ng thư ng th y đ n 1 ho c 2 GB. RAM là vi t t t c a Random Access Memory (b nh truy c p ng u nhiên). Đ t tên như v y vì đ truy xu t vào b nh thì ta c n truy n đ a ch ô nh trư c khi truy c p nó, và t c đ truy xu t vào đ a ch nào cũng là như nhau. Vì th vi c xác đ nh đ a ch ô nh là quan tr ng. 2.2.3.1 Đ nh đ a ch ô nh Đ n th h 32 bit, các h đi u hành đã chuy n sang dùng đ a ch tuy n tính (linear addressing) thay cho đ a ch phân vùng (segmented addressing). Cách đánh đ a ch tuy n tính làm đơn gi n hóa vi c truy xu t b nh . C th là ta ch c n x lý m t giá tr 32 bit đơn gi n, thay vì ph i dùng công th c tính toán đ a ch ô nh t hai thanh ghi khác nhau. Ví d đ truy xu t ô nh đ u tiên, ta s dùng đ a ch 00000000, đ truy xu t ô nh k ti p ta dùng đ a ch 00000001 và c th . Ô nh sau n m đ a ch cao hơn ô nh trư c 1 đơn v . Khi ta nói đ n đ a ch b nh , chúng ta đang nói đ n đ a ch tuy n tính c a RAM. Đ a ch tuy n tính này không nh t thi t là đ a ch th t c a ô 13
  10. CHƯƠNG 2. MÁY TÍNH VÀ BIÊN D CH nh trong RAM mà s ph i đư c h đi u hành ánh x l i. Công vi c ánh x đ a ch b nh đư c th c hi n qua ph n qu n lý b nh o (virtual memory management) c a h đi u hành. Ki u đánh đ a ch tuy n tính o như v y cho phép h đi u hành m r ng b nh th t có b ng cách s d ng thêm phân vùng trao đ i (swap partition). Chúng ta thư ng th y máy tính ch có 1 GB RAM nhưng đ a ch b nh có th có giá tr BFFFF6E4 t c là kho ng hơn 3 GB. Trong 3 GB này, ngoài d li u còn có các mã l nh c a chương trình. Chúng ta s bàn t i các l nh đó Ti u m c 2.2.4. 2.2.3.2 Truy xu t b nh và tính k t thúc nh Như đã nói sơ qua, b vi x lý c n xác đ nh đ a ch ô nh , và s n sàng nh n d li u t ho c truy n d li u vào b nh . Do đó đ k t n i CPU v i b nh chúng ta có hai đư ng truy n là đư ng truy n d li u (data bus) và đư ng truy n đ a ch (address bus). Khi c n đ c d li u t b nh , CPU s thông báo r ng đ a ch ô nh đã s n sàng trên đư ng truy n đ a ch , và yêu c u b nh truy n d li u qua đư ng truy n d li u. Khi ghi vào thì CPU s yêu c u b nh l y d li u t đư ng truy n d li u và ghi vào các ô nh . Các đư ng truy n d li u và đ a ch đ u có đ r ng 32 bit cho nên m i l n truy c p vào b nh thì CPU s truy n ho c nh n c 32 bit đ t i ưu vi c s d ng đư ng truy n. Đi u này d n đ n câu h i v kích thư c các ki u d li u nh hơn 32 bit. Câu h i đ u tiên là làm sao đ CPU nh n đư c 1 byte thay vì 4 byte (32 bit) n u m i d li u t b nh truy n v CPU đ u là 32 bit? Câu tr l i là CPU nh n t t c 4 byte t b nh , nhưng s ch x lý 1 byte theo như yêu c u c a chương trình. Vi c này cũng gi ng như ta có m t thùng hàng to nhưng bên trong ch đ m t v t nh . Câu h i th hai liên quan t i v trí c a 8 bit d li u s đư c x lý trong s 32 bit d li u nh n đư c. Làm sao CPU bi t l y 8 bit nào? Các nhà thi t k vi x lý Intel x86 32 bit đã quy t đ nh tuân theo tính k t thúc nh (little endian). K t thúc nh là quy ư c v tr t t và ý nghĩa các byte trong m t ki u trình bày d li u mà byte v trí cu i (v trí th p nh t) có ý nghĩa nh hơn byte v trí k . Ví d trong Hình 2.3a, b n ô nh b t đ u t đ a ch a bi u di n giá tr th p l c 4241393 8. Chúng ta th y r ng byte v trí th p nh t có ý nghĩa 14
  11. th!p 42413938 cao th!p "89AB" cao ... 38 39 41 42 ... ... 38 39 41 42 00 ... 15 a a+1 a+2 a+3 a a+1 a+2 a+3 (a) Đ i v i giá tr 42413938 (b) Đ i v i chu i “89AB” Hình 2.3: Tính k t thúc nh 2.2. KI N TRÚC MÁY TÍNH
  12. CHƯƠNG 2. MÁY TÍNH VÀ BIÊN D CH nh nh t, và byte v trí cao nh t có ý nghĩa l n nh t đ i v i giá tr này. Thay đ i 1 đơn v c a byte th p ch làm giá tr thay đ i 2560 = 1 đơn v , trong khi thay đ i 1 đơn v byte cao làm giá tr thay đ i 2563 = 16777216 đơn v . Cùng lúc đó, Hình 2.3b minh h a cách bi u di n m t chu i “89AB” k t thúc b ng ký t NUL trong b nh . Chúng ta th y t ng byte c a chu i (trong hình là giá tr ASCII c a các ký t tương ng) đư c đưa vào b nh theo đúng th t đó. Tính k t thúc nh không có ý nghĩa v i m t chu i vì các byte trong m t chu i có vai trò như nhau; không có s phân bi t v m c quan tr ng c a t ng byte đ i v i d li u. Thông qua hai hình minh h a, b n đ c cũng chú ý r ng các ô nh có th ch a cùng m t d li u (các byte 38, 39, 41, 42) nhưng ý nghĩa c a d li u ch a trong các ô nh đó có th đư c hi u theo các cách khác nhau b i chương trình (là giá tr th p l c 42413938 hay là chu i “89AB”). Vì tuân theo tính k t thúc nh nên CPU s l y giá tr t i đ a ch th p, thay vì t i đ a ch cao. Xét cùng ví d đã đưa, n u ta l y 1 byte t 32 bit d li u b t đ u t đ a ch a thì nó s có giá tr th p l c 38 ; 2 byte s có giá tr 3938 ; và 4 byte s có giá tr 42413938. 2.2.4 T p l nh, mã máy, và h p ng T p l nh (instruction set) là t t c nh ng l nh mà CPU có th th c hi n. Đây có th đư c coi như kho t v ng c a m t máy tính. Các chương trình là nh ng tác ph m văn h c; chúng ch n l c, k t n i các t v ng riêng r l i v i nhau thành m t th th ng nh t di n đ t m t ý nghĩa riêng. Cũng như các t v ng trong ngôn ng t nhiên, các l nh riêng l có đ dài khác nhau (như đã nêu ra trong ví d Hình 2.1). Chúng có th chi m 1 ho c 2 byte, và đôi khi có th t i 9 byte, th m chí đ t đ dài t i đa 15 byte trong các trư ng h p đ c bi t. Nh ng giá tr chúng ta đã th y như 90, 31 C0 là nh ng l nh đư c CPU hi u và th c hi n đư c. Các giá tr này đư c g i là mã máy (machine code, opcode). Mã máy còn đư c bi t đ n như là ngôn ng l p trình th h th nh t. Tuy nhiên, con ngư i s g p nhi u khó khăn n u bu c ph i đi u khi n máy tính b ng cách s d ng mã máy tr c ti p. Do đó, chúng ta đã sáng ch ra m t b t v ng khác g n v i ngôn ng t nhiên hơn, nhưng v n gi đư c tính c p th p c a mã máy. Thay vì chúng ta s d ng giá tr 90 thì chúng ta dùng t v ng NOP, t c là No Operation. Thay cho 31 C0 s có 16
  13. 2.2. KI N TRÚC MÁY TÍNH XOR EAX, EAX, t c là th c hi n phép toán lu n t XOR gi a hai giá tr thanh ghi EAX v i nhau và lưu k t qu vào l i thanh ghi EAX, hay nói cách khác là thi t l p giá tr c a EAX b ng 0. Rõ ràng b t v ng này d hi u hơn các giá tr khó nh kia. Chúng đư c g i là h p ng . H p ng đư c xem là ngôn ng l p trình th h th hai. Các ngôn ng khác như C, Pascal đư c xem là ngôn ng l p trình th h th ba vì chúng g n v i ngôn ng t nhiên hơn h p ng . 2.2.4.1 Các nhóm l nh H p ng có nhi u nhóm l nh khác nhau. Chúng ta s ch đi m qua các nhóm và nh ng l nh sau. Nhóm l nh gán là nh ng l nh dùng đ gán giá tr vào ô nh , ho c thanh ghi ví d như LEA, MOV, SETZ. Nhóm l nh s h c là nh ng l nh dùng đ tính toán bi u th c s h c ví d như INC, DEC, ADD, SUB, MUL, DIV. Nhóm l nh lu n lý là nh ng l nh dùng đ tính toán bi u th c lu n lý ví d như AND, OR, XOR, NEG. Nhóm l nh so sánh là nh ng l nh dùng đ so sánh giá tr c a hai đ i s và thay đ i thanh ghi EFLAGS ví d như TEST, CMP. Nhóm l nh nh y là nh ng l nh dùng đ thay đ i lu ng th c thi c a CPU bao g m l nh nh y không đi u ki n JMP, và các l nh nh y có đi u ki n như JNZ, JZ, JA, JB. Nhóm l nh ngăn x p là nh ng l nh dùng đ đ y giá tr vào ngăn x p, và l y giá tr t ngăn x p ra ví d như PUSH, POP, PUSHA, POPA. Nhóm l nh hàm là nh ng l nh dùng trong vi c g i hàm và tr k t qu t m t hàm ví d như CALL và RET. 2.2.4.2 Cú pháp M i l nh h p ng có th nh n 0, 1, 2, ho c nhi u nh t là 3 đ i s . Đa s các trư ng h p chúng ta s g p l nh có hai đ i s theo d ng tương t như ADD dst, src. V i d ng này, l nh s h c ADD s đư c th c hi n v i hai 17
  14. CHƯƠNG 2. MÁY TÍNH VÀ BIÊN D CH đ i s dst và src, r i k t qu cu i cùng s đư c lưu l i trong dst, th hi n công th c dst = dst + src. Tùy vào m i l nh riêng bi t mà dst và src có th có các d ng khác nhau. Nhìn chung, chúng ta có các d ng sau đây cho dst và src. Giá tr tr c ti p là m t giá tr c th như 6789ABCD. Ví d MOV EAX, 6789ABCD s gán giá tr 6789ABCD vào thanh ghi EAX. Giá tr tr c ti p không th đóng vai trò c a dst. Thanh ghi là các thanh ghi như EAX, EBX, ECX, EDX. Xem ví d trên. B nh là giá tr t i ô nh có đ a ch đư c ch đ nh. Đ tránh nh m l n v i giá tr tr c ti p, đ a ch này đư c đ t trong hai ngo c vuông. Ví d MOV EAX, [6789ABCD] s gán giá tr 32 bit b t đ u t ô nh 6789ABCD vào thanh ghi EAX. Chúng ta cũng s g p các thanh ghi trong đ a ch ô nh ví d như l nh MOV EAX, [ECX + EBX] s gán giá tr 32 bit b t đ u t ô nh t i đ a ch là t ng giá tr c a hai thanh ghi EBX và ECX. B n đ c cũng nên lưu ý r ng l nh LEA (Load Effective Address, gán đ a ch ) v i cùng đ i s như trên s gán giá tr là t ng c a ECX và EBX vào thanh ghi EAX vì đ a ch ô nh c a src chính là ECX + EBX. 2.2.4.3 Ngăn x p Chúng ta nh c đ n ngăn x p (stack) trong khi bàn v các nhóm l nh Ti u m c 2.2.4.1. Ngăn x p là m t vùng b nh đư c h đi u hành c p phát s n cho chương trình khi n p. Chương trình s s d ng vùng nh này đ ch a các bi n n i b b (local variable), và lưu l i quá trình g i hàm, th c thi c a chương trình. Trong ph n này chúng ta s bàn t i các l nh và thanh ghi đ c bi t có nh hư ng đ n ngăn x p. Ngăn x p ho t đ ng theo nguyên t c vào sau ra trư c (Last In, First Out). Các đ i tư ng đư c đưa vào ngăn x p sau cùng s đư c l y ra đ u tiên. Khái ni m này tương t như vi c chúng ta ch ng các thùng hàng lên trên nhau. Thùng hàng đư c ch ng lên cu i cùng s trên cùng, và s đư c d ra đ u tiên. Như v y, trong su t quá trình s d ng ngăn x p, chúng ta luôn c n bi t v trí đ nh c a ngăn x p. Thanh ghi ESP lưu gi v trí đ nh ngăn x p, t c đ a ch ô nh c a đ i tư ng đư c đưa vào ngăn x p sau cùng, nên còn đư c g i là con tr ngăn x p (stack pointer). 18
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2