Хотя компилер и матюкнется на несоответствие флагов секций
Насколько я понял, запустить нужно именно уже созданную функцию (шеллкод например), которая находится в переменной например. В общем то запустить - не проблема: и code_seg и data_seg - flat сегменты. Проблема как раз в том, чтоб эта самая функция была правильно написана: об chkesp я уже говорил - ее быть не должно любыми путями, кроме того если нужно использовать вызовы C-шной RTL, следует иметь в виду, что call на них генерится с относительной адресацией (относительно текущей инструкции - переместится call - все вызовы пойдут по левым адресам), код должен быть релоцируемым (если фиксапы нужны - их нужно выполнить самому до вызова функции), а так далее
Если в сегменте данных, то главное не компиль Debug-версию, в ней все вызовы сопровождаются _chkesp() - а если ты переместишь функцию с таким вызовом куда нить в кучу или в переменную, или на стек - вызов останется, но будет указывать незнамо куда
[Win32] А они все там и есть19.11.02 22:25 Автор: + <Mikhail> Статус: Elderman
> Если в сегменте данных, то главное не компиль Debug-версию, > в ней все вызовы сопровождаются _chkesp() - а если ты > переместишь функцию с таким вызовом куда нить в кучу или в > переменную, или на стек - вызов останется, но будет > указывать незнамо куда
_chkesp() mozhno otkluchit` v _DEBUG
опечатался =) , конечно я про сенгмент данных спрашивал)))...19.11.02 22:13 Автор: fuckyoudude Статус: Незарегистрированный пользователь
Хотя компилер и матюкнется на несоответствие флагов секций
Насколько я понял, запустить нужно именно уже созданную функцию (шеллкод например), которая находится в переменной например. В общем то запустить - не проблема: и 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 )
> а нельзя так: > /* > * тут собсно-функция > */ > 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 Статус: Незарегистрированный пользователь