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