Форум русскоязычного сообщества Ubuntu


За новостями русскоязычного сообщества и Ubuntu в целом можно следить на нашей страничке в Google+

Автор Тема: C - что функция пакета в память адрес стартует, не бойся.  (Прочитано 176 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн victor00000

  • Автор темы
  • Старожил
  • *
  • Сообщений: 15426
  • Я не слышу.
    • Просмотр профиля
// func.c
// victor00000 (c) 2018
#define          _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
// ~$ gcc func.c -o func
/* terminal example
1:L~$
1:L~$ ./func
Please 'exit'.
1:L~$ echo $PRINT
0xXXXXXXX
1:L~$ ./func $PRINT
|===| ok |===|
1:L~$ exit
exit
exit of bash.
1:L~$
*/

void (*pp)(void) = 0;
void p (){
printf ("|===| ok |===|\n");
}

int main (int ia, char **ca){
if (ia == 2){
long int l;
l = strtoll (ca[1],0,16);
if (l < 1){
fputs ("Error address null.\n",stderr);
return 1;
}
pp = (void(*)(void)) l;
pp ();
return 0;
}
char *c = 0;
asprintf (&c,"%p",p);
setenv ("PRINT",c,0);
free (c);
puts ("Please 'exit'.");
system ("bash");
puts ("exit of bash.");
return 0;
}

http://paste.ubuntu.com/p/Rvzqz38Tm5/

1:L~$
1:L~$ ./func
Please 'exit'.
1:L~$ echo $PRINT
0x804855d
1:L~$ ./func $PRINT
|===| ok |===|
1:L~$ exit
exit
exit of bash.
1:L~$
~.o

 

Страница сгенерирована за 0.049 секунд. Запросов: 24.