আমি এই দিয়ে দেয়ালে মাথা ঠেস দিচ্ছি।
আমার প্রকল্পে, যখন আমি mmap
ম্যাপিংয়ের সাথে মেমরি বরাদ্দ করি ( /proc/self/maps
) দেখায় যে আমি কেবল পঠনযোগ্য মেমরির অনুরোধ করা সত্ত্বেও এটি একটি পঠনযোগ্য এবং কার্যকরযোগ্য অঞ্চল ।
স্ট্রেস (যা দেখতে ভাল লাগছিল) এবং অন্যান্য ডিবাগিংয়ের পরে, আমি এই একমাত্র জিনিসটি সনাক্ত করতে সক্ষম হয়েছি যা এই অদ্ভুত সমস্যাটি এড়াতে পারে বলে মনে করে: প্রকল্প থেকে সমাবেশ ফাইলগুলি সরিয়ে এবং কেবল খাঁটি সি ছেড়ে চলে যায় (কী ?!)
সুতরাং এখানে আমার অদ্ভুত উদাহরণ, আমি উবুনবতু 19.04 এবং ডিফল্ট জিসিসিতে কাজ করছি।
যদি আপনি এএসএম ফাইলের সাথে এক্সিকিউটেবল লক্ষ্যটি সংকলন করেন (যা খালি) তবে আপনি mmap
একটি পাঠযোগ্য এবং এক্সিকিউটেবল অঞ্চলটি ফিরিয়ে দেন, আপনি যদি তৈরি না করেন তবে এটি সঠিকভাবে আচরণ করে ve /proc/self/maps
আমার উদাহরণটিতে আমি যে ফলাফলটি এম্বেড করেছি তা দেখুন ।
example.c
#include <stdio.h>
#include <string.h>
#include <sys/mman.h>
int main()
{
void* p;
p = mmap(NULL, 8192,PROT_READ,MAP_ANONYMOUS|MAP_PRIVATE,-1,0);
{
FILE *f;
char line[512], s_search[17];
snprintf(s_search,16,"%lx",(long)p);
f = fopen("/proc/self/maps","r");
while (fgets(line,512,f))
{
if (strstr(line,s_search)) fputs(line,stderr);
}
fclose(f);
}
return 0;
}
উদাহরণ.s : একটি খালি ফাইল!
আউটপুট
এএসএম সহ সংস্করণ অন্তর্ভুক্ত
VirtualBox:~/mechanics/build$ gcc example.c example.s -o example && ./example
7f78d6e08000-7f78d6e0a000 r-xp 00000000 00:00 0
এএসএম ছাড়া সংস্করণ অন্তর্ভুক্ত
VirtualBox:~/mechanics/build$ gcc example.c -o example && ./example
7f1569296000-7f1569298000 r--p 00000000 00:00 0
-Wa,--noexecstack
।