есть шелл бинарный unsigned char shell[144] как его правильно н си вазывать (void)(shell)(); в ауте и еще вопрос,если вызов с параметрами?
Код (Text): char shell[144]; int (__stdcall* pMyShell)(int param1, void* param2, double param3); pMyShell = (int (__stdcall*)(int param1, void* param2, double param3))shell; int result = pMyShell(10, 0, 14.5); Надеюсь, в примере все понятно без комментариев. __stdcall при необходимости сменить на __cdecl, тип и количество параметров подставить свои.
Comer_ __asm call and jamp отпадают - всё должно быть на си просто не могу допетрить ситатсис си на вызов бин кода, а он точно есть
Ursus спасибо только при приёме .\hel1.cpp(35) : error C2143: syntax error : missing ')' before '__cdecl' .\hel1.cpp(35) : error C2059: syntax error : ')'
Код (Text): // code.c: typedef void (__cdecl *EXEC)(void); char buff[1] = { 0xC3 }; main() { EXEC exec = (EXEC)buff; exec(); } cl code.c /link /section:.data,RWE /entry:main
wsd Вам на другой форум нужно. Тут Вам не помогут точно, если до сих пор не понятно как объявить указатель на функцию или привести любой другой указатель к нему.
Код (Text): [b]//code.cpp[/b] typedef void (__cdecl *EXEC)(void); char buff[1] = { 0xC3 }; int main() { EXEC exec = (EXEC) &buff[0]; exec(); }
nester7 nester7 ну никак не каститться!!! Код (Text): typedef void(__cdecl *kh)(int* aa , int* ab); kh assa = (kh)buf; объясни без приколов
wsd Осеннее обострение? Код (Text): unsigned char shell[16*1024]; ... #ifdef TEST_SHELLCODE do { void (*start)(void) = (void (*)(void))&shell[0]; __asm int 3; start(); // вариант с пар-рами void (*start)(int,int,int) = (void (*)(int,int,int))&shell[0]; __asm int 3; start(0,0,0); } while (0); #endif /* TEST_SHELLCODE */
wsd Код (Text): void foo(void) { typedef void (__cdecl *kh)(int*, int*); unsigned char buf[112]; int x, y; kh assa = (kh) &buf[0]; assa(&x, &y); }
Код вроде: для С++ - это unsigned char [ххх] to kh, тоесть массив к указателю. А код вроде: "Нормальный" - адрес к адресу приводятся.