ページの開始アドレスを取得する

ページの開始アドレスを取得する

関数を含むメモリページの先頭を取得したいと思います。

私の場合は、ページの先頭にメイン機能を実装してみました。そのうち0x400a80メモリのコード部分に位置しているようです。これが本当かどうか確認していただければ幸いです。

私が知っているのは、アドレスが0x400a80ページにあります。

プロセスのメモリセグメント表示を使用すると、pmap8Kサイズで始まるセグメントと4Kサイズで始まる次の0x400000セグメントが表示されます。0x601000

0x400000関数のアドレスがあるので、アドレスを取得したいと思いますmain()。ページに住所がある場合は、ページの開始アドレスをどのように知ることができますか?これを行うためにLinuxに組み込まれた方法はありますか?

ベストアンサー1

UnixとLinux StackExchangeへようこそ!

この質問に対する回答が良いかもしれませんスタックオーバーフロー、プログラミングのトラブルシューティングを担当するStackExchangeサイトです。しかし、とにかく...

x86アーキテクチャでは、標準メモリページは4KiB、つまり0x1000バイトです。メモリページはアドレス0から始まり、重複せずに連続して割り当てられます。

メモリページの先頭アドレスを見つけます。

beginning of page = memory address AND (NOT page size - 1)

したがって、アドレスが 0x400a80 の場合、ページ開始 = 0x400a80 AND (0x000fff 以外) = 0x400a80 AND 0xfff000 = 0x400000 です。

おすすめ記事