ok9-Jiahua s

Mục tiêu lưu trữ dữ liệu trong bộ nhớ thí nghiệm 2 tích cực khám phá cùng một kiểu dữ liệu lưu trữ trong bộ nhớ

Thí nghiệm 2: mục tiêu lưu trữ dữ liệu trong bộ nhớ: tích cực khám phá cách lưu trữ cùng loại dữ liệu trong bộ nhớ, nguyên tắc liên kết và trình tự byte (kết thúc lớn và kết thúc nhỏ). Bước 1: mục tiêu lưu trữ kiểu dữ liệu: phân tích cách lưu trữ các kiểu dữ liệu phổ biến trong bộ nhớ, và dần dần gỡ lỗi để xem các địa chỉ lưu trữ của các biến thông qua GDB. 1.1 viết chương trình C để định nghĩa các kiểu dữ liệu để tạo một chương trình C bao gồm các kiểu dữ liệu khác nhau như int, float, double, char, struct, và ararray: C kích hoạt mã #include struct Data; int main() ; printf("Address of int a: %p\n", (void*)&a); printf("Address of float b: %p\n", (void*)&b); printf("Address of double c: %p\n", (void*)&c); printf("Address of char d: %p\n", (void*)&d); printf("Address of struct Data: %p\n", (void*)&data); printf("Address of struct Data.c: %p\n", (void*)&data.c); printf("Address of struct Data.i: %p\n", (void*)&data.i); printf("Address of struct Data.d: %p\n", (void*)&data.d); return 0; 1.2 lập trình và chạy chương trình biên dịch và chạy chương trình trong một thiết bị cuối, sử dụng các tùy chọn -g được chia thành thông tin gỡ lỗi: bash SAO chép mã gcc-g-o memory_layout memory_layout. Code Address of int a: 0x7ffee440d93code code of float b: 0x7ffee440d940Address of double c: 0x7ffee440d948Address of char d: 0x7ffee440d94fAddress of struct Data: 0x7ffee440d940Address of struct Data.c: 0x7ffee440d940Address of struct Data.i: 0x7ffee440d944Address of struct Data.d: 0x7ffee440d948 kết quả quan sát, phân tích các loại dữ liệu khác nhau của địa chỉ, đặc biệt là sự khác biệt địa chỉ của các thành viên của phôi cấu trúc, đặc biệt chú ý đến xem bộ nhớ theo quy tắc khai triển lưu trữ. 1.3 gỡ lỗi chương trình GDB bằng cách sử dụng GDB, dần dần kiểm tra địa chỉ và bố trí bộ nhớ của mỗi biến: bash SAO chép mã GDB./memory_layout đặt điểm ngắt trong GDB và chạy chương trình: Bash SAO chép mã (GDB) break main(GDB) chạy chạy bằng cách sử dụng lệnh info info để xem tất cả các biến địa phương và địa chỉ của họ: bash mã SAO chép (GDB) info info dùng lệnh x/10x để xem giá trị hexadecimal trong bộ nhớ: Bash SAO chép mã (GDB) x/10x &a # xem địa chỉ bộ nhớ của biến a (GDB) x/10x &b # xem địa chỉ bộ nhớ của biến b bằng cách in giá trị của biến dùng lệnh p. Bash SAO chép mã (GDB) p a(GDB) p b(GDB) p c(GDB) p d để xem bố trí bộ nhớ của cấu trúc bằng cách sử dụng các lệnh x/20x: bash SAO chép mã (GDB) x/20x & kiểm tra dữ liệu: so sánh các địa chỉ trong bộ nhớ của các loại dữ liệu khác nhau, xác minh cách sắp xếp của họ. Kiểm soát độ lệch bộ nhớ giữa các thành viên của cấu trúc để xem liệu có được lưu trữ theo quy tắc liên kết (như là liên kết 4 byte). Bước 2: đầu lớn và đầu nhỏ lưu trữ mục tiêu: phát hiện trình tự byte của hệ thống hiện hành (đầu lớn hoặc đầu nhỏ) và cùng lúc thực hiện chuyển đổi trình tự byte. 2.1 lập trình C lập trình phân tích trình tự byte xác định trình tự byte bằng cách phát hiện cách lưu trữ 11 chữ số trên một số nguyên: 2.2 biên dịch và chạy chương trình biên dịch và chạy chương trình để phát hiện trình tự byte của hệ thống hiện hành: bash SAO chép mã gcc-g-o endian_test endian_test. SAO chép mật mã Little Endian2.3 xem trình byte bằng GDB bạn có thể gỡ lỗi chương trình bằng GDB để xem cách lưu trữ dữ liệu trong bộ nhớ. Bash SAO chép mã GDBĐêm-đêm-đêm-đêm-đêm-đêm-đêm-nhỏ: c kích hoạt mã #include unsigned int swapEndian(unsigned int num); 3.2 lập trình và chạy chương trình biên dịch và chạy chương trình, truy cập vào địa chỉ của thành viên cấu trúc: Địa chỉ SAO chép mã số ít của char c: 0x7ffee440d93fAddress of int I: 0x7ffee440d944Address of double d: 0x7ffee440d948 quan sát char, int và kép dữ liệu bị lệch bộ nhớ, kiểm tra xem họ có phù hợp với các quy tắc liên kết bộ nhớ (thường thì int và kép có thể liên kết 4 byte, 8 byte). 3.3 GDB gỡ lỗi bộ nhớ bằng cách sử dụng GDB tiến bộ kiểm tra bố trí bộ nhớ: Bash SAO chép mã GDB./align_test(GDB) break main(GDB) chạy (GDB) info info (GDB) x/20x &data # xem toàn bộ cấu trúc của bố trí bộ nhớ tóm tắt: Qua chương trình C, gỡ lỗi GDB và phân tích objdump, xác nhận bố trí bộ nhớ cùng kiểu dữ liệu, trình tự byte (big end, small end) và nguyên lý liên kết bộ nhớ. Sử dụng GDB để xem địa chỉ bộ nhớ và nội dung chồng, phân tích bố trí bộ nhớ của dữ liệu khi chương trình chạy