|
|
|
Первые четыре байта - указатель на VTABLE
|
|||
|---|---|---|---|
|
#18+
Замучила проблема обнуления указателя на таблицу виртуальных функций. Кто-нибудь знает хороший метод идентификации того, что первые четыре байта участка памяти - указатель на таблицу виртуальных функций? Заранее огромное спасибо ответившему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2007, 16:20:05 |
|
||
|
Первые четыре байта - указатель на VTABLE
|
|||
|---|---|---|---|
|
#18+
ы? А зачем его обнулять? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2007, 16:27:26 |
|
||
|
Первые четыре байта - указатель на VTABLE
|
|||
|---|---|---|---|
|
#18+
sobolevЗамучила проблема обнуления указателя на таблицу виртуальных функций. Кто-нибудь знает хороший метод идентификации того, что первые четыре байта участка памяти - указатель на таблицу виртуальных функций? Заранее огромное спасибо ответившему. А кто вам сказал что в первых 4(8) байтах указатель на таблицу виртуальных функций, для некоторых компиляторов это не так ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2007, 16:27:34 |
|
||
|
Первые четыре байта - указатель на VTABLE
|
|||
|---|---|---|---|
|
#18+
Что за проблема? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2007, 16:28:23 |
|
||
|
Первые четыре байта - указатель на VTABLE
|
|||
|---|---|---|---|
|
#18+
maXmoы? А зачем его обнулять? Обычная процедура - обнуления структур данных, лишенных конструктора. Однако, некоторые структуры усложняются и получают в навесок VTABLE. Из-за непомерного размера проекта можно не вспомнить где сколько-то лет назад было обнуление экземпляра такой структуры... приехали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2007, 16:34:48 |
|
||
|
Первые четыре байта - указатель на VTABLE
|
|||
|---|---|---|---|
|
#18+
blinded sobolevЗамучила проблема обнуления указателя на таблицу виртуальных функций. Кто-нибудь знает хороший метод идентификации того, что первые четыре байта участка памяти - указатель на таблицу виртуальных функций? Заранее огромное спасибо ответившему. А кто вам сказал что в первых 4(8) байтах указатель на таблицу виртуальных функций, для некоторых компиляторов это не так Я про это знаю. Но на текущий момент я пользуюсь тем компилятором, на поведение которого в данном случае готов заложиться (дальше видно будет). В конце концов, я надеюсь решить проблему одним единственным куском кода, зашитым в memzero() (собственный имплемент). Соответственно, портировать такой кусок на любой компилятор или ОС - не проблема. Так все-таки, идея у кого-нибудь есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2007, 16:38:03 |
|
||
|
Первые четыре байта - указатель на VTABLE
|
|||
|---|---|---|---|
|
#18+
Ну не фига-се, вот так структура с виртуальными методами ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2007, 16:39:12 |
|
||
|
Первые четыре байта - указатель на VTABLE
|
|||
|---|---|---|---|
|
#18+
sobolev Так все-таки, идея у кого-нибудь есть? любое решение в данном случае костыль и опасный. поэтому вооружайся контексным поиском и пиши нормальные конструкторы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2007, 16:39:48 |
|
||
|
Первые четыре байта - указатель на VTABLE
|
|||
|---|---|---|---|
|
#18+
sobolev maXmoы? А зачем его обнулять? Обычная процедура - обнуления структур данных, лишенных конструктора. Однако, некоторые структуры усложняются и получают в навесок VTABLE. Из-за непомерного размера проекта можно не вспомнить где сколько-то лет назад было обнуление экземпляра такой структуры... приехали. Компилятор пишете? А введение конструктра по умолчанию? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2007, 16:43:55 |
|
||
|
Первые четыре байта - указатель на VTABLE
|
|||
|---|---|---|---|
|
#18+
sobolev maXmoы? А зачем его обнулять? Обычная процедура - обнуления структур данных, лишенных конструктора. Однако, некоторые структуры усложняются и получают в навесок VTABLE. Из-за непомерного размера проекта можно не вспомнить где сколько-то лет назад было обнуление экземпляра такой структуры... приехали. НИКОГДА не обращаться к не POD-данным на низком уровне ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2007, 16:44:52 |
|
||
|
Первые четыре байта - указатель на VTABLE
|
|||
|---|---|---|---|
|
#18+
sobolev wrote: > что первые четыре байта участка памяти - указатель на таблицу > виртуальных функций? В g++/msvc в первые четыре байта попадает первая объявленная не-статическая переменная внутри класса. >Обычная процедура - обнуления структур данных, лишенных конструктора. Это можно сделать в конструкторе, инициализаторе, и т.д. Зачем вам доступ к VTABLE? Если у структуры есть VTABLE, лучше сделать ей нормальный конструктор. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2007, 18:25:03 |
|
||
|
Первые четыре байта - указатель на VTABLE
|
|||
|---|---|---|---|
|
#18+
ErV sobolev wrote: > что первые четыре байта участка памяти - указатель на таблицу > виртуальных функций? В g++/msvc в первые четыре байта попадает первая объявленная не-статическая переменная внутри класса. >Обычная процедура - обнуления структур данных, лишенных конструктора. Это можно сделать в конструкторе, инициализаторе, и т.д. Зачем вам доступ к VTABLE? Если у структуры есть VTABLE, лучше сделать ей нормальный конструктор. Posted via ActualForum NNTP Server 1.4 В msvs первые 4 байта экземпляра класса - указатель на таблицу виртуальных функций, если класс или его предок содержит хоть одну виртуальную функцию, если нет, то см. вашу реплику. По поводу второй части вашей реплики, мне кажется, я дал исчерпывающее объяснение выше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2007, 18:41:42 |
|
||
|
Первые четыре байта - указатель на VTABLE
|
|||
|---|---|---|---|
|
#18+
sobolev В msvs первые 4 байта экземпляра класса - указатель на таблицу виртуальных функций, если класс или его предок содержит хоть одну виртуальную функцию, если нет, то см. вашу реплику. По поводу второй части вашей реплики, мне кажется, я дал исчерпывающее объяснение выше. Ну ежели кому хочется убиться, то чегоже не помочь Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2007, 19:02:41 |
|
||
|
Первые четыре байта - указатель на VTABLE
|
|||
|---|---|---|---|
|
#18+
Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2007, 20:13:52 |
|
||
|
Первые четыре байта - указатель на VTABLE
|
|||
|---|---|---|---|
|
#18+
sobolevПо поводу второй части вашей реплики, мне кажется, я дал исчерпывающее объяснение выше.отсутствие отладчика не упомянуто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2007, 20:14:57 |
|
||
|
Первые четыре байта - указатель на VTABLE
|
|||
|---|---|---|---|
|
#18+
sobolev wrote: > В msvs первые 4 байта экземпляра класса Ошибался, признаю. Только что протестил. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. Только у меня g++, и все равно не получится опознать, есть ли в начале указатель на таблицу методов или мусор. Если данные не инициализированы, то нельзя проверить, указатель ли это на таблицу или рандомный мусор (хотя в отладочном режиме в неинициализированных данных MSVC хранится 0xCCCCCCCC, для релиза это не работает). Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2007, 20:17:39 |
|
||
|
Первые четыре байта - указатель на VTABLE
|
|||
|---|---|---|---|
|
#18+
ErVОшибался, признаю. Только что протестил.ну приехали, а COM–компоненты каким компилятором компилятся? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2007, 20:28:51 |
|
||
|
Первые четыре байта - указатель на VTABLE
|
|||
|---|---|---|---|
|
#18+
ErVТолько у меня g++, и все равно не получится опознать, есть ли в начале указатель на таблицу методов или мусор. Если данные не инициализированы, то нельзя проверить, указатель ли это на таблицу или рандомный мусор (хотя в отладочном режиме в неинициализированных данных MSVC хранится 0xCCCCCCCC, для релиза это не работает).можно попробовать сравнить указатель на функцию с соответствующим ей значением из vtbl ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2007, 20:33:46 |
|
||
|
Первые четыре байта - указатель на VTABLE
|
|||
|---|---|---|---|
|
#18+
maXmo Код: plaintext А вот и нет, там вообще надо abs(ptr - static_cast<Eve*>(ptr)) чтобы и на хипе и на стеке попасть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2007, 20:53:18 |
|
||
|
Первые четыре байта - указатель на VTABLE
|
|||
|---|---|---|---|
|
#18+
maXmo wrote: > ну приехали, а COM?компоненты каким компилятором компилятся? Я не это имел в виду. Я ранее написал, что вначале идут поля данных, а затем vtbl. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2007, 23:00:40 |
|
||
|
Первые четыре байта - указатель на VTABLE
|
|||
|---|---|---|---|
|
#18+
blindedчтобы и на хипе и на стеке попастьа эти случаи чем-то отличаются? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2007, 14:31:04 |
|
||
|
|

start [/forum/search_topic.php?author=UnicodeRTF&author_mode=last_topics&do_search=1]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
get settings: |
7ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
80ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
| others: | 426ms |
| total: | 636ms |

| 0 / 0 |
