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


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

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

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

Оффлайн victor00000

  • Автор темы
  • Старожил
  • *
  • Сообщений: 15568
  • Глухонемой (Deaf)
    • Просмотр профиля
// 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~$
Wars ~.o

 

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