Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: преобразования типа указателя на функцию, код в сегменте данных\стеке  (Прочитано 7695 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
Mayor
Специалист

ru
Offline Offline

« : 31-08-2009 15:49 » new

преобразования типа указателя на функцию, код в сегменте данных\стеке

насколько мне известно, стандарт запрещаят преобразовывать тип указателя на фукнцию

как можно обойти стандарт, чтобы перенести данные из указателя на фукнцию в char* и потом обратно в другой указатель ?

возникнут ли какие сложности с исполнением кода в сегменте данных или на стеке?

Записан

1n c0de we trust
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 31-08-2009 15:59 » 


Код:
typedef int(*PF)(int);


static int F(int)
{
return 0;
}


int main()
{
  PF pf=F;
  char* pch=(char*)&F;
  PF pf2=(PF)pch;

  pf2(4);
   return 0;
}

трудностей не наблюлось ) Все указатели имеют один размер
Записан

Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #2 : 01-09-2009 03:15 » 

в некоторых версиях могут быть проблемы с попыткой выполнить код находящийся в сегменте данных, но это отключается.
Записан

Странно всё это....
Mayor
Специалист

ru
Offline Offline

« Ответ #3 : 01-09-2009 11:13 » 

Код:
g++ -Wall -Wextra --pedantic -g -o current current.cpp
current.cpp: In function ‘int main()’:
current.cpp:33: warning: ISO C++ forbids casting between pointer-to-function and pointer-to-object
current.cpp:38: warning: ISO C++ forbids casting between pointer-to-function and pointer-to-object

действительно все скомпилилось, а как-нибудь можно отключить это предупреждение для некоторых строчек файла?

в некоторых версиях могут быть проблемы с попыткой выполнить код находящийся в сегменте данных, но это отключается.

mprotect ?
Записан

1n c0de we trust
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #4 : 02-09-2009 03:42 » 

mprotect ?

что mprotect?
Записан

Странно всё это....
Mayor
Специалист

ru
Offline Offline

« Ответ #5 : 06-09-2009 05:56 » 

что mprotect?

чем проблеммы выполнения кода в сегменте данных отключаются?
Записан

1n c0de we trust
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #6 : 07-09-2009 03:35 » 

Data Execution Prevention - DEP
http://support.microsoft.com/kb/875352
Записан

Странно всё это....
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines