30/09/2018, 19:03
Biến cục bộ (local variable) hoạt động như thế nào khi ra khỏi scope?
Mình có đoạn code đơn giản như sau để test biến cục bộ.
#include <stdio.h>
int *a = NULL;
int call () {
int b = 9;
a = &b;
return 1;
}
int main () {
call ();
printf ("%d
", *a);
return 0;
}
Từ trước tới giờ mình nghĩ là khi thoát ra khỏi hàm hoặc là gặp câu lệnh return thì vị trí bộ nhớ đó sẽ được gán là 0 và không sử dụng được nữa. Nhưng trong trường hợp này thì vị trí bộ nhớ cũ của biến b
vẫn có giá trị cũ như khi đang còn ở trong hàm call. Mọi người có thể giải thích cho mình hiểu cách cấp phát và xóa tự động của biến cục bộ được không ạ? Mình xin cảm ơn.
Bài liên quan
theo mình biết thì khi thực hiện xong một hàm các biến được định nghĩa trong hàm sẽ được giải phóng. giair phóng ở đây không có nghĩa là gán nó bằng 0(không cần thiết làm điều đó) mà vùng nhớ của biến đó sẽ không còn đc trỏ trong stack nữa, tức là bến khác có thể chiếm chỗ .
Cái này thì minh cũng biết. Nhưng mình nghĩ tới trường hợp bằng cách nào đó người khác biết được địa chỉ mà mình đã dùng trong chương trình. và dùng được dữ liệu đó (dò rỉ thông tin). Liệu có thể nào có trường hợp đó không nhỉ?
theo lý tuyết là có, cái này còn tùy trình compile. nếu có 1 chương trình đã dịch, có các công cụ dịch ngược chương trình (reveser) sau đó suer dụng mmọt số tool debug như Onlydbg để theo dõi các biến được khởi tạo trong qúa trình chạy. từ đó có thể theo dõi gía trị các biến.
các trình dịch bây giờ có các cơ chế riêng để hạn chế điều này
Mình nghĩ chưa cần dịch ngược đã có thể theo dõi được giá trị biến rồi ấy chứ:smile: kiểu giống mấy cái cheat game off á:smile:
thì bạn có code mà cần gì dịch ngược , ừ đấy chính là cơ chế hoạt động của mấy tool cheat game như CheatEnngine
Thế có cách nào để hạn chế được người dùng xâm nhập được vào phần mềm của mình không? Hay là do trình độ mình chưa đủ nên mình không biết cách nhỉ?
cách thì có nhiều ban có thể tham khảo ở quyên sách này: http://www.codeproject.com/Articles/30815/An-Anti-Reverse-Engineering-Guide.
cái này thuộc về các chuyên gia bảo mật rồi dev quản không nổi. mà người pro mấy cái dịch ngược này cũng không nhiều (không nghiều nhưng phần mềm nào cũng bị crack ). những chương trình bình thường thì dịch ra là an toàn chán rồi, còn nếu bạn muốn làm về bảo mật thì mới cần tìm hiểu sâu. mình cũng chỉ biết sợ sơ vậy