Phân Tích Hợp Ngữ Mã Máy: Các Phép Toán Số Học và Gán Biến trong C++

Khi một chương trình C++ được biên dịch, các phép toán số học và gán biến mà chúng ta viết trong mã nguồn sẽ được chuyển đổi thành các lệnh hợp ngữ tương ứng. Việc xem xét mã hợp ngữ được tạo ra có thể tiết lộ cách trình biên dịch tối ưu hóa mã của chúng ta, đặc biệt là sự khác biệt giữa các bản dựng Debug và Release. 1. Phép Cộng và Gán Phép ...

Đăng vào ngày 17 tháng 7 lúc 09:47

Các Phương Thức Địa Chỉ Cơ Bản Trong Tập Lệnh x86

Phương thức địa chỉ và cách sử dụng Phương thức Ví dụ (MOV đích, nguồn) Vị trí tham số Đặc điểm **Số ngay** MOV ECX, 0x5A3F Trong lệnh Đưa giá trị hằng trực tiếp vào thanh ghi. **Thanh ghi** MOV EDX, ECX Thanh ghi CPU Tốc độ nhanh nhất, dùng cho thao tác giữa các thanh ghi. **Trực tiếp** MOV EAX, [0x7000] Địa chỉ bộ nhớ cố định Truy ...

Đăng vào ngày 16 tháng 7 lúc 02:37

Thực hành Lỗ hổng Buffer Overflow

Thí nghiệm này được thực hiện trên hệ điều hành Ubuntu Linux 64-bit, trong môi trường đám mây của实验楼 (Shiyanlou). Giới thiệu Lỗ hổng bộ đệm tràn (Buffer Overflow) xảy ra khi một chương trình cố gắng ghi dữ liệu vào một bộ đệm (buffer) vượt quá kích thước đã được cấp phát cố định. Lỗ hổng này có thể bị kẻ tấn công lợi dụng để thay đổi luồng ...

Đăng vào ngày 12 tháng 6 lúc 04:48

Gói tất cả các thư viện JAR thành một file JAR duy nhất bằng Maven

Sử dụng maven-shade-plugin ====================== (1) Thêm plugin sau vào file pom.xml của dự án: <build> <plugins> <!-- Maven Shade Plugin --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</ar ...

Đăng vào ngày 5 tháng 6 lúc 20:14

Hướng dẫn sử dụng lệnh TEST trong Assembly

Trong lập trình assembly và lập trình mức thấp, lệnh TEST là một chỉ thị quan trọng dùng để thực hiện phép AND bitwise (AND từng bit), nhưng với một đặc điểm đặc biệt: lệnh này chỉ cập nhật cờ trạng thái (Flags) mà không lưu trữ kết quả phép tính. Nói một cách đơn giản, TEST dùng để kiểm tra trạng thái của một số bit nhất định (bằng 0 hay bằng ...

Đăng vào ngày 2 tháng 6 lúc 02:36

Phân Tích Mã Nguồn Bộ Khởi Động Hệ Điều Hành 64-bit

Giới thiệu Để hiểu rõ cơ chế hoạt động của bộ khởi động (boot sector), chúng ta cần nắm vững quy trình khởi động từ BIOS. Khi máy tính được bật nguồn, BIOS sẽ thực hiện kiểm tra phần cứng, sau đó đọc boot sector (512 byte) từ thiết bị khởi động và nạp nó vào địa chỉ bộ nhớ 0x7C00. Nhiệm vụ chính của đoạn mã này là tìm và tải kernel vào bộ nhớ, ...

Đăng vào ngày 1 tháng 6 lúc 13:44

Từ mã nguồn đến tập lệnh: Hành trình chuyển đổi qua các giai đoạn biên dịch

Khi thực thi lệnh gcc main.c -o program và chạy ./program, hệ thống trải qua quy trình biến đổi phức tạp từ mã nguồn sang lệnh máy. Dưới đây là phân tích chi tiết về từng giai đoạn. main.c mẫu: #define PI 3.14159 #include <stdio.h> int main() { double radius = 5.0; double area = PI * radius * radius; printf("Area: %.2f\n ...

Đăng vào ngày 27 tháng 5 lúc 11:46