This page is READ-ONLY. It is generated from the old site.
All timestamps are relative to 2013 (when this page is generated).
If you are looking for TeX support, please go to VietTUG.org

Accessing private data members

How to rape protected/private data members?
Added by bronzeboyvn over 2 years ago  »  Votes: 1/1

Macro container_of giúp ta từ địa chỉ của field lần ra địa chỉ của structure, từ đó ta tiếp cận được các field còn lại của structure. Dùng macro container_of ta có có cách để lấy protected/private data trong một số tình huống. Trò này có vẻ cao siêu, bài viết này trình bày một cách khác bẩn hơn tí! Chìa khóa nằm ở 2 dòng macro chèn vào trước khi include file header của nạn nhân.

1 #define private public
2 #define protected public

Có lẽ mọi người đã hình dung ra vấn đề? Trò dơ này đáng bị gọi là "hiếp dâm" data members. "Hiếp" ví dụ nha!

 1 // file header: foo.h
 2 
 3 class Foo
 4 {
 5 public:
 6      Foo(int _a, int _b, int _c) : a(_a), b(_b), c(_c) { }
 7      int a;
 8      void show() { cout << a << '\t' << b << '\t' << c << endl; }
 9 protected:
10      int b;
11 private:
12      int c;
13 };
14 
15 // rape Foo file: rapefoo.cpp
16 
17 #include <iostream>
18 using namespace std;
19 
20 #define private public
21 #define protected public
22 
23 #include "foo.h" 
24 
25 int main()
26 {
27     Foo f(7, 30, 12);
28     cout << "f.a = " << f.a << '\t'
29          << "f.b = " << f.b << '\t'
30          << "f.c = " << f.c << endl;
31     f.b = 1001;
32     f.c = 1080;
33     f.show();
34     return 0;
35 }

Có người thích trò "hấp diêm", có người không!

"Hấp diêm" data members vi phạm luật của C++ standard, rằng ta không được phép dùng macro để định nghĩa lại keywords.


Comments

Added by over 2 years ago

bạo lực quá hahaha

Added by hoangtran over 2 years ago

trò này mệt xác quá