информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
За кого нас держат?Атака на InternetВсе любят мед
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Серьезный сбой AWS положил множество... 
 Фишинговая атака на Python-разработчиков 
 ФБР нашла русский след в атаках... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[оффтопик] Функция в области данных. 22.08.02 12:48  Число просмотров: 1025
Автор: :-) <:-)> Статус: Elderman
<"чистая" ссылка>
> Thx,
> Chto zhe ty tak redko na forum zahodish gliadish togda by
> tozhe podskazal. :-)

Да причина банальная - посканировал сеть на работе, бздительные админы и среагировали. Впрочем, надо отдать им должное, терпели они это довольно долго. А потом вдруг пришли к моему начальнику и сказали, что " ваш сотрудник - хакер-факер, занимается @#$ней в рабочее время (вот логи) и всех нас уже зае$ал"
Вот и захожу теперь сюда редко :(
<programming>
[Win32] Функция в области данных. 21.08.02 10:06  
Автор: IgorR <Igor Razin> Статус: Member
<"чистая" ссылка>
Тут припёрло сделать сабж. Вспомнился код, который приводил z0:

------------------------------------ test.c -------------------------------------
#include <stdio.h>

#define ONE_FUNCTION_FITS_HERE 0x1000

char code_in_data_section[ONE_FUNCTION_FITS_HERE];

#pragma push (check_stack)
#pragma off (check_stack)
void some_function(void)
{
int (*printf_indirect)(const char*,...)=&printf;
printf_indirect ("hello from data section!\n");
return;
}
#pragma pop (check_stack)
void some_next_function(void) {}

void main(void)
{
int size_of_function = (int)(&some_next_function) - (int)(&some_function);
int i;
void (*this_we_call)(void) = (void (*)(void)) code_in_data_section;

for(i=0; i<size_of_function; i++)
{
code_in_data_section[i] = ((char*) some_function)[i];
}

this_we_call(); // !
}
---------------------------------------------------------------------------------

Вышло следующее (под W2k):

(int)(&some_function) - получается адрес на jmp на функцию
(int)(&some_next_function) - то же

соответственно
int size_of_function = (int)(&some_next_function) - (int)(&some_function);
выдаёт размер между jmp-ами, а не размер функции.

следовательно
for(i=0; i<size_of_function; i++) {
code_in_data_section[i] = ((char*) some_function)[i]; }
копирует все эти jmp-ы

итого
this_we_call();
выполняет jmp на реальную функцию. Потому, возможно, и работает.

Что я делаю не так?
[Win32] Функция в области данных. 22.08.02 01:15  
Автор: z0 <z0> Статус: Member
<"чистая" ссылка>
> (int)(&some_function) - получается адрес на jmp на функцию

как понять "адрес на jmp на функцию" ?
вызов должен быть примерно таким
push 1 (6a 01) ;допустим
push 2 (6a 02) ;допустим
call FUNCTION (E8 (offset FUNCTION)-(offset RETURN_ADDRESS))
RETURN_ADDRESS:
...
FUNCTION:
где тут jmp ???
приведи машинный код чтобы я понял
а вообще-то похоже на лишнюю оптимизацию
главное тут - в функции живущей в области данных не должно быть ни одного прямого вызова другой функции, иначе тебе придется самому корректировать REL32 компоненту
[Win32] Функция в области данных. 21.08.02 22:36  
Автор: + <Mikhail> Статус: Elderman
<"чистая" ссылка>
Da potomuchto na VC compilere eta baida ne rabotaet.

P.S.
I kstati pisal ob etom v tom obsuzhdenii.
[Win32] Функция в области данных. 21.08.02 23:48  
Автор: :-) <:-)> Статус: Elderman
<"чистая" ссылка>
> Da potomuchto na VC compilere eta baida ne rabotaet.
>
> P.S.
> I kstati pisal ob etom v tom obsuzhdenii.

У меня в MSVC 6.0 все работает.
Просто надо выкинуть прагмы и компилить в Release с отключенной оптимизацией. Потому что в Debug-версии проекта появляются jmp-ы, про которые писал IgorR, а оптимизатор превращает
int (*printf_indirect)(const char*,...)=&printf;
printf_indirect ("hello from data section!\n");
в
printf("hello from data section!\n");
[Win32] Функция в области данных. 22.08.02 03:23  
Автор: + <Mikhail> Статус: Elderman
<"чистая" ссылка>
Thx,
Chto zhe ty tak redko na forum zahodish gliadish togda by tozhe podskazal. :-)
[оффтопик] Функция в области данных. 22.08.02 12:48  
Автор: :-) <:-)> Статус: Elderman
<"чистая" ссылка>
> Thx,
> Chto zhe ty tak redko na forum zahodish gliadish togda by
> tozhe podskazal. :-)

Да причина банальная - посканировал сеть на работе, бздительные админы и среагировали. Впрочем, надо отдать им должное, терпели они это довольно долго. А потом вдруг пришли к моему начальнику и сказали, что " ваш сотрудник - хакер-факер, занимается @#$ней в рабочее время (вот логи) и всех нас уже зае$ал"
Вот и захожу теперь сюда редко :(
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach