関数を含むメモリページの先頭を取得したいと思います。
私の場合は、ページの先頭にメイン機能を実装してみました。そのうち0x400a80
メモリのコード部分に位置しているようです。これが本当かどうか確認していただければ幸いです。
私が知っているのは、アドレスが0x400a80
ページにあります。
プロセスのメモリセグメント表示を使用すると、pmap
8Kサイズで始まるセグメントと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 です。