2
プロジェクトにアセンブリファイルが含まれている場合のmmapからの予期しないexec権限
これで頭を壁に打ちつけています。 私のプロジェクトではmmap、マッピング(/proc/self/maps)を使用してメモリを割り当てているときに、読み取り可能なメモリのみを要求したにもかかわらず、それが読み取り可能で実行可能な領域であることを示しています。 strace(見栄えは良かった)やその他のデバッグを調べたところ、この奇妙な問題を回避していると思われる唯一のこと、つまりプロジェクトからアセンブリファイルを削除し、純粋なCのみを残すことを特定できました(何ですか?)。 だからここに私の奇妙な例があります、私はUbunbtu 19.04とデフォルトのgccに取り組んでいます。 ターゲットの実行可能ファイルをASMファイル(空)でコンパイルするとmmap、読み取り可能で実行可能な領域が返されます。ビルドしないと、正しく動作します。/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; } example.s:空のファイルです! アウトプット ASM付属バージョン VirtualBox:~/mechanics/build$ gcc example.c …