HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
1130
PXZ「他プロセスのコマンドライン引数を取得したい」について4解決


PXZ

リンク

2014/11/30(Sun) 20:15:55|NO.66250

初めまして。

HSPではないのですが、Visual Basic 6.0で、
他プロセスのコマンドライン引数を確認する必要があり、
こちらの掲示板のスレッド
http://hsp.tv/play/pforum.php?mode=pastwch&num=51676
に掲載された、Him様のサンプルソースを参考にさせていただきました。

その中で、

ReadProcessMemory hProcess, ProcParamsAddress + 0x74, varptr(BlockAddress(1)), 4, 0
なるコードで、
「RTL_USER_PROCESS_PARAMETERS構造体の先頭アドレスから0x74(=116)バイトめから、
 コマンドラインデータの終端アドレスを取得する」
処理が存在します。

ここで疑問なのですが、

・この「0x74」なるオフセット値はどこから来たのか?
 MicrosoftのヘルプなどでRTL_USER_PROCESS_PARAMETERSやそれに含まれるUNICODE_STRINGの
 説明を見る限り、どう見てもRTL_USER_PROCESS_PARAMETERSは0x48バイトしかなく、0x74バイトめは
 まるっきり外を見ているようにしか見えません。
 (VB6に移植したソースで、実際にこの0x74オフセットで正常に終端が取れているのだから不思議です)

・上記スレッドのHim様のレスにあるリンク先ページを見ると、わざわざ終端アドレスを調べなくとも、
 RTL_USER_PROCESS_PARAMETERSの0x40バイトめに、そのものズバリな「commandLine.Length」が
 格納されています。なぜこちらを使っていないのでしょうか?
 (どうしても不安が拭えなかったため、Him様には真に失礼ですが、今回納品したソースでは
  0x40バイトめを参照してデータ長を取得しました)

以上、Him様もしくはどなたかお詳しい方、ご教示いただけないでしょうか?

※当方、VB、C#、MFC、ASP.NETMVCなどの実務経験はありますが、HSPは今回初めて見ました。
 何か私の知らないHSPならではの制約が存在するかもしれません。
※今回のシステムは100本近いVB6製EXEファイルが密接に連携しており、サポートの切れていない言語環境への
 移行は半永久的に不可能な状況です。
 



この記事に返信する


Him

リンク

2014/11/30(Sun) 23:09:27|NO.66256

私の知識不足のせいで混乱を招いたようですね。
参考にしないほうがいいと思います。
すみませんでした。

0x40:コマンドライン文字長
0x42:コマンドライン文字長Null含む
0x44:コマンドライン文字格納先
0x70:フルパス文字長
0x72:フルパス文字長Null含む
0x74:フルパス格納先



PXZ

リンク

2014/12/1(Mon) 21:47:51|NO.66278

ご回答有難うございます。

なるほど、RTL_USER_PROCESS_PARAMETERSの0x74バイトめとは、コマンドラインのデータブロックの
終端アドレスというより、次のデータブロックの開始アドレスだったということですね。(つまり、
このアドレスまでには必ずコマンドラインの正味データは終了する)

となると、RTL_USER_PROCESS_PARAMETERSの外、0x70バイトめにパス情報データ構造体があることを、
Him様がどこでご存知になったのかが気になります・・・

おそらく、各種プロセス情報(PROSCESS_BASIC_INFORMATION、ProcessBasicInformation(PEB)、
RTL_USER_PROCESS_PARAMETERS、それら構造体に格納されたポインタの参照先の正味データ、etc)
は連続したメモリブロック状に一塊になっていて、データの並び順も決まっている・・・
という認識でよろしいでしょうか?



Him

リンク

2014/12/2(Tue) 00:52:26|NO.66280

残念ですが元記事のサンプルを書いた時はいろんなページを参考にしたので
リンク先以外にも参考にした記事が多分あります。
しかしそれがどこかまでは覚えてません。

今回の0x40〜0x74についてはダンプして直接確認したものですのでさらっと流してください。



PXZ

リンク

2014/12/2(Tue) 22:30:56|NO.66287

結局行き着くところはダンプですね。
恥ずかしながら私にはそこまでする余裕も根性もございません・・・

ともあれ、今回の件では非常に助かりました。
この場をお借りしてHim様に感謝を申し上げます。
有難うございました。


※NO.66278の誤記訂正:

誤:
>おそらく、各種プロセス情報(PROSCESS_BASIC_INFORMATION、ProcessBasicInformation(PEB)、
>RTL_USER_PROCESS_PARAMETERS、それら構造体に格納されたポインタの参照先の正味データ、etc)
>は連続したメモリブロック状に一塊になっていて、データの並び順も決まっている・・・


正:
>おそらく、各種プロセス情報(PROSCESS_BASIC_INFORMATION、Process Environment Block(PEB)、
>RTL_USER_PROCESS_PARAMETERS、それら構造体に格納されたポインタの参照先の正味データ、etc)
>は連続したメモリブロック上に一塊になっていて、データの並び順も決まっている・・・



ONION software Copyright 1997-2023(c) All rights reserved.