|
|
|
указатель на функцию
|
|||
|---|---|---|---|
|
#18+
Привет народ! Пожалуйста, расскажите основное для использования указателей на функцию: описание, присвоение указателю на функцию адреса функции, разименовывание указателя на функцию. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2004, 15:25 |
|
||
|
указатель на функцию
|
|||
|---|---|---|---|
|
#18+
А то конкретно интересует? Или тебе реферат на эту тему нужен? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2004, 18:17 |
|
||
|
указатель на функцию
|
|||
|---|---|---|---|
|
#18+
нипонил... void (*f)(); - объявили указатель на функцию без аргументов и без возвращаемого значения. f(); - позвали её (забыв проинициализировать указатель) А вот вопрос поинтереснее - кто-нибудь создавал функции динамически? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2004, 10:28 |
|
||
|
указатель на функцию
|
|||
|---|---|---|---|
|
#18+
Это как - самомодифицируемый код ? Тогда при чем здесь c/C++ - это на ассемблере надо писать, причем не под виндами однозначно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2004, 13:29 |
|
||
|
указатель на функцию
|
|||
|---|---|---|---|
|
#18+
MasterZivТогда при чем здесь c/C++ - это на ассемблере надо писать, причем не под виндами однозначно. Сильное утверждение. Вообще-то пару примеров такого нетрудно найти, например, в дельфовой VCL вполне себе под виндами :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2004, 15:13 |
|
||
|
указатель на функцию
|
|||
|---|---|---|---|
|
#18+
Я вот что думаю... Если есть некая статическая/полустатическая_с_параметрами функция, конечной длинны, то можно выделить кусок памяти в куче, скопировать код туда, сделать указатель на функцию, присвоить ему значение адреса этого куска памяти и позвать. Что будет? По идее - отработает... Кто-нибудь пробовал? Вызов должен облажиться скидыванием/вытаскиванием стека, а внутренности - они код и есть... Или функции лежат в одном определённом месте памяти и из другого места быть вызваны не могут?... Эх, блин, времени нет... Но оно будет, тогда я это дело раскопаю.. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2004, 16:39 |
|
||
|
указатель на функцию
|
|||
|---|---|---|---|
|
#18+
да вроде у кучи и у кода сегменты разные. нарушение доступа к памяти - вот наилучший результат, на который можно рассчитывать :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2004, 16:49 |
|
||
|
указатель на функцию
|
|||
|---|---|---|---|
|
#18+
Можно и проще: "на лету" состряпать exe'шник, туда написать, что нужно и запустить. Вот и самомодифицируемый код получится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2004, 17:05 |
|
||
|
указатель на функцию
|
|||
|---|---|---|---|
|
#18+
На лету собирать ехе-шник тоже нехорошо - код может меняться очень быстро, тормоза будут. А вот нарушение доступа к памяти - это да... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2004, 07:17 |
|
||
|
указатель на функцию
|
|||
|---|---|---|---|
|
#18+
softwarer MasterZivТогда при чем здесь c/C++ - это на ассемблере надо писать, причем не под виндами однозначно. Сильное утверждение. Вообще-то пару примеров такого нетрудно найти, например, в дельфовой VCL вполне себе под виндами :) Ты что-то путаешь. В виндах, как и во многих других нормальных операционных системах, это невозможно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2004, 10:05 |
|
||
|
указатель на функцию
|
|||
|---|---|---|---|
|
#18+
SiebЕсли есть некая статическая/полустатическая_с_параметрами функция, конечной длинны, то можно выделить кусок памяти в куче, скопировать код туда, сделать указатель на функцию, присвоить ему значение адреса этого куска памяти и позвать. Что будет? По идее - отработает... Кто-нибудь пробовал? Вызов должен облажиться скидыванием/вытаскиванием стека, а внутренности - они код и есть... Или функции лежат в одном определённом месте памяти и из другого места быть вызваны не могут?... Именно невозможно. Процессор работает в защищенном режиме, код лежит в сегменте (памяти) кода , данные - в памяти данных. при попытке передать управление в область данных просто будет защита памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2004, 10:08 |
|
||
|
указатель на функцию
|
|||
|---|---|---|---|
|
#18+
MasterZivИменно невозможно. Процессор работает в защищенном режиме, код лежит в сегменте (памяти) кода , данные - в памяти данных. при попытке передать управление в область данных просто будет защита памяти. Можно поменять тип сегмента с данных на сегмент кода, предварительно записавт туда что нужно. Потом передать туда управление. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2004, 10:38 |
|
||
|
указатель на функцию
|
|||
|---|---|---|---|
|
#18+
в 9х может и можно, а в nt наврядли :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2004, 10:54 |
|
||
|
указатель на функцию
|
|||
|---|---|---|---|
|
#18+
авторв 9х может и можно, а в nt наврядли :-) Почему же :). Нужны лишь соответсвующие привилегии (а может и нет). В конце концов сама операционная система делает нечто подобное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2004, 11:12 |
|
||
|
указатель на функцию
|
|||
|---|---|---|---|
|
#18+
Так всё-таки как? :) Мне скоро это станет актуально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2004, 16:36 |
|
||
|
указатель на функцию
|
|||
|---|---|---|---|
|
#18+
авторМне скоро это станет актуально А если не секрет, что эта за задача такая, что требует использования самомодефицирующегося кода? Уж ли не вирус али троян какой :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2004, 17:03 |
|
||
|
указатель на функцию
|
|||
|---|---|---|---|
|
#18+
MasterZiv при попытке передать управление в область данных просто будет защита памяти. Ну например, такой вот изврат (у меня полное впечатление, что кто-то из борландеров просто решил покуражиться, то есть смысла делать именно так я не вижу): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Вполне себе работает везде, где работают дельфовые программы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2004, 17:20 |
|
||
|
указатель на функцию
|
|||
|---|---|---|---|
|
#18+
SiebЯ вот что думаю... Если есть некая статическая/полустатическая_с_параметрами функция, конечной длинны, то можно выделить кусок памяти в куче, скопировать код туда, сделать указатель на функцию, присвоить ему значение адреса этого куска памяти и позвать. Что будет? По идее - отработает... Кто-нибудь пробовал? Я пробовал. Работает влёт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2004, 22:21 |
|
||
|
указатель на функцию
|
|||
|---|---|---|---|
|
#18+
Без цитат. Всем умникам, рассуждающим про сегменты кода, данных и т. д. и т. п. Помимо популярных книжек про процессоры нелишне познакомиться с flat моделью памяти. Узнать, что в ней у процесса селекторы содержат индекс одного и того же дескриптора, что делает приведенные аргументы против совершенно несостоятельными. Заодно придёт понимание природы многих эксплойтов, основанных на переполнении буфера и выполнении кодов из стека. Короче говоря, если нет твёрдых знаний, то перед тем, как отвечать на вопрос, не мешает подумать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2004, 22:29 |
|
||
|
указатель на функцию
|
|||
|---|---|---|---|
|
#18+
R10Уж ли не вирус али троян какой :) Нет, я таким не занимаюсь. Хотя, на самом деле, полезная штука для развития (как и все другие задачи, включая написание игр). Есть например, много условные функции, которые, например, при прохождении некого условия 1 раз потом его проверять не должны. if(a) { a = !a; прыг(); } и так 10000 раз, к примеру. Можно написать 2 функции и пользоваться указателем. А чё делать со свичами? Если их штук сто реально и в 99% времени используется 2, остальные проверки просто жрут память? Тогда было бы удобнее на ходу собрать функцию с парой кейсов и счастье есть :) ГамычЯ пробовал. Работает влёт. Ура! Под всеми виндами? ГамычПомимо популярных книжек про процессоры нелишне познакомиться с flat моделью памяти. Узнать, что в ней у процесса селекторы содержат индекс одного и того же дескриптора, что делает приведенные аргументы против совершенно несостоятельными. Заодно придёт понимание природы многих эксплойтов, основанных на переполнении буфера и выполнении кодов из стека. А можно немного подробнее? Или хотяб ссылку? Но лучше своими словами :) Щас разберёмся с этим вопросом, и у меня есть ещё один интересный... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2004, 08:20 |
|
||
|
указатель на функцию
|
|||
|---|---|---|---|
|
#18+
если есть какой-то хак в какой-то системе, стоит ли основывать на нем свою прогграмму? в другой системе этого хака может и не быть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2004, 09:36 |
|
||
|
указатель на функцию
|
|||
|---|---|---|---|
|
#18+
Блин, так это хак или не хак? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2004, 16:12 |
|
||
|
указатель на функцию
|
|||
|---|---|---|---|
|
#18+
Sie Ура! Под всеми виндами? Не знаю. W2K WS, W2K Server, Advanced Server, WinXP Pro - под этими работает. А так же и в Linux проблем не испытываю. Повторюсь, принципиальная возможность этого не связана с конкретной ОС,а только с моделью памяти. Модель flat не предусматривает сегментации адресного пространства процесса - отсюда вытекает всё остальное. Sie А можно немного подробнее? Или хотяб ссылку? Но лучше своими словами :) Немного поподробнее не получится - тема одновременно обширная и глубокая. Рекомендую прочесть несколько книг по архитектуре современных процессоров, виндовая модель памяти неплохо расписана в MSDN. Не мешает ознакомиться с хелпами из DDK в части касающейся менеджера памяти. В таком вот акцепте :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2004, 00:55 |
|
||
|
указатель на функцию
|
|||
|---|---|---|---|
|
#18+
alex_kесли есть какой-то хак в какой-то системе, стоит ли основывать на нем свою прогграмму? в другой системе этого хака может и не быть Система здесь ни при чём. Пока используется модель flat - будет оставаться принципиальная возможность работы такого кода. Сменится модель памяти - будет видно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2004, 00:58 |
|
||
|
указатель на функцию
|
|||
|---|---|---|---|
|
#18+
в этом форуме мы с++ обсуждаем или модели памяти? с++ может быть реализовано на любой платформе... хотя, если на большинстве платформ дело обстаит таким образом, и писать прикладуху для конкретного набора платформ, то наверное флаг в руки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2004, 05:37 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=32817567&tid=2033971]: |
0ms |
get settings: |
6ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
86ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
86ms |
get tp. blocked users: |
2ms |
| others: | 217ms |
| total: | 441ms |

| 0 / 0 |
