2015/05/05
前回の続き
出来れば動的確保でSize分確保したかったけど、
ポインタの扱いも分からないし
別のポインタ作ってコピーしようにも初期化してやらないとダメだし
初期化しようとおもったらまたSize分動的確保・・・という無限ループ
⑤妥協案
結果:mallocなんてなかった
まあこれだけ一度に読み込むことって無いだろうし
自分がとりあえず使えればいいんだし・・・
・・・難しいのね。
ReadProcessMemory()関数が失敗する?
自分用メモ
テーマ
・DLLに文字列を読み込む関数を入れたい
(プロセスハンドルは取得済み)
テストはUWSCで実行
①とりあえず作ってみた
結果:NULLが返された
関数失敗してるみたい
②詳細がほしいのでGetLastError()を呼び出す
結果:関数成功した!?
・・・しかしここで問題が
「関数から返された値がバグってる」
正常にリードできてない模様
---ここからしばらく調べたり悩んだり色々---
③いろいろ調べたり書き換えたりして実験した結果・・・

ReadProcessMemory()の第5引数をNULLではなく、きちんと受け取るように変更
結果:GetLastError()・FormatMessage()の結果が表示された!
ようやく進展が・・・
エラー内容は998 (0x3E6)
「メモリ ロケーションへのアクセスが無効です。」
何これ・・・
更に色々調べた
④きちんとメモリ領域を確保してやると・・・
結果:理想どおりの動作をしてくれました!
キチンと読み込んだ分の文字列を返してくれる
「なぜこうすればうまくいくのか」って部分は把握できてないけど
■ReadProcessMemoryで「メモリ ロケーションへのアクセスが無効です。」とエラー
こちらのサイトを参考にして、似たようなことをやってみたらうまくいった。
メモリ確保だからC言語ならmalloc()
(なんか画像がはみ出てるように見えるかもしれないけど気にしない)
追記
free(buf);してないからもう少し考えてみる
やっぱりC言語は難しいンゴ・・・
続き(次の記事)はこちらから
登録:
投稿 (Atom)