मैं एक सिस्कल असेंबली निर्देश (आईएनटी निर्देश, मुझे विश्वास है) और जीडीबी के साथ हैंडलर देखने के लिए एक प्रोग्राम को अलग करने की कोशिश कर रहा हूं और इसके लिए एक छोटा प्रोग्राम (नीचे देखें) लिखा है जो फ़ाइल खोलता है और बंद करता है। मैं कॉल को निष्पादित किए जाने तक जीडीबी के साथ फॉपेन करने के लिए कॉल का पालन करने में सक्षम था। जब मैंने जीडीबी को "0x डिससेबल करें" (कॉल का पता) बताने की कोशिश की तो उसने 'नो फ़ंक्शन में निर्दिष्ट पता' दिया। क्या जीडीबी को डिस्सेबल करने के लिए मजबूर करना संभव है (या इसे जितना संभव हो सके असेंबलर में प्रदर्शित करें) मेमोरी पता? यदि हां, तो कैसे?मैं जीडीबी को अलग करने के लिए कैसे मजबूर कर सकता हूं?
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE* f;
f = fopen("main.c", "r");
if (!f) {
perror("open");
return -1;
}
fclose(f);
return 0;
}
fopen() एक सिस्टम कॉल नहीं है, यह सी मानक पुस्तकालय के लिए एक कॉल है। और आपको क्यों लगता है कि एक आईएनटी निर्देश के माध्यम से एक सिस्टम कॉल किया जाना चाहिए? –
मैं गलत हो सकता हूं, लेकिन हमें सिखाया गया था कि अंततः फॉपेन कॉल का परिणाम कर्नेल को फ़ाइल खोलने और फ़ाइल डिस्क्रिप्टर को वापस करने के लिए सिस्टम कॉल में होता है? – Patrick
पैट्रिक: हाँ, लेकिन उस निर्देश को करने की आवश्यकता नहीं है। आम तौर पर यह libc फ़ंक्शन को कॉल करता है जो तब कर्नेल में प्रवेश करता है। लेकिन कर्नेल को कॉल करना न केवल int (यह धीमा है) के साथ किया जा सकता है लेकिन प्रोसेसर आर्किटेक्चर के आधार पर syscall/sysenter के साथ ... – k3a