Замена обработчика прерываний. Замена обработчика средствами DOS. Функция получения нулевого обработчика, страница 4

    printf("Process info when father started son\n");

    system("ps f -l");

    return 0;

}

СЫН

int main(void){

    exit(0);

}

12. Запуск процесса

STARTUPINFO      si = { sizeof(si)};

PROCESS_INFORMATION  pi;

BOOL ret = CreateProcess(NULL,lpStr,NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);

13. Запуск нитей

for (int i=0; i<count; i++){

S_Param * param = new S_Param;

    param->index = i;

    CreateThread(NULL, 0, Thread, param, 0, &tID);

}

char * PrStr [] = {    "THREAD_PRIORITY_ABOVE_NORMAL ",

"THREAD_PRIORITY_BELOW_NORMAL ",

                     "THREAD_PRIORITY_HIGHEST ",

                     "THREAD_PRIORITY_IDLE ",

                    "THREAD_PRIORITY_LOWEST ",

                    "THREAD_PRIORITY_NORMAL ",

                     "THREAD_PRIORITY_TIME_CRITICAL "};

int PrConst [] = {    THREAD_PRIORITY_ABOVE_NORMAL,

                         THREAD_PRIORITY_BELOW_NORMAL,

                         THREAD_PRIORITY_HIGHEST,

                         THREAD_PRIORITY_IDLE,

                         THREAD_PRIORITY_LOWEST,

                         THREAD_PRIORITY_NORMAL,

                         THREAD_PRIORITY_NORMAL};

14. ШЛЮЗ

#include <stdio.h>

main ( argc, argv )

int argc;

char *argv [];

{

FILE *fil;

int i;

char a;

sss=fopen(argv[1], “r”);

for(i=0;;i++)

{

If(feof(fil))

{

printf(“\n”);

break;

}

fscanf(fil,”%c”,&a);

printf(“%c”, a);

}

fclose(fil);

}

Содержимое файла /root/text:

You couldn’t see this text

Программе-шлюзу и файл, имеют следующие права доступа:

$ ls -l ./root/shluz ./root/text

-rwSrwxr-x 1 root root 4746 Nov 09 22:30 ./root/shluz

-rw------- 1 root root   59 Nov 09 22:35./root/text

Читаем файл программой shluz:

$ ./root/shluz ./root/text

You couldn’t see this text

Результат успешен, так как файл ./root/shluz имеет атрибут SUID.

15. Получение ссылок на файл

1) Получить все жесткие ссылки на заданный файл, находящиеся в разных каталогах пользовательского пространства.

# echo > ./example

# ln ./example /root/ab

# find -name "example" -printf "%p\tinode=%i\n" 2>/dev/null

./example       inode=7336320

./ab/example    inode=7336320

2)Скрипт, подсчитывающий и перечисляющий все символические ссылки на файл в разных каталогах:

# !/bin/bash

if [ $# -ne 1 ]

then

echo "Bad command line format";

exit 1;

fi

echo " Symbolic links to $1 = "

find -lname $1 | awk '{print} END {print  "Number of symbolic links = \n" NR}' ;

exit 0;

3) Получить все жесткие ссылки на заданный файл, находящиеся в разных каталогах пользовательского пространства (использовать конвейер команд и фильтрацию). ls –ilpR / 2>/dev/null | grep –e ‘ls –I $1 | cut –c 1-8’ file.txt

16. Программа изменяющая приоритет

Программа get_set_prio.c:

#include <stdio.h>

#include <sched.h>

#include <stdio.h>

main(int argc, char* argv[]){

int count_pid=0, pid=0;

int i,m;

while(argv[1][count_pid])

count_pid++;

for(i=0;i<count_pid;i++){

pid=pid*10+argv[1][i]-0x30;

}

printf("The priority of PID %i BEFORE changes is %i\nPlease input the increment equal: ",pid,i=getprio(pid));

scanf("%i",&m);

setprio(pid,i+m);

printf("The priority of PID %i AFTER changes is %i\n",pid,i=getprio(pid));

}