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





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[Win32] функции в сегменте кода 18.11.02 19:02  
Автор: fuckyoudude Статус: Незарегистрированный пользователь
<"чистая" ссылка>
киньте плиз исходник по сабжу. Помню, пару месяцев назад проходил он по форуму, вроде =)) поискал в history, но не нашел ...
спасиб!
[Win32] А они все там и есть 19.11.02 13:33  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
Если в сегменте данных, то главное не компиль Debug-версию, в ней все вызовы сопровождаются _chkesp() - а если ты переместишь функцию с таким вызовом куда нить в кучу или в переменную, или на стек - вызов останется, но будет указывать незнамо куда
[Win32] А они все там и есть 19.11.02 22:25  
Автор: + <Mikhail> Статус: Elderman
<"чистая" ссылка>
> Если в сегменте данных, то главное не компиль Debug-версию,
> в ней все вызовы сопровождаются _chkesp() - а если ты
> переместишь функцию с таким вызовом куда нить в кучу или в
> переменную, или на стек - вызов останется, но будет
> указывать незнамо куда

_chkesp() mozhno otkluchit` v _DEBUG
опечатался =) , конечно я про сенгмент данных спрашивал)))... 19.11.02 22:13  
Автор: fuckyoudude Статус: Незарегистрированный пользователь
<"чистая" ссылка>
опечатался =) , конечно я про сенгмент данных спрашивал)))... 20.11.02 13:59  
Автор: Green Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Я делаю так:

#pragma comment(linker,"/MERGE:.text2=.data")
#pragma comment(linker,"/SECTION:.data,EWRX")

#pragma code_seg(".text2")
void func(...)
{
..........
}
Это действительно компильнет функцию в data_seg, но 20.11.02 16:32  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
Хотя компилер и матюкнется на несоответствие флагов секций
Насколько я понял, запустить нужно именно уже созданную функцию (шеллкод например), которая находится в переменной например. В общем то запустить - не проблема: и code_seg и data_seg - flat сегменты. Проблема как раз в том, чтоб эта самая функция была правильно написана: об chkesp я уже говорил - ее быть не должно любыми путями, кроме того если нужно использовать вызовы C-шной RTL, следует иметь в виду, что call на них генерится с относительной адресацией (относительно текущей инструкции - переместится call - все вызовы пойдут по левым адресам), код должен быть релоцируемым (если фиксапы нужны - их нужно выполнить самому до вызова функции), а так далее
[Win32] функции в сегменте кода 18.11.02 22:36  
Автор: + <Mikhail> Статус: Elderman
<"чистая" ссылка>
> киньте плиз исходник по сабжу. Помню, пару месяцев назад
> проходил он по форуму, вроде =)) поискал в history, но не
> нашел ...
> спасиб!
dlia VC:
tolko v Release build optimizaciu vykluchi ( ili poigraisia s nei )
void* alloc_foo(void *pFoo,void *pFooNext)
{
	long *p1, *p2;
#ifdef _DEBUG
	p2 = (long*)(long*)&((charpFooNext)[1] + (long)pFooNext + 5);
	p1 = (long*)(long*)&((charpFoo)[1] + (long)pFoo + 5);
#else
	p2 = (long*)pFooNext;
	p1 = (long*)pFoo;
#endif
	int size_of_function;
	size_of_function  = (int)p2 - (int)p1;

	char *p = new char[size_of_function];
	memcpy(p, p1, size_of_function);
	return p;
};

void  free_foo(void *pFoo)
{
	delete []pFoo;
}


void FooInDataSec(void *p)
{
	void*  pmemcpy)(voidconst void*, size_t) = &memcpy;
	pmemcpy(p, "test\0", 5);
}

void FooInDataSec_0(void *p){}

void main()
{
	void pFooInDataSec)(void;
	pFooInDataSec = alloc_foo(FooInDataSec, FooInDataSec_0);
	char sz[5];
	pFooInDataSec(sz);
	free_foo( pFooInDataSec );
	printf("%s", sz);
}

---
[Win32] сенк, есть над чем подумать! есть еще неясность! 18.11.02 23:22  
Автор: fuckyoudude Статус: Незарегистрированный пользователь
<"чистая" ссылка>
а нельзя так:
/*
* тут собсно-функция
*/
char func="\xZZ\xZZ...\xZZZ";

void (*f)(void);

int main(void)
{
f = (void*)func;
(*f)();
return 0;
}

я слышал, что можно так, но MSVC не компилит ( f = (void*)func; ) , говорит мол '=' can't convert (void*) to void (__cdecl * )(void)
:(
[Win32] сенк, есть над чем подумать! есть еще неясность! 19.11.02 01:20  
Автор: + <Mikhail> Статус: Elderman
<"чистая" ссылка>
> а нельзя так:
> /*
> * тут собсно-функция
> */
> char func="\xZZ\xZZ...\xZZZ";

char *func = "...";

>
> void (*f)(void);
>
> int main(void)
> {
> f = (void*)func;

f = (void (__cdecl *)(void))func;

> (*f)();

f();

> return 0;
> }
>
> я слышал, что можно так, но MSVC не компилит ( f =
> (void*)func; ) , говорит мол '=' can't convert (void*) to
> void (__cdecl * )(void)
> :(
[Win32] сенк, есть над чем подумать! есть еще неясность! 19.11.02 22:20  
Автор: fuckyoudude Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> > void (*f)(void);
....
> > (*f)();
>
> f();
здесь все-таки (*f)();
т.к определен указатель на функцию =)

Cенк за помощь.
Всего!
1




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


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