Visual Studio allows to set điểm ngắt trên vị trí bộ nhớ chỉ có chiều dài 4 byte (trên phiên bản Windows 32 bit). Để truy cập bộ nhớ (đọc hoặc ghi), bạn có thể sử dụng lớp sau:
struct protect_mem_t {
protect_mem_t(void* addr, size_t size) : addr(addr), size(size), is_protected(FALSE) {
protect();
}
~protect_mem_t() { release(); }
BOOL protect() {
if (!is_protected) {
// To catch only read access you should change PAGE_NOACCESS to PAGE_READONLY
is_protected = VirtualProtect(addr, size, PAGE_NOACCESS, &old_protect);
}
return is_protected;
}
BOOL release() {
if (is_protected)
is_protected = !VirtualProtect(addr, size, old_protect, &old_protect);
return !is_protected;
}
protected:
void* addr;
size_t size;
BOOL is_protected;
DWORD old_protect;
};
Nó thay đổi chế độ truy cập trên các trang bộ nhớ đã chọn. Kích thước trang bằng 4096 byte trên các hệ thống 32 bit. Ngoại lệ sẽ được ném vào mọi quyền truy cập vào bộ nhớ được bảo vệ. Lớp này được giới hạn chỉ sử dụng cho các vùng bộ nhớ lớn, nhưng tôi hy vọng nó có thể hữu ích.
Nó có thể được sử dụng theo cách sau:
// some_array should be aligned on PAGE_SIZE boundaries
protect_mem_t guard(&some_array, PAGE_SIZE);
Nguồn
2009-08-11 17:12:52
Đó là những gì tôi đang tìm kiếm, cảm ơn! –
Mục menu chỉ được bật trong khi trình gỡ lỗi đang hoạt động. Tôi nghĩ một lúc nó đã bị vô hiệu hóa trong Express. – Artfunkel