मैं किसी प्रोग्राम के भीतर से शेलकोड निष्पादित करना सीखने की कोशिश कर रहा हूं, लेकिन मुझे चलाने के लिए सबसे बुनियादी कोड भी नहीं मिल सकता है। निम्नलिखित कोड टर्मिनल से बाहर निकलने के लिए बस बाहर निकलना चाहिए:फ़ंक्शन के रूप में एक वर्ण स्ट्रिंग कास्टिंग
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <sys/mman.h>
char exitcode[] = "\xb0\x01\x31\xdb\xcd\x80";
int main() {
int (*func)();
func = (int (*)())exitcode;
(int)(*func)();
return 0;
}
लेकिन मुझे जो कुछ मिलता है वह एक सीगफॉल्ट है। जीडीबी का कहना है कि यह तब हो रहा है जब प्रोग्राम निकास कोड के स्मृति स्थान [at (int) (* func)(); ], लेकिन मुझे यकीन नहीं है कि यह समस्या क्यों पैदा कर रहा है। मैं 64-बिट लिनक्स मिंट ओएस चला रहा हूं। कोई भी मदद बहुत ही सराहनीय होगी।
यदि शेलकोड की स्मृति गैर निष्पादन योग्य क्षेत्र में है तो यह काम नहीं करेगा। अधिकांश आधुनिक ऑपरेटिंग सिस्टम शायद इसकी अनुमति नहीं देंगे। आपको यह भी सुनिश्चित करना चाहिए कि आपके आर्किटेक्चर के लिए शेलकोड सही है। –
क्या सी या सी ++ के लिए है? अर्थशास्त्र और संभावित उत्तर भिन्न हो सकते हैं। – Olaf
फ़ंक्शन पॉइंटर पर ऑब्जेक्ट पॉइंटर कास्टिंग करना _undefined behaviour_ है। कुछ भी हो सकता है – Olaf