|
|
|
указатель на функцию
|
|||
|---|---|---|---|
|
#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 |
|
||
|
указатель на функцию
|
|||
|---|---|---|---|
|
#18+
Алех_кв этом форуме мы с++ обсуждаем или модели памяти? Ну дык, всё взаимосвязано. с++ сам по себе ничего не даёт, пока не привязан к какой-нить оси. Ни текст вывести, ни на кнопку нажать :) В этом формуме обсуждаем всё, что пишется благодаря С++. (форума по апям тут нету) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2004, 08:41 |
|
||
|
указатель на функцию
|
|||
|---|---|---|---|
|
#18+
alex_kв этом форуме мы с++ обсуждаем или модели памяти? с++ может быть реализовано на любой платформе... хотя, если на большинстве платформ дело обстаит таким образом, и писать прикладуху для конкретного набора платформ, то наверное флаг в руки Я ответил по существу вопроса. Если же топик не соответствует эхотагу, то прибей его. Ежели, конечно, полномочия на то есть ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2004, 22:43 |
|
||
|
указатель на функцию
|
|||
|---|---|---|---|
|
#18+
да я не про то. все течет, все меняется, платформы уходят в прошлое и возникают из ниоткуда :-) жить будет та кпрограмма, которая будет как можно меньше использовать специфические фишки и как можно больше стандартные. для того и стандарт думают :-) ну заработает твой алгоритм на трех - пяти платформах. и все... потом переписывать придеться, время тратить. если цель - именно работа именно на этих платформах, тогда нет вопросов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2004, 10:02 |
|
||
|
указатель на функцию
|
|||
|---|---|---|---|
|
#18+
хм... а я так понял, что модель памяти flat - это не от платвормы зависит... или я не прав? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2004, 10:23 |
|
||
|
указатель на функцию
|
|||
|---|---|---|---|
|
#18+
все зависит от платформы :-) разве под дос небыло с++? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2004, 10:51 |
|
||
|
указатель на функцию
|
|||
|---|---|---|---|
|
#18+
Нет, имхо есть вещи внеплатформенные. С++ под дос - это иллюзия :) Есть набор компиляторов для с++ под дос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2004, 14:03 |
|
||
|
указатель на функцию
|
|||
|---|---|---|---|
|
#18+
иллюзия? сам не юзал врать не стану, но что-то не верится. да и потом, разве "компилятор с++ под дос" не тоже самое что "с++ под дос"? или он, компилятор, сам под дос не работает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2004, 15:08 |
|
||
|
указатель на функцию
|
|||
|---|---|---|---|
|
#18+
Sieхм... а я так понял, что модель памяти flat - это не от платвормы зависит... или я не прав? Не прав. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2004, 23:11 |
|
||
|
указатель на функцию
|
|||
|---|---|---|---|
|
#18+
авторразве "компилятор с++ под дос" не тоже самое что "с++ под дос"? Всмысле, компиляторы разные бывают, некоторые что-то не умеют. В том же MS компиляторе не по страндарту сделано объявление переменной в цикле. В отличие от ВС++. авторНе прав. Это плохо. Стало быть, использовать эту фичу мне не придётся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2004, 10:08 |
|
||
|
указатель на функцию
|
|||
|---|---|---|---|
|
#18+
SieЭто плохо. Стало быть, использовать эту фичу мне не придётся. Дело хозяйское. Лично я юзаю и не жужжу. И убеждён - долгое время проблем испытывать не буду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2004, 22:13 |
|
||
|
указатель на функцию
|
|||
|---|---|---|---|
|
#18+
Ктстаи, command pointer руками прописать возможно? И если да, то что быстрее? Сделать jmp или mov cp, чегото ? Ничего ведь мне не мешает в сегменте кода прыгать из функции в функцию пропуская ret дабы не возиться с загрузкой/выгруской стека? Тогда можно налепить абстрактные куски функций, котороые соединять jmp-ами. Как вам такая идея? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2004, 09:12 |
|
||
|
|

start [/forum/topic.php?all=1&fid=57&tid=2033971]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
62ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
| others: | 227ms |
| total: | 397ms |

| 0 / 0 |
