Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Linux (https://forum.antichat.xyz/showthread.php?t=121447)

WhiteHat 19.05.2009 23:06

Linux
 
Добрый вечер, Уважаемые. Пишу диплом по информационной безопасности. Встал в ступор:
пишу маленький код:
Код:

#include <sys/types.h> 
#include <unistd.h>

int main() 
{         
        setuid(666);       

 return 0; 
}

Далее все это дело компилю:

Код:

gcc myprog.c -o myprog -g --static
тут я подключаю опцию отладки и функции, находящиеся в разделяемых библиотеках (хотя по поводу --static я не уверен, надо ли).

Так дальше:

Код:

gdb -q ./myprog
(gdb)disassemble main

и ищю строку вызова setuid

Далее дизассемблю setuid и ищю вызов ядра (прерывание $0x80)

Дальше я слегка запутался :confused:

Знаю, что в регистр %eax заносится номер системного вызова. Посмотрел в /usr/include/asm/unistd.h и нашел setuid, он равен 23. Аргумент 666 полетит в регистр, скажем %ebx. Какой уникальный номер у setuid я не знаю, для EXIT знаю 0x1.

Вообщем прошу помощи, нужно найти в отладчике gdb, как происходит вызов setuid и далее это дело перевести в шестнадцатиричное представление.

Перевести сам смогу, помогите найти кусок кода в gdb, где происходит вызов setuid.

Заранее благодарен всем!!!!

razb 20.05.2009 01:41

Если я правильно понял суть вопроса, то тебе надо код на асме вызова setuid() ?
Ну вот держи:
Код:

    movl $23, %eax  # $23  - setuid system call number
    movl $666, %ebx # $666 - rights
    int $0x80      # call setuid()

Кстате на 64х битной архитектуре номера системных вызовов отличные от 32х битной. Например на 32х setuid = 23, а на 64х setuid = 105

WhiteHat 20.05.2009 02:12

Спасибо, razb. Уже сам разобрался, пока ответы ждал. Но все равно спасибо.


Время: 02:06