スタック、データ、ヒープ、コードなどのメモリセグメントの開始アドレスと終了アドレスを確認するには?

スタック、データ、ヒープ、コードなどのメモリセグメントの開始アドレスと終了アドレスを確認するには?

メモリセグメントはLinuxオペレーティングシステムの一部なので、単純なCプログラムまたはLinuxコマンドを使用してそのアドレスを表示できますか?

ベストアンサー1

プログラムを作成して実行中にメモリマップを表示するには、次のデバッガでプログラムを実行して実行し、コマンドを使用してメモリマップを表示すると、gdb出力info proc mappingsは次のようになります。

(gdb) info proc mappings
process 6520
Mapped address spaces:

    Start Addr   End Addr       Size     Offset objfile
       0x10000    0x15000     0x5000        0x0 /bin/true
       0x24000    0x25000     0x1000     0x4000 /bin/true
       0x25000    0x26000     0x1000     0x5000 /bin/true
    0x76e6e000 0x76f98000   0x12a000        0x0 /lib/arm-linux-gnueabihf/libc-2.24.so
    ... etc ...
    0x7efdf000 0x7f000000    0x21000        0x0 [stack]
    0xffff0000 0xffff1000     0x1000        0x0 [vectors]

実行中のプロセスのマップを表示するには、正しい権限があると仮定しますcat /proc/<pid>/maps。または、プロセスに接続してgdb -p <pid>上記の操作を実行できます。

おすすめ記事