मानता है कि हमारे पास टर्मिनल पर चलने वाला खोल है, मान लें,/dev/pts/1। खोल पहले ही चल रहा है और हम इसे पुनरारंभ नहीं कर सकते हैं।लिनक्स: एक सी प्रोग्राम लिखें जो एक शेल
अब हम एक सी प्रोग्राम लिखना चाहते हैं जो खोल को 'नियंत्रित' करेगा, यानी उपयोगकर्ता को एक शेल-जैसे इंटरफ़ेस प्रदान करेगा, उपयोगकर्ता के इनपुट को पढ़ेगा, इसे वास्तविक शैल पर/dev/pts पर पास कर देगा/1, इसे निष्पादित करें, खोल के आउटपुट को पढ़ें और इसे वापस उपयोगकर्ता को प्रिंट करें।
मैं जानता हूँ कि इस कार्य के आधे कैसे करना है: मुझे पता है कि उपयोगकर्ता के इनपुट इकट्ठा होते हैं और 'असली खोल' को यह इनपुट सुई:
#include <fcntl.h>
#include <sys/ioctl.h>
#include <stdio.h>
#define SIZE 100
int main(int argc, char** argv)
{
if(argc>1)
{
int tty = open(argv[1], O_WRONLY|O_NONBLOCK);
if(tty!=-1)
{
char *buf,buffer[SIZE+1];
while(1)
{
printf("> ");
fgets(buffer, SIZE, stdin);
if(buffer[0]=='q' && buffer[1]=='u' && buffer[2]=='i' && buffer[3]=='t') break;
for(buf=buffer; *buf!='\0'; buf++) ioctl(tty, TIOCSTI, buf);
}
close(tty);
}
else printf("Failed to open terminal %s\n", argv[1]);
}
return 0;
}
ऊपर अपने इनपुट में चल शेल के लिए पर पारित करेंगे टर्मिनल (अपना नाम पहले तर्क में दें) और खोल को निष्पादित करें। हालांकि, मुझे नहीं पता कि अब शैल के आउटपुट को कैसे पढ़ा जाए।
कोई सुझाव?
क्या आपने टीटीआई से पढ़ने की कोशिश की? –
क्या यह होमवर्क या रूटकिट है? – Kimvais
@ किमवाइस अपने वर्तमान प्रारूप में, आपको इस शेल-ऑन-शैल के माध्यम से आदेशों को पारित करने के लिए इस प्रोग्राम को निष्पादित करना होगा - आपको रूटकिट लिखने के लिए केवल एक खोल को नियंत्रित करने से बहुत कुछ करना होगा। –