HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG KHOA AN TOÀN THÔNG TIN BÁO CÁO THỰC HÀNH 2 Họ và tên Trần Đình Hiếu Mã sinh viên B19DCAT072 Giảng viên giảng dạy Đinh Trường Duy Hà Nội – 2023 Contents BÁO CÁO[.]
HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THƠNG KHOA AN TỒN THƠNG TIN BÁO CÁO THỰC HÀNH Họ tên: Trần Đình Hiếu Mã sinh viên: B19DCAT072 Giảng viên giảng dạy: Đinh Trường Duy Hà Nội – 2023 Contents BÁO CÁO THỰC HÀNH I Lý Thuyết Cấu trúc liệu đơn giản: Kiến trúc máy tính Bộ nhớ máy tính Lỗi tràn đệm 5 Tìm hiểu gdb: câu lệnh, cách gỡ lỗi sử dụng gdb .6 I Lý Thuyết Cấu trúc liệu đơn giản: • Mảng (Array): cấu trúc liệu lưu trữ tập hợp giá trị có kiểu liệu, xác định mục (index) Mỗi phần tử mảng đánh số Điều có nghĩa để truy xuất phần tử thứ i mảng, ta cần mục i Mảng sử dụng để lưu trữ danh sách, ma trận, v.v Các phép toán thường sử dụng mảng bao gồm truy cập phần tử, thay đổi giá trị phần tử, tìm kiếm xếp • Danh sách liên kết (Linked List): cấu trúc liệu mà phần tử bao gồm giá trị trỏ trỏ đến phần tử Danh sách liên kết sử dụng để lưu trữ danh sách khơng có số lượng phần tử cố định cần thêm xóa phần tử danh sách cách linh hoạt Các phép toán thường sử dụng danh sách liên kết bao gồm thêm phần tử vào đầu cuối danh sách, thêm phần tử vào danh sách, xóa phần tử tìm kiếm phần tử • Ngăn xếp (Stack): cấu trúc liệu lưu trữ danh sách phần tử, cho phép thêm xóa phần tử đầu danh sách Ngăn xếp sử dụng để lưu trữ thao tác ngăn xếp (stack operations) thực theo thứ tự đảo ngược sử dụng đệ quy lập trình Các phép tốn thường sử dụng ngăn xếp bao gồm đẩy phần tử vào ngăn xếp, lấy phần tử khỏi ngăn xếp kiểm tra xem ngăn xếp có trống hay khơng • Hàng đợi (Queue): cấu trúc liệu lưu trữ danh sách phần tử, cho phép thêm phần tử vào cuối danh sách xóa phần tử đầu danh sách Hàng đợi sử dụng để lưu trữ thao tác hàng đợi (queue operations) thực theo thứ tự xử lý tác vụ đợi ứng dụng hệ thống phân phối xử lý liệu Các phép toán thường sử dụng hàng đợi bao gồm thêm phần tử vào hàng đợi, lấy phần tử khỏi hàng đợi kiểm tra xem hàng đợi có trống hay khơng • Bảng băm (Hash table): cấu trúc liệu lưu trữ tập hợp cặp khóagiá trị, cho phép truy xuất giá trị dựa khóa Bảng băm sử dụng để lưu trữ truy xuất liệu cách nhanh chóng ứng dụng sở liệu, đệm lọc Các phép toán thường sử dụng bảng băm bao gồm thêm phần tử vào bảng băm, lấy giá trị từ khóa xóa phần tử khỏi bảng băm • Cây (Tree): cấu trúc liệu phân cấp, nút bao gồm giá trị danh sách nút Cây sử dụng để lưu trữ liệu phân cấp cấu trúc tệp phân loại hệ thống tập tin Các phép toán thường sử dụng bao gồm thêm nút vào cây, xóa nút khỏi tìm kiếm nút Kiến trúc máy tính • CPU (Central Processing Unit): trái tim máy tính, làm nhiệm vụ thực phép tính điều khiển hoạt động khác hệ thống CPU bao gồm thành phần điều khiển (Control Unit) xử lý (ALU - Arithmetic Logic Unit) • Bộ nhớ (Memory): nơi lưu trữ liệu chương trình mà CPU sử dụng Bộ nhớ chia thành nhiều loại nhớ ROM (Read-Only Memory) nhớ RAM (Random Access Memory) Bộ nhớ ROM chứa chương trình lưu trữ sẵn hệ thống, nhớ RAM nơi lưu trữ liệu chương trình thực thi • Bộ điều khiển (Control Unit): thành phần quản lý hoạt động hệ thống, điều khiển hoạt động CPU thiết bị khác nhớ thiết bị ngoại vi Bộ điều khiển giải mã lệnh gửi đến CPU điều khiển hoạt động CPU để thực lệnh • Bộ phân phối (Bus): thành phần kết nối thành phần hệ thống với nhau, bao gồm bus liệu, bus địa bus điều khiển Bus liệu chịu trách nhiệm truyền liệu CPU, nhớ thiết bị ngoại vi, bus địa quản lý việc truy xuất đến vị trí nhớ bus điều khiển điều khiển hoạt động thành phần khác hệ thống • Thiết bị nhập xuất (Input/Output devices): thiết bị cho phép nhập liệu từ bên ngồi vào máy tính xuất liệu từ máy tính bên ngồi • Thiết bị lưu trữ (Storage devices): thiết bị cho phép lưu trữ liệu lâu dài ổ cứng, ổ đĩa mềm, ổ đĩa CD/DVD, thẻ nhớ, USB, … • Thiết bị ngoại vi (Peripheral devices): thiết bị giao tiếp với máy tính bên ngồi bàn phím, chuột, hình, máy in, loa, microphone, webcam, … Bộ nhớ máy tính Bộ nhớ máy tính (Memory) thành phần quan trọng kiến trúc máy tính Bộ nhớ nơi lưu trữ chương trình liệu mà máy tính xử lý chạy Bộ nhớ chia thành hai loại: nhớ (Main memory) nhớ thứ cấp (Secondary memory) • Bộ nhớ (Main memory): Bộ nhớ hay gọi nhớ trực tiếp (RAM - Random Access Memory), nơi lưu trữ tạm thời chương trình liệu mà máy tính xử lý chạy Bộ nhớ đọc ghi liệu nhanh chóng dễ dàng, quan trọng hiệu suất máy tính Khi nguồn điện cung cấp cho máy tính, nhớ khởi động chương trình chép vào nhớ để xử lý • Bộ nhớ thứ cấp (Secondary memory): Bộ nhớ thứ cấp hay gọi nhớ (Secondary storage), nơi lưu trữ liệu lâu dài máy tính tệp tin, hệ điều hành, phần mềm ứng dụng, … Bộ nhớ thứ cấp thường có dung lượng lớn so với nhớ lưu trữ liệu thời gian dài mà không cần thiết phải hoạt động liên tục Ví dụ ổ cứng, ổ đĩa mềm, ổ đĩa CD/DVD, thẻ nhớ, USB, … Lỗi tràn đệm Lỗi tràn đệm (Buffer Overflow) lỗi phổ biến lập trình, chương trình cố gắng ghi vào nhớ ngồi kích thước xác định trước truy cập vào phần nhớ mà không phép truy cập Điều xảy chương trình cố gắng ghi liệu vào đệm cách vượt giới hạn cấu hình, ghi vào vùng nhớ xác định cho mục đích khác Khi lỗi tràn đệm xảy ra, liệu bị ghi đè lên liệu khác nhớ liệu bên ngồi bị công hacker Nếu công thực thành cơng, hacker thực hành động thực thi mã độc, tạo tài khoản truy cập lấy thông tin nhạy cảm từ máy tính người dùng Lỗi tràn đệm xảy nhiều nguyên nhân khác nhau, chẳng hạn không kiểm tra đầu vào từ người dùng, cấu trúc liệu không thiết kế tốt lỗi lập trình Để ngăn chặn lỗi tràn đệm, người lập trình sử dụng phương pháp kiểm tra đầu vào, kiểm tra giới hạn kích thước đệm thiết kế cấu trúc liệu tốt để tránh tình trạng tràn đệm Ngồi ra, người dùng nên cập nhật vá bảo mật hệ thống để giảm thiểu nguy bị công hacker sử dụng lỗi tràn đệm Tìm hiểu gdb: câu lệnh, cách gỡ lỗi sử dụng gdb GDB (GNU Debugger) công cụ gỡ lỗi mã nguồn mở phổ biến lập trình, sử dụng để phân tích lỗi mã nguồn, tìm nguyên nhân gây lỗi sửa chữa chúng GDB cung cấp loạt câu lệnh để giúp phân tích lỗi tìm kiếm vấn đề mã nguồn Các câu lệnh GDB: • run r: Chạy chương trình • break b: Thiết lập điểm ngắt vị trí cụ thể mã nguồn • step s: Thực lệnh chương trình • next n: Thực lệnh không vào hàm • continue c: Tiếp tục thực thi chương trình gặp điểm ngắt • print p: In giá trị biến biểu thức • backtrace bt: In thơng tin vị trí hàm trạng thái biến stack Cách sử dụng GDB để gỡ lỗi: • Compile chương trình với tùy chọn -g để tạo thơng tin gỡ lỗi • Khởi động GDB cách gõ lệnh gdb • Thiết lập điểm ngắt để theo dõi mã nguồn xem giá trị biến trình thực thi • Thực thi chương trình lệnh run • Sử dụng câu lệnh step, next, print để theo dõi mã nguồn giá trị biến • Nếu gặp lỗi, sử dụng lệnh backtrace để xem thông tin hàm biến stack • Sửa lỗi chạy lại chương trình để kiểm tra • Khi hồn tất, sử dụng lệnh quit để khỏi GDB II Thực Hành GDB LESSON less sampleMath.c gcc -g sampleMath.c -o sampleMath ./sampleMath gdb sampleMath sudo nano sampleMath.c Test sudo nano sampleMath2.c Checkwork Bài thực hành less mystuff.c - gcc -m32 -g -o mystuff mystuff.c /mystuff - gdb mystuff Break 27 Run x/10x &data - break 57 c q - stepi ret x $esp - show pin - checkwork