01/10/2018, 12:34
Đọc mã nguồn và những điều hấp dẫn

Theo mọi người thì K bằng bao nhiêu để kết quả chạy chương trình tràng số nhỉ
Bài liên quan
Theo mọi người thì K bằng bao nhiêu để kết quả chạy chương trình tràng số nhỉ
Hi Pham The Tam.
Code này thì làm sao ?
Ý bạn là “tràn số”?
Bạn định nghĩa cái “tràn số” của bạn coi nào?
Hay ý của bạn là buffer overflow?
Nếu vậy thì khi K bé hơn 0 hoặc lớn hơn 16 nhé.
Nguyên nhân làm tràn số của nó là gì á nhr ? Tớ vẫn chưa tìm ra lý do được
(Mặc định 32 bit)
Cho con trỏ có kiểu Type*, đặt là a; cho n là số mà sẽ được cộng vào con trỏ, ta có điều sau là đúng:
Ví dụ có
char* a = 1, n = 4
, vậy ta có:Ví dụ:
int* a = 2, n = 6
, ta có:Với biểu thức này
(*((int*) (buffer + K)))
,buffer + K
là lấy vị trí của mảng buffer trong bộ nhớ, cộng với K, vìsizeof(char) == 1
nên cứ cộng bình thường, được vị trí mới, đặt là i, ta ép nó sang kiểu con trỏint*
, cuối cùng là phép “khử tham chiếu” (dereference), tức là dùng vị trí i để vào bộ nhớ và đọc/ghi vào chỗ đó với kích thướcsizeof(int)
.Tràn, hoặc là overflow chỉ là một cách nói ước lệ, nói một cách chính xác thì cái này gọi là “ghi, hoặc đọc dữ liệu mà vốn không/chưa được cấp phát cho chương trình, hoặc đọc xen vào dữ liệu khác không liên quan”.
mình có thể trao đổi với bạn qua facebook được không nhỉ, face mình là thế tâm https://www.facebook.com/than.phamthetam
à có 1 câu hỏi nữa tớ cũng đang tò mò, hãy thay đổi giá trị K để giá trị X=1
Cho K chạy từ -20 tới 0 rồi suy luận
Giải thích thì dài, cái này phải có kiến thức assembly.