Tải bản đầy đủ (.pdf) (126 trang)

Phân tích tính đầy đủ cho một phần chương trình hướng đối tượng

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (785.98 KB, 126 trang )

ĐẠI HỌC QUỐC GIA TP.HỒ CHÍ MINH

TRƯỜNG ĐẠI HỌC BÁCH KHOA
-------------------

PHÂN TÍCH TÍNH ĐẦY ĐỦ CHO
MỘT PHẦN CHƯƠNG TRÌNH
HƯỚNG ĐỐI TƯNG
Chun ngành: Khoa học máy tính

TP.HỒ CHÍ MINH, tháng 11 năm 2007


Trang i

ABSTRACT
Many compiler analyses and optimizations require precise information about
the behaviour of pointers in order to be effective. Points-to analysis is a technique
approximating the set of objects to which pointers could point. Most points-to
analyses require that all source code of the analysed program (whole-program) is
available to participate in analysis. Therefore, the result of these analyses for
partial programs is inadequate due to the unaccounted reciprocal modification
effects between an incomplete program and some unknown code. To improve
analysis precision, some new techniques considered this reciprocal effect.
Completeness analysis is one of those techniques.
Up to this time, completeness analysis technique is just implemented on the
output of points-to analysis which base on the CHA (Class Hierarchy Class)
callgraph. This thesis implemented, evaluated and compared completeness analysis
on the output of points-to analysis which base on the other callgraph such us RTA
(Rapid Type Analysis), VTA (Variable Type Analysis) and “on-the-fly” callgraph.
The results of experiments are carried out on a set of Java library packages.




Trang ii

TĨM TẮT
Một số trình biên dịch và ứng dụng rất cần những thơng tin chính xác về sự
thay đổi của các con trỏ trong lúc thực thi chương trình để tối ưu và cải tiến về
hiệu quả. Phân tích con trỏ là một kỹ thuật xấp xỉ tập các đối tượng mà một con trỏ
có thể trỏ đến trong thời gian thực thi. Tuy nhiên, hầu hết các kỹ thuật phân tích
con trỏ đều u cầu một chương trình tham gia phân tích phải có đầy đủ mà nguồn.
Do đó, khi áp các phân tích con trỏ cho một chương trình đầy đủ vào một chương
trình khơng đầy đủ sẽ cho kết quả khơng chính xác vì khơng xem xét đến tác động
qua lại giữa mã nguồn của chương trình khơng đầy đủ và mã nguồn khơng xác
định (nằm ngồi chương trình khơng đầy đủ). Để cải thiện độ chính xác cho các
phân tích con trỏ, một số kỹ thuật phân tích mới đã xem xét đến các tác động qua
lại này. Kỹ thuật phân tích tính đầy đủ là một trong số các kỹ thuật đó.
Cho đến thời điểm hiện tại, kỹ thuật phân tích tính đầy đủ chỉ mới được hiện
thực trên kết quả phân tích con trỏ dựa vào kỹ thuật xác định đồ thị cuộc gọi CHA
(Class Hierarchy Class). Mục tiêu của luận văn này là sẽ hiện thực, đánh giá, so
sánh kỹ thuật phân tích tính đầy đủ trên kết quả phân tích con trỏ dựa trên các đồ
thị cuộc gọi khác như RTA (Rapid Type Class), VTA (Variable Type Class) và
“on-the-fly”. Kết quả của quá trình thử nghiệm được thực hiện trên một số các
package thư viện Java.


Trang iii

MỤC LỤC
™&˜


CHƯƠNG I: GIỚI THIỆU ..........................................................1
I/. Động cơ nghiên cứu và mục tiêu của đề tài: ...............................................1
II/. Đóng góp của đề tài:...................................................................................3
III/. Cấu trúc luận văn: ....................................................................................4

CHƯƠNG II: CÁC CƠNG TRÌNH LIÊN QUAN .....................5
I/. Kỹ thuật phân tích con trỏ: .........................................................................5
II/. Từ khóa truy xuất và bổ từ của lớp, phương thức, trường:.....................7
III/. Kỹ thuật phân tích tính đầy đủ:...............................................................8

CHƯƠNG III: CƠ SỞ LÝ THUYẾT..........................................9
I/. Các ký hiệu và qui ước: ...............................................................................9
I.1/. Qui ước: ..................................................................................................9
I.2/. Các ký hiệu được sử dụng thường xun trong luận văn:.......................10
II/. Mơ hình ngơn ngữ lập trình: ...................................................................12
III/. Kỹ thuật phân tích con trỏ: ....................................................................12
III.1/. Định nghĩa: .........................................................................................12
III.2/. Ứng dụng của phân tích con trỏ: .........................................................13
III.3/. Phân loại các kiểu phân tích con trỏ: ...................................................13
III.3.1/. Phân tích con trỏ có lưu ý (flow-sensitive) hoặc bỏ qua (flowinsensitive) dịng điều khiển: .....................................................................13
III.3.2/. Phân tích con trỏ có lưu ý (context-sensitive) hoặc bỏ qua (contextinsensitive) ngữ cảnh: ...............................................................................14
III.3.3/. Phân tích con trỏ tương đương và phân tích con trỏ dựa vào tập
con:...........................................................................................................15


Trang iv

III.3.4/. Phân tích con trỏ có lưu ý hoặc bỏ qua đối tượng của trường: .....15
III.3.5/. Kết luận về các phân loại kỹ thuật phân tích con trỏ: ...................16
IV/. Kỹ thuật xây dựng đồ thị cuộc gọi: ........................................................16

IV.1/. Thuật toán CHA (Class Hierarchy Analysis): .....................................17
IV.2/. Thuật toán RTA (Rapid Type Analysis):.............................................18
IV.3/. Thuật toán VTA (Variable Type Analysis): ........................................18
IV.3.1/. Xây dựng đồ thị truyền kiểu:.........................................................19
IV.3.2/. Khởi tạo đồ thị truyền kiểu: ..........................................................20
IV.3.3/. Truyền thông tin kiểu:...................................................................20
V/. Các kỹ thuật phân tích con trỏ được hiện thực trên Soot: .....................21
V.1/. Tổng quan về Framework Soot: ...........................................................21
V.2/. Cách thức hoạt động của Soot : ............................................................21
V.3/. Hiện thực phân tích con trỏ trên Spark : ...............................................22
V.4/. Các kỹ thuật xây dựng đồ thị cuộc gọi được hiện thực trên Soot : ........23
VI/. Chương trình đầy đủ: .............................................................................23
VI.1/. Định nghĩa chương trình đầy đủ:.........................................................23
VI.2/. Các ký hiệu khác dùng trong chương trình đầy đủ: .............................23
VI.3/. Đặt tên đối tượng:...............................................................................24
VI.4/. Các quy luật được áp dụng khi phân tích con trỏ cho chương trình đầy
đủ: ................................................................................................................24
VI.5/. Kỹ thuật xây dựng đồ thị cuộc gọi: .....................................................25
VII/. Chương trình khơng đầy đủ: ................................................................25
VII.1/. Định nghĩa chương trình khơng đầy đủ:.............................................26
VII.2/. Khả năng triệu gọi từ bên ngồi của phương thức:.............................26
VII.3/. Khả năng truy xuất của lớp, phương thức và trường: .........................27


Trang v

VII.3.1/. Các quy tắc về khả năng truy xuất của trường hoặc lớp:.............28
VII.3.2/. Các quy tắc về khả năng truy xuất của phương thức: ..................31

CHƯƠNG IV: KỸ THUẬT PHÂN TÍCH TÍNH ĐẦY ĐỦ .....33

I/. Các hạn chế khi sử dụng các kỹ thuật phân tích con trỏ cho chương trình
đầy đủ phân tích cho chương trình khơng đầy đủ:.......................................34
II/. Tính đầy đủ: .............................................................................................35
II.1/. Định nghĩa đối tượng khơng đầy đủ và đối tượng đầy đủ: ....................36
II.2/. Định nghĩa biến tham chiếu không đầy đủ và biến tham chiếu đầy đủ: .36
II.3/. Định nghĩa lệnh gọi phương thức (call site) đầy đủ và khơng đầy đủ:...37
III/. Phân tích tính đầy đủ: ............................................................................37
III.1/. Định nghĩa phân tích tính đầy đủ: .......................................................37
III.2/. Kỹ thuật phân tích tính đầy đủ kết hợp:...............................................37
III.3/. Kỹ thuật phân tích tính đầy đủ tuần tự:................................................39
III.3.1/. Bí danh (alias): ............................................................................39
III.3.2/. Tập các luật của kỹ thuật phân tích tính đầy đủ tuần tự:...............40

CHƯƠNG V: ĐỒ THỊ CUỘC GỌI TRONG SOOT ...............43
I/. Các đồ thị cuộc gọi được hiện thực trong SOOT: ....................................43
I.1/. Kỹ thuật CHA: ......................................................................................43
I.2/. Kỹ thuật VTA:.......................................................................................44
I.3/. Kỹ thuật RTA:.......................................................................................44
I.4/. Kỹ thuật xây dựng đồ thị cuộc gọi đồng thời (“on-the-fly”):..................44
I.5/. Ví dụ so sánh các đồ thị cuộc gọi khác nhau trong Soot:........................45
II/. So sánh số lượng các phương thức được triệu gọi khi sử dụng các kỹ
thuật xây dựng đồ thị cuộc gọi khác nhau: ...................................................48

CHƯƠNG VI: HIỆN THỰC .....................................................50


Trang vi

I/. Q trình phân tích của SOOT: ...............................................................50
II/. Các thách thức gặp phải khi hiện thực kỹ thuật phân tích tính đầy đủ

dựa trên các phương pháp xây dựng đồ thị cuộc gọi khác nhau: ................52
II.1/. Thách thức đối với đồ thị cuộc gọi và phân tích con trỏ: ......................52
II.2/. Thách thức đối với kỹ thuật phân tích tính đầy đủ: ...............................55
III/. Các giai đoạn hiện thực: .........................................................................56
IV/. Hiện thực kỹ thuật phân tích con trỏ Spark’: .......................................57
IV.1/. Kỹ thuật phân tích con trỏ Spark trong Soot: ......................................58
IV.2/. Hiện thực kỹ thuật phân tích con trỏ Spark’: .......................................61
V/. Hiện thực kỹ thuật phân tích tính đầy đủ: ..............................................63
V.1/. Các trạng thái của đối tượng/biến tham chiếu khi hiện thực: ................65
V.2/. Giải thuật phân tích tính đầy đủ: ..........................................................66
V.2.1/. Bước khởi tạo: ...............................................................................67
V.2.2/. Bước lan truyền tính đầy đủ:..........................................................69

CHƯƠNG VII: THỬ NGHIỆM................................................71
I/. Các chương trình dùng trong thử nghiệm: ..............................................71
II/. Thử nghiệm phân tích tính đầy đủ:.........................................................79
II.1/. Các biến tham chiếu không đầy đủ: ......................................................80
II.2/. Các đối tượng không đầy đủ:................................................................82
II.3/. Các cuộc gọi hàm không đầy đủ:..........................................................85
II.4/. So sánh kết quả phân tích tính đầy đủ dựa trên đồ thị cuộc gọi được xây
dựng bằng kỹ thuật CHA và kỹ thuật “on-the-fly”: .......................................88
II.4.1/. Ví dụ minh họa: .............................................................................89
II.4.2/. Phân tích và so sánh trên các chương trình thử nghiệm:................91
II.5/. So sánh kết quả phân tích tính đầy đủ dựa trên đồ thị cuộc gọi được xây


Trang vii

dựng bằng kỹ thuật VTA và kỹ thuật “on-the-fly”: .......................................97
II.6/. So sánh kết quả phân tích tính đầy đủ dựa trên đồ thị cuộc gọi được xây

dựng bằng kỹ thuật RTA và kỹ thuật “on-the-fly”: .......................................99
II.7/. Thời gian phân tích: ........................................................................... 102
II.8/. Kết luận từ q trình thử nghiệm:....................................................... 103

CHƯƠNG VIII: KẾT LUẬN...................................................104
I/. Kết luận:................................................................................................... 104
II/. Đóng góp của luận văn:.......................................................................... 106
III/. Khả năng mở rộng của luận văn:......................................................... 107


Trang viii

DANH SÁCH CÁC BẢNG
™&˜
Bảng III-1: các lệnh của ngôn ngữ lập trình hướng đối tượng đơn giản ................12
Bảng III-2: Khả năng truy xuất của một lớp hoặc trường m trong một package có
chứa mã nguồn khơng xác định UF.......................................................................29
Bảng III-3: Khả năng truy xuất của một lớp hoặc trường m trong một package
không chứa mã nguồn không xác định UF ............................................................30
Bảng III-4: khả năng truy xuất của phương thức m trong package chứa mã nguồn
không xác định UF ...............................................................................................31
Bảng III-5: Khả năng truy xuất của phương thức m trong package không chứa mã
nguồn không xác định UF .....................................................................................32
Bảng V-1: Các đồ thị cuộc gọi khác nhau của lệnh x1.m() ...................................47
Bảng V-2: các đồ thị cuộc gọi khác nhau của lệnh a1.f.mth()...............................48
Bảng VI-1: Các trạng thái khác nhau của đối tượng khi hiện thực........................65
Bảng VI-2: Các trạng thái khác nhau của biến tham chiếu khi hiện thực ..............66
Bảng VII-1: thông tin tổng quan về các chương trình thử nghiệm ........................72
Bảng VII-2: Các thơng tin khác về chương trình thử nghiệm ...............................73
Bảng VII-3: Khả năng truy xuất từ bên ngoài của lớp, phương thức, trường ........74

Bảng VII-4: Số lượng các biến tham chiếu, đối tượng, cuộc gọi hàm được xem xét
khi thử nghiệm các chương trình dựa trên các đồ thị cuộc gọi khác nhau .............77
Bảng VII-5: Các biến tham chiếu khơng đầy đủ khi thử nghiệm các chương trình
dựa trên các đồ thị cuộc gọi khác nhau.................................................................82
Bảng VII-6: Các đối tượng khơng đầy đủ khi thử nghiệm các chương trình dựa trên
các đồ thị cuộc gọi khác nhau ..............................................................................84
Bảng VII-7: Các cuộc gọi hàm không đầy đủ khi thử nghiệm các chương trình dựa
trên các đồ thị cuộc gọi khác nhau .......................................................................87
Bảng VII-8: Khả năng truy xuất của các phương thức và trường..........................90
Bảng VII-9: So sánh các biến tham chiếu cục bộ khi sử dụng đồ thị cuộc gọi “onthe-fly” và khi sử dụng CHA xét trong phạm vi các phương thức được triệu gọi khi


Trang ix

sử dụng đồ thị cuộc gọi “on-the-fly” ....................................................................93
Bảng VII-10: So sánh các đối tượng, cuộc gọi hàm khi sử dụng đồ thị cuộc gọi
“on-the-fly” và khi sử dụng CHA xét trong phạm vi các phương thức được triệu
gọi khi sử dụng đồ thị cuộc gọi “on-the-fly” ........................................................95
Bảng VII-11: So sánh các biến tham chiếu cục bộ khi sử dụng đồ thị cuộc gọi “onthe-fly” và khi sử dụng VTA xét trong phạm vi các phương thức được triệu gọi khi
sử dụng đồ thị cuộc gọi “on-the-fly” ....................................................................98
Bảng VII-12: So sánh các đối tượng, cuộc gọi hàm khi sử dụng đồ thị cuộc gọi
“on-the-fly” và khi sử dụng VTA xét trong phạm vi các phương thức được triệu
gọi khi sử dụng đồ thị cuộc gọi “on-the-fly” ........................................................99
Bảng VII-13: So sánh các biến tham chiếu cục bộ khi sử dụng đồ thị cuộc gọi “onthe-fly” và khi sử dụng RTA xét trong phạm vi các phương thức được triệu gọi khi
sử dụng đồ thị cuộc gọi “on-the-fly” .................................................................. 100
Bảng VII-14: So sánh các đối tượng, cuộc gọi hàm khi sử dụng đồ thị cuộc gọi
“on-the-fly” và khi sử dụng RTA xét trong phạm vi các phương thức được triệu
gọi khi sử dụng đồ thị cuộc gọi “on-the-fly” ...................................................... 102



Trang x

DANH SÁCH CÁC HÌNH
™&˜
Hình III-1: Ví dụ đơn giản về tập đối tượng được trỏ bởi các biến tham chiếu .....13
Hình III-2: Ví dụ phân tích con trỏ liên quan đến dịng điều khiển .......................14
Hình III-3: Ví dụ phân tích con trỏ liên quan đến ngữ cảnh..................................15
Hình III-4: Ví dụ phân tích con trỏ liên quan đến chiều của phép gán ..................15
Hình III-5: Ví dụ phân tích con trỏ liên quan đến đối tượng của trường ...............16
Hình III-6: Kiến trúc của SOOT...........................................................................22
Hình IV-1: Các trường hợp cuộc gọi hàm khơng đầy đủ ......................................34
Hình V-1: Ví dụ so sánh sự khác nhau giữa các kỹ thuật xây dựng đồ thị cuộc gọi
............................................................................................................................45
Hình V-2: Sự kế thừa của các lớp ........................................................................46
Hình VI-1: Các giai đoạn khác nhau khi thực thi Soot .........................................51
Hình VI-2: Cách thức sử dụng kỹ thuật phân tích con trỏ để xây dựng đồ thị cuộc
gọi RTA của Spark ..............................................................................................53
Hình VI-3: Cách thức sử dụng kỹ thuật phân tích con trỏ để xây dựng đồ thị cuộc
gọi VTA của Spark ..............................................................................................54
Hình VI-4: Các giai đoạn hiện thực tổng quan .....................................................57
Hình VI-5: Các bước hiện thực kỹ thuật phân tích con trỏ Spark của gói cg.........59
Hình VI-6: Các bước hiện thực kỹ thuật phân tích con trỏ Spark’ của gói wjtp ....62
Hình VII-1: Số lượng các phương thức được triệu gọi khi sử dụng các kỹ thuật xây
dựng đồ thị cuộc gọi khác nhau............................................................................78
Hình VII-2: Số lượng các biến tham chiếu được xét đến khi sử dụng các kỹ thuật
xây dựng đồ thị cuộc gọi khác nhau .....................................................................78
Hình VII-3: Số lượng các đối tượng được xem xét đến khi sử dụng các kỹ thuật
xây dựng đồ thị cuộc gọi khác nhau .....................................................................79
Hình VII-4: Số lượng các cuộc gọi hàm được xem xét đến khi sử dụng các kỹ thuật
xây dựng đồ thị cuộc gọi khác nhau .....................................................................79

Hình VII-5: Tỉ lệ phần trăm các biến tham chiếu không đầy đủ ...........................82


Trang xi

Hình VII-6: Tỉ lệ phần trăm các đối tượng khơng đầy đủ .....................................85
Hình VII-7: Tỉ lệ phần trăm các cuộc gọi hàm khơng xác định khơng đầy đủ ......87
Hình VII-8: Tỉ lệ phần trăm các cuộc gọi hàm xác định khơng đầy đủ .................88
Hình VII-9: Số lượng các biến tham chiếu cục bộ không đầy đủ xét trong phạm vi
các phương thức được triệu gọi bởi đồ thị cuộc gọi “on-the-fly”..........................94
Hình VII-10: Số lượng các đối tượng khơng đầy đủ xét trong phạm vi các phương
thức được triệu gọi bởi đồ thị cuộc gọi “on-the-fly”.............................................96
Hình VII-11: số lượng các cuộc gọi hàm không xác định không đầy đủ xét trong
phạm vi các phương thức được triệu gọi bởi đồ thị cuộc gọi “on-the-fly” ............96
Hình VII-12: Tỉ lệ thời gian thực thi của các kỹ thuật phân tích tính đầy đủ so với
thời gian thực thi của kỹ thuật phân tích con trỏ Spark....................................... 103


Trang 1

CHƯƠNG I: GIỚI THIỆU
™&˜

I/. Động cơ nghiên cứu và mục tiêu của đề tài:
Phân tích con trỏ là quá trình phân tích để ước lượng một cách xấp xỉ tập các
đối tượng mà một biến tham chiếu có thể trỏ đến khi chương trình được thực thi.
Ứng dụng của kỹ thuật phân tích con trỏ là được sử dụng như các thông tin đầu
vào cho các kỹ thuật phân tích khác:
• Kỹ thuật phân tích hiệu ứng phụ (side-effect analysis): là một ứng dụng
của kỹ thuật phân tích con trỏ để hỗ trợ cho một trình biên dịch tối ưu

các mã máy (bytecode) dựa trên phân tích sự phụ thuộc dữ liệu giữa
các lệnh. Hai lệnh được xem là phụ thuộc dữ liệu nếu một lệnh này
đọc/ghi giá trị được đọc/ghi bởi một lệnh kia. Dựa vào thông tin con
trỏ, kỹ thuật phân tích hiệu ứng phụ sẽ xác định xấp xỉ tập hợp các đối
tượng được đọc/ghi bởi một lệnh hoặc một phương thức. Từ đó sẽ xác
định được sự ràng buộc dữ liệu giữa hai lệnh bất kỳ. Trong phạm vi
một vòng lặp, nếu phát hiện một lệnh khơng có ràng buộc dữ liệu với
tất cả các lệnh cịn lại thì lệnh này sẽ được chuyển ra khỏi vịng lặp
trong q trình biên dịch ra mã máy.
• Kỹ thuật xác định đồ thị cuộc gọi: Các ngôn ngữ lập trình hướng đối
tượng hỗ trợ tính đa hình và các lệnh gọi ảo (virtual call). Khi thực thi
chương trình, mỗi lệnh gọi ảo sẽ gọi một trong số các phương thức đích
mà nó có thể triệu gọi. Xác định đồ thị cuộc gọi là xác định một cách
xấp xỉ tập hợp tất cả các quan hệ triệu gọi giữa tất cả các lệnh gọi và
các phương thức đích của nó. Kỹ thuật này dựa vào thơng tin về các
lớp (class) ứng với các kiểu (type) của các đối tượng mà một biến tham
chiếu nhận thơng điệp (receiver) có thể trỏ đến để xác định xấp xỉ tập
các phương thức đích của một lệnh gọi ảo.
• Kỹ thuật phân tích tính “tham chiếu ngồi phạm vi cấp phát” (escape
Kỹ thuật phân tích tính đầy đủ

SVTH: Nguyễn Thanh Sơn


Trang 2

analysis) của các đối tượng: đây là kỹ thuật xác định các đối tượng
được trỏ đến bởi các biến tham chiếu nằm ngồi phương thức/tiến trình
đã cấp phát (allocate) đối tượng đó. Kết quả của q trình phân tích con
trỏ (phương thức cấp phát đối tượng, các biến tham chiếu trỏ đến đối

tượng, và phương thức/tiến trình chứa biến tham chiếu) hồn tồn có
thể ứng dụng vào kỹ thuật phân tích này. Kỹ thuật phân tích tính “tham
chiếu ngồi phạm vi cấp phát” của các đối tượng được ứng dụng để xác
định vùng nhớ (vùng nhớ “heap” chung của tồn bộ chương trình hay
vùng nhớ cục bộ “stack” của phương thức) sẽ cấp phát cho đối tượng.
Các kỹ thuật phân tích con trỏ đã được nghiên cứu và hiện thực đều địi hỏi
tất cả các chương trình được phân tích phải có đầy đủ mã nguồn. Tuy nhiên, hầu
hết các chương trình được phân tích đều khơng có đầy đủ mã nguồn (như các
module thư viện, các component hoặc các chương trình có một phần chương trình
dưới dạng mã máy đã được biên dịch). Khi sử dụng các kỹ thuật phân tích con trỏ
tồn bộ chương trình (PA: whole-program Points-to Analysis) phân tích trên một
chương trình khơng đầy đủ (partial-program) sẽ cho kết quả khơng chính xác.
Thơng tin con trỏ khơng chính xác là do khơng xem xét đến tác động qua lại giữa
một phần chương trình có sẵn mã nguồn và phần cịn lại khơng có sẵn mã nguồn.
Do đó, đã xuất hiện các nghiên cứu [19, 22, 23] về kỹ thuật phân tích con trỏ cho
một chương trình khơng đầy đủ cũng như nghiên cứu về tính chính xác khi sử
dụng kỹ thuật phân tích con trỏ tồn bộ chương trình phân tích cho một chương
trình khơng đầy đủ; và kỹ thuật phân tích tính đầy đủ là một trong số các nghiên
cứu đó.
Kỹ thuật phân tích tính đầy đủ cho một chương trình hướng đối tượng khơng
đầy đủ một kỹ thuật xem xét tính chính xác khi sử dụng kỹ thuật phân tích con trỏ
tồn bộ chương trình phân tích trên một chương trình khơng đầy đủ:
• Xác định tính chính xác của một đối tượng: một đối tượng được xem là
chính xác nếu nó là đối tượng “đầy đủ” (complete), nghĩa là đối tượng
này không thể được trỏ đến bởi một biến tham chiếu nằm ngồi chương
trình. Ngược lại, đối tượng này được xem là khơng chính xác hay
Kỹ thuật phân tích tính đầy đủ

SVTH: Nguyễn Thanh Sơn



Trang 3

“khơng đầy đủ” (incomplete).
• Xác định tính chính xác của một biến tham chiếu: một biến tham chiếu
được xem là chính xác nếu nó là một biến tham chiếu đầy đủ, nghĩa là
nó khơng thể trỏ đến một đối tượng được cấp phát ngồi chương trình
khơng đầy đủ. Ngược lại, biến tham chiếu được xem như khơng chính
xác.
• Xác định tính chính xác của các lệnh gọi phương thức: một lệnh gọi
phương thức được xem là không chinh xác nếu nó là một lệnh gọi
phương thức khơng đầy đủ, nghĩa là nó có thể triệu gọi một phương
thức nằm ngồi chương trình khơng đầy đủ hoặc có thể triệu gọi một
phương thức nằm trong chương trình khơng đầy đủ nhưng bị bỏ qua do
kỹ thuật xây dựng đồ thị cuộc gọi. Ngược lại, lệnh gọi phương thức
được xem là chính xác hay đầy đủ.
Hiện tại, kỹ thuật phân tích tính đầy đủ tuần tự (SCA: Sequence Complete
Analysis) cho một chương trình khơng đầy đủ [26] đã được hiện thực trên kết quả
phân tích con trỏ dựa vào kỹ thuật xác định đồ thị cuộc gọi CHA (Class Hierarchy
Analysis) [4, 20]. Do vậy, mục tiêu của đề tài là hiện thực, thử nghiệm, đánh giá và
so sánh hiệu quả của kỹ thuật phân tích tính đầy đủ tuần tự trên kết quả phân tích
con trỏ dựa vào các kỹ thuật xác định đồ thị cuộc gọi khác (VTA: Variabl Type
Analysis [20], RTA: Rapid Type Analysis [2, 20] và “on-the-fly” [11]).

II/. Đóng góp của đề tài:
Nghiên cứu trong luận văn này đã mang lại những đóng góp sau:
• Hiện thực kỹ thuật phân tích tính đầy đủ tuần tự cho một chương trình
khơng đầy đủ trên kết quả phân tích con trỏ dựa vào các kỹ thuật xác
định đồ thị cuộc gọi khác nhau (VTA, RTA, CHA và “on-the-fly”).
• Thực hiện thử nghiệm kỹ thuật phân tích tính đầy đủ tuần tự trên các

chương trình thử nghiệm (các thư viện JDK 1.4.2).
• Phân tích, đánh giá và so sánh kết quả phân tích tính đầy đủ tuần tự
trên kết quả phân tích con trỏ dựa vào các kỹ thuật xác định đồ thị cuộc
Kỹ thuật phân tích tính đầy đủ

SVTH: Nguyễn Thanh Sơn


Trang 4

gọi khác nhau.

III/. Cấu trúc luận văn:
Phần còn lại của luận văn được tổ chức như sau:
• Chương 2: nêu các cơng trình nghiên cứu liên quan đến luận văn.
• Chương 3: giới thiệu các kiến thức nền tảng phục vụ cho các chương
sau (các kỹ thuật phân tích con trỏ, các kỹ thuật xây dựng đồ thị cuộc
gọi, khái niệm chương trình đầy đủ và khơng đầy đủ).
• Chương 4: thể hiện phần lý thuyết của kỹ thuật phân tích tính đầy đủ.
• Chương 5: trình bày chi tiết các kỹ thuật xây dựng đồ thị cuộc gọi khác
nhau được hỗ trợ trong framework SOOT.
• Chương 6: nội dung của chương 6 thể hiện cách hiện thực kỹ thuật
phân tích tính đầy đủ trên các đồ thị cuộc gọi khác nhau.
• Chương 7: trình bày các kết quả thử nghiệm, đánh giá, phân tích kỹ
thuật phân tích tính đầy đủ trên các chương trình thử nghiệm khác
nhau.
• Chương 8: tóm tắt các cơng việc đã thực hiện trong luận văn và các kết
luận rút ra từ luận văn này. Bên cạnh đó, chương này cũng thể hiện các
đóng góp của luận văn và hướng mở rộng của đề tài.


Kỹ thuật phân tích tính đầy đủ

SVTH: Nguyễn Thanh Sơn


Trang 5

CHƯƠNG II: CÁC CƠNG TRÌNH LIÊN QUAN
™&˜

Chương này tóm tắt các cơng trình nghiên cứu trước đây liên quan đến đề tài.
Phần I/ giới thiệu các kỹ thuật phân tích con trỏ cho một phần chương trình viết
bằng ngơn ngữ lập trình mệnh lệnh (như ngơn ngữ C, Pascal) hoặc ngơn ngữ lập
trình hướng đối tượng. Phần II/ giới thiệu các nghiên cứu phân tích tính truy xuất
và tính chất bổ từ của lớp, phương thức và trường. Phần III/ giới thiệu nghiên cứu
kỹ thuật phân tích tính đầy đủ.

I/. Kỹ thuật phân tích con trỏ:
Phân tích con trỏ cho chương trình đầy đủ viết bằng ngơn ngữ dịng lệnh là
lĩnh vực đã được nghiên cứu tương đối nhiều và gần như đã đạt trạng thái chín
mùi. Vì vậy, phần này chỉ giới thiệu các cơng trình nghiên cứu kỹ thuật phân tích
con trỏ cho chương trình khơng đầy đủ viết bằng ngơn ngữ lập trình dịng lệnh và
ngơn ngữ hướng đối tượng.
Harrold và Rothermel [8] trình bày kỹ thuật phân tích bí danh (alias – 2 hay
nhiều biểu thức được coi là bí danh của nhau nếu chúng biểu diễn chính xác cùng 1
vị trí trong bộ nhớ) cho chương trình khơng đầy đủ, hay cụ thể hơn là các module
phần mềm viết bằng ngôn ngữ C. Nghiên cứu cũng đưa ra thuật toán dùng lại các
kết quả phân tích bí danh của từng module riêng lẻ khi liên kết các module này với
chương trình gọi chúng.
Rountev và Ryder [18] đề xuất một phương pháp xác định tập con trỏ của

các biến tham chiếu trong các module thư viện viết bằng ngôn ngữ C. Kỹ thuật này
cho phép xây dựng các thơng tin tóm tắt về module thư viện. Các thơng tin tóm tắt
sẽ giúp cho kỹ thuật phân tích con trỏ cho chương trình đầy đủ có kết quả chính
xác hơn mà khơng cần phân tích, khám phá mã nguồn của thư viện.
Không giống như các kỹ thuật trên, kỹ thuật được nghiên cứu trong đề tài
này quan tâm đến những đặc điểm của ngôn ngữ lập trình hướng đối tượng như
tính đa hình, cho phép nạp các lớp động.
Kỹ thuật phân tích tính đầy đủ

SVTH: Nguyễn Thanh Sơn


Trang 6

Với ngơn ngữ lập trình hướng đối tượng, cũng đã có những nghiên cứu kỹ
thuật phân tích con trỏ cho chương trình khơng đầy đủ [3, 5, 17, 19, 22, 23].
Rountev et.al. [17] nghiên cứu kỹ thuật phân tích con trỏ cho một phần
chương trình để xác định tất cả các lớp có thể tương ứng với kiểu của đối tượng
được gọi tại các lệnh gọi phương thức. Phương pháp cũng xác định tất cả các
phương thức có thể được triệu gọi tại một lệnh gọi phương thức. Trong q trình
phân tích, phương pháp này tạo ra các đoạn mã không xác định (Unkown) nhưng
không xét đến sự truy xuất và tính chất bổ từ của lớp, phương thức, trường và cũng
không cho phép nạp các lớp động.
Nghiên cứu tính “mở rộng” (“extant”) [19] nghiên cứu đặc tính “mở rộng”
của các biến tham chiếu trong các chương trình có hỗ trợ đặc điểm nạp lớp/phương
thức động. Kỹ thuật này phân chia các biến tham chiếu trong chương trình làm 2
loại: biến tham chiếu “mở rộng” chỉ trỏ đến những đối tượng mà kiểu của chúng
khi thực thi ứng với các lớp nằm trong chương trình phân tích; ngược lại, biến
tham chiếu “không mở rộng” không đảm bảo các lớp ứng với kiểu của những đối
tượng đều nằm trong chương trình phân tích. Kỹ thuật này chỉ xem xét, phân tích

từ khóa truy xuất của phương thức và khơng xem xét từ khóa truy xuất của lớp và
phương thức.
Các nghiên cứu [3, 5, 22, 23] xem xét, phân tích khả năng “sống sót” của các
đối tượng so với vịng đời thực thi của một phương thức hoặc tiến trình. Một đối
tượng được xem là “sống sót” sau vịng đời của một phương thức nếu sau khi
phương thức được thực thi đối tượng (được tạo ra trong phương thức) vẫn tồn tại
và được trỏ đến bởi một biến tham chiếu nào đó. Một đối tượng khơng “sống sót”
được cấp phát tại vùng nhớ tạm của phương thức. Một đối tượng được xem là
khơng “sống sót” trong phạm vi một tiến trình nếu khơng có tiến trình nào khác có
thể truy xuất đến đối tượng. Một đối tượng phát hiện không đầy đủ là một đối
tượng “sống sót” nhưng điều ngược lại thì khơng đúng. Do đó, phân tích khả năng
phát hiện của đối tượng khác với phân tích sự “sống sót” của đối tượng.
Một số kỹ thuật phân tích con trỏ động cho chương trình viết bằng Java [9,
Kỹ thuật phân tích tính đầy đủ

SVTH: Nguyễn Thanh Sơn


Trang 7

14, 16] xem xét đến đặc điểm cho phép nạp lớp động nhưng khơng xác định được
tính đầy đủ của tập con trỏ.

II/. Từ khóa truy xuất và bổ từ của lớp, phương thức, trường:
Một số nghiên cứu trước đây cũng đã phân tích, xem xét từ khóa truy xuất và
bổ từ của lớp, phương thức, trường nhưng không phân tích con trỏ:
Nghiên cứu tính bất biến [15] là một kỹ thuật phát hiện khả năng biến đổi của
các lớp và trường trong chương trình Java. Kết quả của kỹ thuật này là danh sách
các nguyên nhân làm biến đổi các lớp và trường. Các nhà phát triển phần mềm
dùng các thông tin này để điều chỉnh mã nguồn của họ để tạo ra các trường và lớp

bất biến. Các thông tin về sự biến đổi này được dùng trong lĩnh vực bảo mật, tối ưu
và kiểm thử phần mềm.
Phân tích trường [6] xem xét các giới hạn truy xuất được khai báo trên trường
để xác định những đặc tính hữu ích của trường như kiểu chính xác của trường
(exact_type), đặc tính khác rỗng (nonnull), đặc tính may_leak, đặc tính only_init.
Những đặc tính này được dùng trong các kỹ thuật tối ưu như kỹ thuật thay thế
phương thức (method inline – là phương pháp thay thế phương thức tại các lệnh
gọi phương thức bởi mã nguồn của phương thức được triệu gọi).
Kỹ thuật phân tích trường liên quan [1] là sự mở rộng của kỹ thuật phân tích
trường. Nó xác định các mối quan hệ giữa 2 hoặc nhiều trường của một đối tượng.
Mối quan hệ giữa các trường được xác định bằng cách kiểm tra các điều kiện nào
đó trên mã nguồn. Kết quả của q trình phân tích này có thể được dùng để xóa bỏ
các kiểm tra ràng buộc mảng.
Phân tích sự “giam cầm” dựa vào ràng buộc [7] đưa ra tập các luật dựa vào
khả năng truy xuất của lớp, phương thức và trường để phát hiện các lớp bị “giam
cầm”. Các thể hiện (instance) của một lớp bị “giam cầm” được đóng gói trong
package mà chúng được định nghĩa. Vì vậy, bí danh của các đối tượng được đóng
gói sẽ bị hạn chế trong các package của lớp định nghĩa. Kỹ thuật này được ứng
dụng trong lĩnh vực bảo mật khi mà một số đối tượng nhạy cảm cần được đóng gói

Kỹ thuật phân tích tính đầy đủ

SVTH: Nguyễn Thanh Sơn


Trang 8

trong một phần xác định của chương trình.
Kỹ thuật phân tích tính đầy đủ là kỹ thuật đầu tiên xem xét đến khả năng truy
xuất của lớp, phương thức và trường khi thực hiện phân tích con trỏ cho chương

trình hướng đối tượng khơng đầy đủ.

III/. Kỹ thuật phân tích tính đầy đủ:
Nghiên cứu [26] là nghiên cứu kỹ thuật phân tích tính đầy đủ cho một chương
trình khơng đầy đủ (hay một phần của chương trình). Kỹ thuật này quan tâm đến từ
khóa truy xuất (public, private, protected) và bổ từ (public, protected, private,
static, final, native, abstract, synchronized) của các lớp, phương thức, trường trong
q trình phân tích để cho ra kết quả phân tích con trỏ chính xác hơn. Phương pháp
này cũng xác định tính đầy đủ của các lệnh gọi phương thức bằng cách phân biệt
các lệnh gọi phương thức (call site) đầy đủ với các lệnh gọi phương thức khơng
đầy đủ. Trong đó, lệnh gọi phương thức đầy đủ là lệnh mà tất cả các phương thức
có thể được triệu gọi đều nằm trong mã nguồn có sẵn của chương trình phân tích.
Ngược lại, một lệnh gọi phương thức được xem như không đầy đủ nếu lệnh này có
thể triệu gọi một phương thức thuộc mã nguồn khơng xác định (mã nguồn nằm
ngồi chương trình phân tích hoặc mã nguồn khơng sẵn sàng tham gia vào q
trình phân tích). Bên cạnh đó, q trình phân tích cũng xác định khả năng phát
hiện đầy đủ của các đối tượng, nghĩa là xác định đối tượng có thể được trỏ bởi một
tham chiếu nằm ngồi chương trình phân tích hay khơng. Kỹ thuật này được hiện
thực trên kỹ thuật xây dựng cuộc gọi CHA và kỹ thuật phân tích con trỏ bỏ qua
ngữ cảnh cũng như khơng quan tâm đến dịng điều khiển của chương trình. Kỹ
thuật phân tích bao gồm 2 phiên bản khác nhau: kỹ thuật phân tích tính đầy đủ kết
hợp và kỹ thuật phân tích tính đầy đủ tuần tự. Kỹ thuật phân tích tính đầy đủ kết
hợp sửa đổi kết quả phân tích con trỏ của kỹ thuật phân tích con trỏ cho chương
trình đầy đủ. Kỹ thuật phân tích tính đầy đủ tuần tự khơng sửa đổi kết quả phân
tích con trỏ của kỹ thuật phân tích con trỏ cho chương trình đầy đủ mà sử dụng kết
quả này làm đầu vào cho q trình phân tích tính đầy đủ.

Kỹ thuật phân tích tính đầy đủ

SVTH: Nguyễn Thanh Sơn



Trang 9

CHƯƠNG III: CƠ SỞ LÝ THUYẾT
™&˜

Với mục đích nhắc lại cơ sở lý thuyết phục vụ cho các chương tiếp theo,
chương này giới thiệu các kỹ thuật phân tích con trỏ, kỹ thuật xây dựng đồ thị cuộc
gọi, định nghĩa chương trình đầy đủ, chương trình khơng đầy đủ. Để thuận tiện
hơn cho người đọc, các ký hiệu thường xuyên được sử dụng trong và các quy ước
sẽ được trình bày trong phần I/. Luận văn này được hiện thực bằng ngơn ngữ lập
trình hướng đối tượng Java nhưng phần lý thuyết được xây dựng trên một mơ hình
ngơn ngữ lập trình hướng đối tượng đơn giản nhằm thể hiện ngắn gọn, xúc tích
hơn nhưng vẫn đảm bảo tính đúng đắn. Một mơ hình ngơn ngữ lập trình đơn giản
được trình bày trong phần II/. Kỹ thuật phân tích tính đầy đủ được phân tích dựa
trên kết quả phân tích con trỏ và đồ thị cuộc gọi. Phần III/ trình bày tổng qt về
các kỹ thuật phân tích con trỏ. Phần IV/ tóm tắt các giải thuật xây dựng đồ thị cuộc
gọi khác nhau (CHA, VTA, RTA). Phần V giới thiệu các kỹ thuật phân tích con trỏ
được hiện thực trong Soot. Phần VI/ nhắc lại khái niệm về một chương trình đầy
đủ và một số quy tắc áp dụng khi phân tích con trỏ cho chương trình đầy đủ. Các
quy tắc này là một phần của giải thuật phân tích con trỏ và chúng cũng liên quan
đến quá trình phân tích tính đầy đủ. Mục đích của phần VII/ là nhắc lại khái niệm
chương trình khơng đầy đủ và khả năng truy xuất của lớp, phương thức, trường.
Khả năng truy xuất sẽ gia tăng tính chính xác của kỹ thuật phân tích con trỏ và
được sử dụng trong một số luật phân tích tính đầy đủ sẽ được trình bày trong
chương IV. Tất cả các phần trong chương này trình bày lại các lý thuyết trích từ
các tài liệu tham khảo [2, 4, 11, 12, 13, 20, 22, 25, 27, 28, 29, 30, 31].

I/. Các ký hiệu và qui ước:

I.1/. Qui ước:
Trong phạm vi luận văn này, dùng khái niệm “lớp” để chỉ lớp và interface
trong Java. Khái niệm “phương thức” để chỉ các phương thức trừu tượng, phương
thức interface, phương thức native và phương thức thông thường. Khái niệm “biến
Kỹ thuật phân tích tính đầy đủ

SVTH: Nguyễn Thanh Sơn


Trang 10

tham chiếu” liên quan đến tất cả các loại truy xuất biến có kiểu đối tượng, đó là sự
truy xuất biến không phải là trường, mảng, trường tĩnh, trường của một thể hiện
(instance).
Khái niệm “lệnh gọi phương thức cố định” (fixed call site) là một lệnh gọi
phương thức tĩnh (static invoke), hoặc lệnh gọi đặc biệt (special invoke), hoặc lệnh
gọi phương thức mà phương thức đích được khai báo final hoặc phương thức đó
nằm trong lớp final, hoặc lệnh gọi đến phương thức được đóng gói (sealed callsite
[25]) nghĩa là phương thức được triệu gọi và tất cả các phương thức override lên
nó phải thuộc cùng một package. Đơn giản hơn, một “lệnh gọi phương thức cố
định” là lệnh gọi mà tất cả các phương thức được triệu gọi đều được xác định rõ tại
thời điểm biên dịch. Ngược lại, lệnh gọi phương thức được gọi là “lệnh gọi
phương thức khơng xác định” (non-fixed callsite).
Hiện này, có hai kỹ thuật phân tích tính đầy đủ khác nhau đã được nghiên
cứu nhưng luận văn này chỉ tập trung nghiên cứu và hiện thực kỹ thuật phân tích
tính đầy đủ tuần tự dựa trên đồ thị cuộc gọi được xây dựng bằng các phương pháp
khác nhau. Do đó, trong luận văn, khi đề cập đến kỹ thuật phân tích tính đầy đủ mà
khơng nêu cụ thể kiểu phân tích tuần tự hay tổ hợp thì có nghĩa là đang đề cập đến
kỹ thuật phân tích tính đầy đủ tuần tự.
I.2/. Các ký hiệu được sử dụng thường xuyên trong luận văn:

- s: các lệnh (gồm lệnh gán và lệnh gọi hàm) trong chương trình.
- l,r: các biến tham chiếu khơng phải là trường của đối tượng. Trong một số
trường hợp, biến tham chiếu l còn được dùng để biểu diễn biến trả về của
phương thức.
- f: các trường của đối tượng.
- v: các biến tham chiếu nói chung,
- op: phương thức.
- a0: biến tham chiếu this của phương thức.
- ai (i>0): các tham số truyền vào phương thức.
- W: chương trình đầy đủ.
Kỹ thuật phân tích tính đầy đủ

SVTH: Nguyễn Thanh Sơn


Trang 11

- F: chương trình khơng đầy đủ, hay một phần của chương trình.
- {ri}: tập hợp chứa một hoặc nhiều biến tham chiếu.
- VW: tập các biến tham chiếu trong chương trình đầy đủ W.
- CW: một đồ thị cuộc gọi của chương trình đầy đủ W.
- CF: một đồ thị cuộc gọi của chương trình khơng đầy đủ F.
- PTF(r): tập đối tượng trỏ đến bởi biến tham chiếu r khi phân tích con trỏ
chương trình khơng đầy đủ F.
- PTW(r): tập đối tượng trỏ đến bởi biến tham chiếu r khi phân tích con trỏ
chương trình đầy đủ W.
- LW: tập hợp các lớp trong chương trình đầy đủ W.

- η : là tập hợp các điểm đầu vào có thể của chương trình.
- MW : là tập hợp các phương thức được khai báo trong LW.

- FW là tập hợp các trường được khai báo trong LW.
- SW là tập hợp các lệnh xuất hiện trong MW.
- UF là tập hợp các mã nguồn không xác định: đó có thể là mã nguồn khơng
thuộc chương trình không đầy đủ F hoặc các phương thức trong EMF
hoặc đối tượng thuộc kiểu không xác định (Unknow) trong Java có thể
được tạo bởi lệnh java.lang.class.newInstance() hoặc java.lang.
reflect.Constructor.newInstance().

- RMF ⊆ MF là tập hợp các phương thức trong F có thể được triệu gọi từ
bên ngoài.

- IMF ⊆ RMF là tập hợp các phương thức có thể triệu gọi từ bên ngoài mà
mã nguồn sẵn sàng tham gia vào quá trình phân tích.

- EMF = RMF \ IMF là tập hợp các phương thức có thể triệu gọi từ bên
ngồi mà mã nguồn không sẵn sàng tham gia vào quá trình phân tích: đó
có thể là các phương thức native (viết bằng ngơn ngữ C, C++ nhúng vào
Java) hoặc có thể là các phương thức do chính người dùng chỉ định khơng
tham gia vào q trình phân tích.

- FFr là tập hợp các trường có thể được đọc và ghi bởi tập mã nguồn khơng
Kỹ thuật phân tích tính đầy đủ

SVTH: Nguyễn Thanh Sơn


Trang 12

xác định UF và FFw giống như tập hợp FFr ngoại trừ các trường được khai
báo final.


II/. Mơ hình ngơn ngữ lập trình:
Để đơn giản và khơng mất tính tổng qt, giả sử phân tích được thực hiện
trên ngơn ngữ lập trình hướng đối tượng đơn giản, gần giống và chỉ là tập con của
ngôn ngữ Java. Bảng III-1 mô tả 7 loại lệnh của một ngôn ngữ lập trình hướng đối
tượng đơn giản.
Lệnh

Cú pháp

s1

l = new C

s2

l=r

s3

l = C.f

Lệnh truy xuất trường tĩnh

s4

C.f = r

Lệnh lưu trữ vào trường tĩnh


s5

l = r.f

Lệnh truy xuất trường của 1 thể hiện

s6

l.f = r

Lệnh lưu trữ vào trường của 1 thể hiện

s7

Ngữ nghĩa
Lệnh tạo đối tượng
Lệnh gán

op(a0, a1, …, an, l) Lệnh gọi phương thức

Bảng III-1: các lệnh của ngôn ngữ lập trình hướng đối tượng đơn giản

III/. Kỹ thuật phân tích con trỏ:
III.1/. Định nghĩa:
Phân tích con trỏ là một kỹ thuật xác định một cách xấp xỉ tập hợp các đối
tượng mà một biến tham chiếu có thể trỏ đến trong thời gian thực thi của chương
trình.
Ký hiệu W là một chương trình được phân tích và v ∈ VW là một biến tham
chiếu thuộc tập các biến tham chiếu. Gọi ∅W là tập các đối tượng được tạo ra trong
W. Tập đối tượng được trỏ đến của v được định nghĩa như sau:

PTW(v) = {o ∈ ∅W thỏa mãn v trỏ đến đối tượng o}
Kỹ thuật phân tích tính đầy đủ

SVTH: Nguyễn Thanh Sơn


Trang 13

Hình III-1 là một ví dụ đơn giản về tập các đối tượng được trỏ đến bởi các
biến tham chiếu: PTW(a) = PTW(A.f) = {o1} và PTW(b) = PTW(a.g) = {o3}
(1) a = new A(); O1
(2) A.f = a;
(3) b = new A(); O3
(4) a.g = b;
Hình III-1: Ví dụ đơn giản về tập đối tượng được trỏ bởi các biến tham chiếu

III.2/. Ứng dụng của phân tích con trỏ:
-

Kết quả của q trình phân tích con trỏ có thể được sử dụng để tối ưu
chương trình.

-

Ứng dụng trong lĩnh vực bảo mật và song song hóa chương trình.

-

Ứng dụng vào các kỹ thuật phân tích khác (kỹ thuật xác định đồ thị cuộc
gọi, kỹ thuật phân tích hiệu ứng phụ,...).


III.3/. Phân loại các kiểu phân tích con trỏ:
Tùy theo tiêu chí quan tâm khi phân loại (dịng điều khiển, ngữ cảnh gọi
phương thức, hướng tác động của phép gán hoặc sự quan tâm đến đối tượng của
trường) mà có nhiều kiểu phân loại phân tích con trỏ khác nhau.
III.3.1/. Phân tích con trỏ có lưu ý (flow-sensitive) hoặc bỏ qua (flowinsensitive) dòng điều khiển:
Nếu dựa vào dòng điều khiển, có thể phân loại phân tích con trỏ thành 2
kiểu: phân tích con trỏ có lưu ý đến dịng điều khiển [22] và phân tích bỏ qua dịng
điều khiển [12, 27].
Phân tích con trỏ có lưu ý đến dịng điều khiển phân biệt tập đối tượng được
trỏ đến của một biến tham chiều tại các điểm khác nhau trong một dịng điều khiển
nào đó của chương trình. Ngược lại, phân tích con trỏ bỏ qua dịng điều khiển
khơng quan tâm đến dịng điều khiển và chỉ tính tốn một tập đối tượng được trỏ
tới duy nhất của một biến tham chiếu trong tồn bộ chương trình.
Kỹ thuật phân tích tính đầy đủ

SVTH: Nguyễn Thanh Sơn


×