|
|
|
Можно ли?
|
|||
|---|---|---|---|
|
#18+
Можно ли каким нибедь хитрым образом получить доступ к privet- или protecterd- свойству не переделывая его? Сомнительно конечно, ну а вдруг!!! C ув. Tors ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2004, 19:19 |
|
||
|
Можно ли?
|
|||
|---|---|---|---|
|
#18+
К protected членам можно обратится, если отнаследоваться от интересуемого класса публично - правда, только из функций-членов наследника. Можно с помощью хаков типа: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Можно, так же, влезть в интерфейс и "вероломно" вписать друга. А чтобы никто не заметил поменять тайм стамп файла на исходный - правда, от бдительного ока CVS не спасет. На худой конец, совершить преступление перед человечеством (это нарушение стандарта): Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2004, 19:40 |
|
||
|
Можно ли?
|
|||
|---|---|---|---|
|
#18+
Дебагером надо посмотреть сдвиг. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2004, 12:22 |
|
||
|
Можно ли?
|
|||
|---|---|---|---|
|
#18+
можно и без дебагера #define func(ptr) struct_by_field(ptr, struct s, a) #define struct_by_field(ptr, type, name) \ ((type *)((char*)(ptr)-(unsigned long)(&((type*)0)->name))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2004, 21:10 |
|
||
|
Можно ли?
|
|||
|---|---|---|---|
|
#18+
Есть стандартный способ узнать смещение члена данных - offsetof. Только для этого член данных должен быть объявлен в секции public. Так что, struct_by_field, как и offsetof мимо кассы в условиях первоначального поста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2004, 23:35 |
|
||
|
Можно ли?
|
|||
|---|---|---|---|
|
#18+
--Анатолий Широков ты похоже так и не прочитал первоначальный пост torsполучить доступ к privet- или protecterd- свойству ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2004, 00:13 |
|
||
|
Можно ли?
|
|||
|---|---|---|---|
|
#18+
2 Lepsik А ты мой пост не понял: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Этот код не скомпилируется. Отсюда следует, что приведенным тобой способ получить доступ к приватному или защищенному члену данных не в кассу. Теперь понятно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2004, 11:14 |
|
||
|
Можно ли?
|
|||
|---|---|---|---|
|
#18+
2Анатолий Широков Отсюда следует, что приведенным тобой способ получить доступ к приватному или защищенному члену данных не в кассу. все таки головой иногда следует думать. копи-паст не каждому пойдет на пользу. Но есть еще более простой способ. struct A { private: int a; }; struct C // дубликат класса без обьявления секций доступа { int a; }; ....................... A a; C *p = (C *)(void *)&a; p->a = 10; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2004, 17:07 |
|
||
|
Можно ли?
|
|||
|---|---|---|---|
|
#18+
2 Анатолий Широков Код: plaintext 1. 2. 3. 4. 2 Lepsik Код: plaintext 1. PS. Всё таки не хватает на этом сайте, отметок за посты, а то бы я кое-кому влепил пару минусов ;o) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2004, 18:15 |
|
||
|
Можно ли?
|
|||
|---|---|---|---|
|
#18+
2 Lepsik авторвсе таки головой иногда следует думать. копи-паст не каждому пойдет на пользу. Ты это себе, приветствую самокритику:) авторНо есть еще более простой способ. Похоже, что это ты читаешь только последние посты в треде. 2 well_wisher_ Нет, не опечатка. Это я показывал Lepsik-у, что получить смещение приватного и защищенного члена не удастся - ведь именно такой способ предлагался им, чтобы потом воспользовавшишь смещением поместить туда значение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2004, 18:25 |
|
||
|
Можно ли?
|
|||
|---|---|---|---|
|
#18+
-2Анатолий Широков мой первый пост в добавление СЕМь чтобы не лазить отладчиком. и ежу понятно что простых способов нет. А умная ирония над всеми что все типа дураки, а я один на коне тут типа не совсем уместна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2004, 19:31 |
|
||
|
Можно ли?
|
|||
|---|---|---|---|
|
#18+
Аггрессивный способ вести диалог навязан Вами, поэтому пеняйте сами на себя, а не приписывайте мне "умную ирония" - Вы спутали причину со следствием. Внимательно перечитайте ведь тред: СЕМь предложил в дебаггере узнать смещение члена - то есть опытным путем определить смещение приватного члена. На что Вы отвечаете "можно и не в дебаггере" и приводите макрос получения смещение члена, который работает только для публичныйх членов класса - Ваша поправка показалась мне не логичной в контексте основного вопроса вот я и поспешил Вас поправить. На что Вы очень оскорбились и предложили мне перечитать первоначальный вопрос. Теперь же Вы утверждаете буквально следующее:7 Код: plaintext 1. Не стыкуется как-то - с одной стороны, Вы отсылаете меня перечитать вопрос (типа, дурик, какого ты здесь выступаешь, я знаю, что я говорю), а с другой стороны, оказывается, Вы только лишь поправляли СЕМь!!! Короче, "спаси себя сам и рядом спасутся тысячи", аминь:) Без обид. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2004, 19:54 |
|
||
|
Можно ли?
|
|||
|---|---|---|---|
|
#18+
2 well_wisher_ Точно, прошу прощения, ведь речь шла о первоначальном пример. Тогда да, конечно, там так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2004, 20:18 |
|
||
|
Можно ли?
|
|||
|---|---|---|---|
|
#18+
2 Lepsik & А.Ш. Тока меня не бейте! А вообще приватность/не_приватность - разбор компилятора. Чтоб не мучиться надо компилятор переправить :) Есть камень в дублировании класса: надо ещё проверить, какой способ упаковки данных в классе стоит... (Хотя, может я и не прав, может при касте с класса на класс выравнивание делается автоматически, расскажите, кто знает). Ещё слышал я про динамическое создание классов. Но не видел. Вот если такая штука есть, то можно, наверно, пробовать генерить на ходу "public"-класс и написать макрос для доступа через него к нужному классу. Но тут опять же надо как-то на ходу получать информацию о данных этого класса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2004, 11:45 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=32497678&tid=2035049]: |
0ms |
get settings: |
6ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
41ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
30ms |
get tp. blocked users: |
1ms |
| others: | 199ms |
| total: | 301ms |

| 0 / 0 |
