メモリにアクセスする方法


Futosi.T  2002-02-03 01:45:15  No: 75230

メモリに直接アクセスする関数またはAPIなどございませんでしょうか。
メモリアドレス&H0040BFFFなどのデータをByte形式で取得し、
また逆に指定アドレスに書き込む方法を探しております。

お分かりの方、よろしくお願いします。


こころ  URL  2002-02-03 02:26:33  No: 75231

RtlMoveMemory,RtlZeroMemory,RtlFillMemoryが相当します。
当然のことながら、許可されない領域にアクセスすると
一般保護エラーで落ちますけどね。


Futosi.T  2002-02-04 15:38:40  No: 75232

お返事遅くなりました。
関数は分かりましたが使い方が分からない・・・
MSDNで調べても載ってないし。
私のVisual Studioは発売日に購入したものなので、
MSDNが古いものなんです。

引数の意味するところ、もしくは説明のあるHPなど教えて
いただければこれ幸いです。

初心者丸出しですが、よろしくお願いします。


Say  2002-02-04 19:48:06  No: 75233

peek/poke関数をVC++で作ってdll化し、
VBからDeclareで宣言して使ったらいかがでしょう?

たとえばこんな感じ・・・

PEEKPOKE_API   int  __stdcall   peekb(int addr)
{
  char *buf ;
  buf = (char *)addr ;
  return (int)*buf ;
}
PEEKPOKE_API   int  __stdcall   peekw(int addr)
{
  short *buf ;
  buf = (short *)addr ;
  return (int)*buf ;
}
PEEKPOKE_API   int  __stdcall   peekdw(int addr)
{
  long *buf ;
  buf = (long *)addr ;
  return (int)*buf ;
}
PEEKPOKE_API   int  __stdcall   pokeb(int addr , int value)
{
  char *buf ;
  buf = (char *)addr ;
        *buf = (char)value ;
  return (int)*buf ;
}
PEEKPOKE_API   int  __stdcall   pokew(int addr , int value)
{
  short *buf ;
  buf = (short *)addr ;
        *buf = (short)value ;
  return (int)*buf ;
}
PEEKPOKE_API   int  __stdcall   pokedw(int addr , int value)
{
  long *buf ;
  buf = (long *)addr ;
        *buf = (long)value ;
  return (int)*buf ;
}

あとは定義ファイル作ってビルドするだけ。


こころ  URL  2002-02-05 08:54:49  No: 75234

引数はC言語のmemmove,memsetと似たようなものです。
検索エンジンで関数名を入力すればVBのサンプルも
すぐに見つかると思いますけど・・・。

そういえば、うちのページでPtrForVBっていう
VBでポインタつかってるサンプルもあったりします。
RtlMoveMemoryしか使ってないですけどね。


Futosi.T  2002-02-05 15:17:24  No: 75235

なるほど、引数など大まかな使い方はわかりました。
ありがとうございます。
VBからでも何とか操作できそうです。

今度はプロセス名を取得したいのですが、何とかならないでしょうか?
&H004FFFFF〜&H00FFFFFF : (プロセス名)
&H00CFFFFF〜&H00DFFFFF : (子プロセス名:〜.dllなど)
という風に出力したいのですが・・・。

長い質問になってしまってすみません。
よろしくお願いします。


><  2006-03-20 12:41:27  No: 75236

><


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加