2015/05/05

ReadProcessMemory()関数が失敗する?


自分用メモ



テーマ
・DLLに文字列を読み込む関数を入れたい

(プロセスハンドルは取得済み)
テストはUWSCで実行


①とりあえず作ってみた
結果:NULLが返された

関数失敗してるみたい



②詳細がほしいのでGetLastError()を呼び出す
結果:関数成功した!?

・・・しかしここで問題が
「関数から返された値がバグってる」
正常にリードできてない模様




---ここからしばらく調べたり悩んだり色々---




③いろいろ調べたり書き換えたりして実験した結果・・・
変更点:新たにDWORD型の変数を用意して、
ReadProcessMemory()の第5引数をNULLではなく、きちんと受け取るように変更

結果:GetLastError()・FormatMessage()の結果が表示された!
ようやく進展が・・・

エラー内容は998 (0x3E6)
「メモリ ロケーションへのアクセスが無効です。」

何これ・・・
更に色々調べた



④きちんとメモリ領域を確保してやると・・・
結果:理想どおりの動作をしてくれました!
キチンと読み込んだ分の文字列を返してくれる



「なぜこうすればうまくいくのか」って部分は把握できてないけど
■ReadProcessMemoryで「メモリ ロケーションへのアクセスが無効です。」とエラー 

こちらのサイトを参考にして、似たようなことをやってみたらうまくいった。

メモリ確保だからC言語ならmalloc()




(なんか画像がはみ出てるように見えるかもしれないけど気にしない)



追記
free(buf);してないからもう少し考えてみる
やっぱりC言語は難しいンゴ・・・


続き(次の記事)はこちらから


0 件のコメント:

コメントを投稿