• ベストアンサー

めメモリアドレスについて

こんにちは メモリアドレスが指す内容を調べるにはどんな方法がありますか 追跡はできます そうではなくて例えば、特定のメモリアドレスが特定の API を指すといったような情報はどうやって調べるのでしょうか よろしくお願いします

noname#180000
noname#180000

質問者が選んだベストアンサー

  • ベストアンサー
  • zwi
  • ベストアンサー率56% (730/1282)
回答No.5

成り行き上の固定だと思うのでマイクロソフトが公式に認めるとも思えません。 アマチュアレベルならともかくプロがやるのはダメですよ。 「APIを自分で呼びだそう! - 桜花な日々」 http://d.hatena.ne.jp/rofi/20101229/1293657061 「リバースエンジニアリング入門(4):Undocumentedなデータ構造体を知る (2/3) - @IT」 http://www.atmarkit.co.jp/ait/articles/1111/18/news146_2.html 下の方法を使ったほうが良いと思います。

noname#180000
質問者

お礼

何度もありがとうございました 成り行きで固定だとわかったのですね・・・ 勉強になります さっそく調べてみます

その他の回答 (6)

  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.7

DLLが実際にプロセス空間にロードされる際には、DLLファイルに設定されているベースアドレスの位置にロードされる保証はありません。 が、WindowsOSの根幹に関わるDLLについてはベースアドレスが重複しないように設定されているようなので、DLLが更新されなければ概ね同じ位置にロードされるでしょう。 # 重複していて再配置する場合にそこそこコストがあるので…。 んで…… WindowsUpdateなどでDLLが更新されたら、そのアドレスは別のものになったりしますがそこら辺は問題ないんですか? そういった問題にハマらない為にGetProcAddress()等で取得できる手段が用意されているのですが……。 何故にそんな情報が必要なのか? とか掲示されれば、もう少し安全な別の方法とかが出てくるかも知れませんけど……。 ドライバ作成やデバッグでもするんですか? # それならDDKですかねぇ。

noname#180000
質問者

お礼

回答ありがとうございました DLL を詳しく知らないので、今勉強している真っ最中です 目的はデバッグで、情報が固定しているメモリアドレスがわかれば、だいぶ楽になるというものでした たくさん情報いただいたので、勉強してみます

  • Picosoft
  • ベストアンサー率70% (274/391)
回答No.6

とにかく情報が欲しいようですが、 APIのアドレスのリストを作って公開しているようなサイト・ドキュメントは残念ながら無いと思います。 #1や#5で述べられているように、 ツールを探すか自作するかして、自分で動かして調べるしか方法はないのでは? 解析っぽいことがしたいのであれば自分でできるようになりましょう。

noname#180000
質問者

お礼

ありがとうございました やっぱり自分で動かして調べるしかないみたいですね・・・ たいへん勉強になりました

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.4

前のリンク先にも示した通り、CreateFileがあるkernel32.dllなどは環境を限定すればアドレスが固定されているとは思います。Windows2000で日本語だけに限定等。 ただ、その条件から外れるとアドレスが変わってしまう程度の危ういものです。 なので、想定する条件を絞り込めるのかが問題となります。 と言うことで、Windows2000で日本語だけってことなら出来るものもありますと言えると思いますが、それで良いのでしょうか?

noname#180000
質問者

お礼

何度もありがとうございます それでよいです 想定する条件は絞り込めるようです その場合、そういった保証されている部分の情報はどこから入手するのでしょうか

  • Picosoft
  • ベストアンサー率70% (274/391)
回答No.3

何がしたいかがよく見えてこないので概要だけ。 具体的なツール名は挙げませんが、プロセスメモリエディタやデバッガを使うと どこに何があるかを簡単に調べることができます。 (内部でGetProcAddressを呼んでいるだけですが) が、DLLのベースアドレスは実行環境・実行タイミングによって変わるため、 基本的に「このアドレスには必ずこのAPIがある」ということは保証できません。 (コンパイル時のオプションでベースアドレスが固定されている場合もあります)

noname#180000
質問者

お礼

回答ありがとうございます わかりにくくなって失礼致しました >「このアドレスには必ずこの API がある」ということは保証できません 保証されている部分というのがあると思います その部分の情報を手に入れたいということです よろしくお願いします

回答No.2

小生の場合は全てのドライブをデスクトップに表示させています。 マイコンピーターも,コントロールパネルもデスクトップにアイコンを置いています。 マイコンピューターを開いて,全てのドライブについて順次右クリックして「アイコンを作成」を選択します。 アイコンをダブルクリックすれば,記憶装置内のフォルダーが一覧できます。

noname#180000
質問者

お礼

回答ありがとうございます フォルダを一覧させる方法でしょうか・・・ ちょっとよくわかりませんが、さっそく調べてみます

  • kumatti1
  • ベストアンサー率60% (73/121)
回答No.1

XPまでならuser32.dll/kernel32.dll/ntdll.dllに限り、アドレス値をハードコーティングでも大丈夫かなと。 (妥当かは別にして) GetModuleHandle/GetProcAddressで、自力で調べるしかないのでは。 # 調査はC/C++の方が楽そうだけど

noname#180000
質問者

お礼

回答ありがとうございます 追跡やコーディングの方法ではなくて、例えば Windows2000 で 0x77e62b8d は CreateFile という API を指します(CreateFile は DLL なので、アドレスは固定ではないと指摘をいただきましたが) このような情報はどこから入手するのでしょうか

関連するQ&A

  • メモリアドレスについて

    こんにちは アセンブリで、メモリアドレスが指す内容を調べるにはどんな方法がありますか 追跡することはできます そうではなくて例えば、Windows2000 で x0bff8d6a1 は Exitprocess 、x077e62b8d は CreateFile という API を指します このような決まりきった情報を調べるには、どんな方法がありますか

  • BIOSメモリアドレスについて

    困っています。 メインメモリにシャドウされるBIOS ROMのイメージを知りたいのですが、メモリアドレスがわかりません。 全メモリアドレスを知る方法について情報をお持ちの方お願いします。

  • 直接メモリにアドレス割付けで書き込む方法

    VB6.0 WindowsXP 掲題の件ですが、初心者なので分かりやすく教えていただければ幸いです。 現在、MSCOMMを用いてシリアル通信はできるようになりました。 これからPCIボードを使って、通信を試みようとしているのですが、 これは指定したアドレスに書き込むと送信してくれるようです。 VBを用いてメモリのアドレスを指定して書き込む方法はAPIを使うらしいというのまでは 分かったのですが、具体的にどのようなコードを記述すればいいのか分かりません。 型宣言時にアドレスを指定してメモリを確保できるのでしょうか。 よろしくお願いいたします。

  • 仮想メモリアドレスについて

    OSが管理している仮想メモリアドレスについて質問させて下さい。 物理メモリのアドレスといわれるものと、 仮想メモリのアドレスといわれるものは、 いずれもハードディスク上に存在し、ハードディスク上で OSによって管理されている情報(アドレス)ということになりますか?

  • フリーメールアドレスについて

    Yahoo等のフリーメールアドレスって専門知識がある人なら、そのアドレスから住所や電話番号等の個人情報を探る事はできるんでしょうか? またフリーメールアドレス自体にはでたらめを登録していたとしたら、どの端末で登録や操作していたか等を特定することはできるんでしょうか? 例えば 警察は? それと、1度削除してしまえば追跡は無理なものなんでしょうか?

  • IPアドレスで.......

    友達に代わりまして質問します。 インターネットのIPアドレスと言うものが有りますが このIPアドレスから個人情報(氏名・住所・電話番号)などが第三者に知られると言う事は有りますでしょうか。 WeBサイトを閲覧する時には、多分こちらのIPアドレスが表示または、何らかの方法で分かるものでしょうか。 IPアドレスから追跡調査などは出来るのでしょうか、もし、可能であれば何処まで分かるものでしょうか。 宜しく、お願いします。

  • IPアドレスを変えても・・・?

    いつもお世話になっています。 私は、ネットにフレッツISDNで接続しているのですが 、たとえばネット上でIPアドレスを知られ、攻撃のまとにされてしまった場合、1度接続を切り、IPアドレス を変えたとしても、攻撃してきた相手側には自動で変 更後のIPアドレスがわかってしまう場合もあると聞き 、とても心配です・・・。 そしてこの場合“IPアドレス”の問題だと思いますので、パソコンをリカバリしてもあまり関係ない・・・ ですよね? IPアドレスは、インターネットをする以上、接続相手 に通知されるものだと思うのですが、この場合みたい に“特定の相手からIPアドレス変更後も追跡される” ということをさける方法はあるのでしょうか? こちらで何度か質問させて頂き、ファイアーウォール やWindows Updateを行っていれば大丈夫だと思うので すが、やはり常に“追跡”されているとしたら・・・ と思うと心配になってしまったので質問させて頂きま した。 もし何かご存知の方がいらしたら、ぜひ教えて下さい ・・・!

  • メモリアドレスレジスタについて。

    メモリアドレスレジスタの説明について、テキストには、「命令が処理対象とするアドレス(実効アドレス)は、メモリアドレスレジスタで計算される。」とありますが、全く分かりません。 噛み砕いて教えて頂けないでしょうか?

  • メモリアドレスの素朴な疑問

    メモリアドレスについて メモリに関する素朴な疑問があります。 当然この程度の事はネットや書籍で調べられると思い 探したのですが、見つける事ができませんでした(汗)。 勘違いをしている部分もあると思いますか゛、どうかお助け下さい。 メモリには1バイトごとにアドレスが割り振られている事は理解できます。 ところでアドレスはいつの時点でどこに割り振られるのでしょうか? (1)メモリの製造時にバイト単位にROM化されて割り振られる。 (2)パソコン起動時にバイト単位にハードディスクから読み込まれて割り振られる。 (3)それ以外。 またバイトの先頭、後尾いずれに置かれるのでしょうか? 当方、独学、経験無しの55歳、基本情報処理試験午前試験クリアレベルですので、よろしくお願いいたします。

  • 実アドレスのデータの読み込み

    DDR SDRAMのメモリの実アドレスを指定して、そのアドレスからデータを読み込むコードを検証しています. 【実行環境 】 OS :Windows XP API側で取得出来る情報 :実アドレス、データサイズ ソフト :WindowAPI 実アドレスを指定して、先頭の8バイトを読み込む場合、以下のコードで問題ないのでしょうか? unsigned long lAdress; //実アドレスになります。 char n = 0; int *p; //ポインタ p = lAdress; //実アドレスの格納 n = *(p+0); //実アドレスの先頭の8バイトの情報を格納 n = *(p+1); //実アドレスの次の8バイトの情報を格納 Windowsではプロテクトモードのため、実アドレスアクセスが不可能なのでしょうか?その場合、何か方法はあるのでしょうか? 以上、アドバイスをいただけると幸いです.

専門家に質問してみよう