質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

1回答

2625閲覧

物理メモリと仮想メモリ,カーネルについて

s0r4syl

総合スコア14

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

2クリップ

投稿2017/11/28 09:37

###実現したいこと
Androidのメモリからデータを取って暗号化した後に戻すということをしたいと思い,まずはプロセスの物理アドレス取得するために,手始めにUbuntuでカーネルを落としてきて,システムコールを追加し,物理アドレスを取得しようとしているところ.

###わからないこと

  • /proc/PID/mapsのようにpid番号を引数にtask_struct構造体を取得し,vm_area_struct構造体から仮想アドレスを取得することができるのは調べたのですが,物理アドレスはどこを見に行けばいいのか?
  • そもそもpid番号から物理アドレスは取得できるのか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

論理アドレスと物理アドレスの対応はMMUによって管理されています。
参考:https://ja.wikipedia.org/wiki/%E3%83%A1%E3%83%A2%E3%83%AA%E7%AE%A1%E7%90%86%E3%83%A6%E3%83%8B%E3%83%83%E3%83%88

/proc/PID/mapsのようにpid番号を引数にtask_struct構造体を取得し,vm_area_struct構造体から仮想アドレスを取得することができるのは調べたのですが,物理アドレスはどこを見に行けばいいのか?

メモリ管理、アドレス空間、ページテーブルによりますと、 vm_area_struct から mm_struct をたどり、 pgd の値からページテーブルを検索すると物理メモリのフレーム番号がわかるようです。

Androidのメモリからデータを取って暗号化した後に戻すということをしたいと思い

これを実行するために物理アドレスが必要となる理由がわかりません。たとえば、他のプロセスのメモリの内容を参照したいのであれば、/proc/mem 経由で参照することができますが、その場合に必要なアドレスは物理アドレスではなく論理アドレスです。
参考:https://unix.stackexchange.com/questions/6301/how-do-i-read-from-proc-pid-mem-under-linux

投稿2017/11/28 12:02

mit0223

総合スコア3401

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

s0r4syl

2017/11/29 08:36

回答ありがとうございます.質問ですが, ・参考URLを見て,/proc/PID/memの内容がプロセスに関するメモリの内容と同じという理解で正しいでしょうか? ・メモリの書き換えはここではできるのでしょうか,暗号化が目標なので書き込みがしたいです
s0r4syl

2017/11/29 08:50

物理アドレスを求めようと思ったきっかけは,論理アドレスでは他のプロセスから見てどこに実際のデータがあるのかが分からないのではないかと思っていたからです
mit0223

2017/11/29 15:57

・参考URLを見て,/proc/PID/memの内容がプロセスに関するメモリの内容と同じという理解で正しいでしょうか? そうですね。参考URLにあるとおり、 /proc/PID/maps でメモリマッピングがどうなっているかを調べて、論理アドレスに seek すれば、メモリの内容が参照できます。 ただし、ptrace でプロセスにアタッチする必要があります。 参考:http://www.nminoru.jp/~nminoru/programming/view_process_mem.html ・メモリの書き換えはここではできるのでしょうか,暗号化が目標なので書き込みがしたいです 上記参考にあるとおり、この方法でできます。あと、 ptrace でもできます。
s0r4syl

2017/11/29 16:32

プロセスのメモリと/proc/PID/memはOSが同期をとってるということですか. 直近で知りたいことは分かったと思います.実装してみたいと思います,ありがとうございました.
mit0223

2017/11/30 03:18

> プロセスのメモリと/proc/PID/memはOSが同期をとってるということですか いえ、複製同期しているわけではなく、直接プロセスのメモリが見えているものと思われます。ファイルに見えて実は・・・ていうのが /proc ファイルシステムの特長です。ファイルディスクリプタの read, seek, write がファイル以外のものにも使えるというは、オブジェクト指向でいう多様性(ポルモアフィズム)の一つで Unix の大きな発明の一つです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問