問題タブ [kernel32]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
windows - XP システムでの GetProductInfo
GetProductInfo
(API 関数)は、Windows 7 Ultimate では完全に動作しますが、XP Professional ではクラッシュするようです。それに代わるものは何ですか?
windows - 非認識実行可能ファイル用の ASLR および Windows システム DLL は?
マイクロソフトの記事から:
アドレス空間レイアウトのランダム化 (ASLR)
ASLR は、システムの起動時に実行可能イメージをランダムな場所に移動するため、エクスプロイト コードが予測どおりに動作することが難しくなります。コンポーネントが ASLR をサポートするには、そのコンポーネントが読み込むすべてのコンポーネントも ASLR をサポートする必要があります。たとえば、A.exe が B.dll と C.dll を使用する場合、3 つすべてが ASLR をサポートする必要があります。既定では、Windows Vista 以降ではシステム DLL と EXE がランダム化されますが、ISV によって作成された DLL と EXE は、/DYNAMICBASE リンカー オプションを使用して ASLR をサポートするように選択する必要があります。
よくわかりません。Windows 上のすべてのプロセスによってロードされる基本システム DLL を取り上げNtDll.dll
ますkernel32.dll
。
非対応の実行可能ファイルがある場合、これらのシステム DLL は ASLR を使用しますか? つまり、この実行可能ファイルは、Win 7 でシステムを再起動するたびに異なるベース アドレスにロードされますか? それとも、Win XP のように、システムの再起動後に常に同じベース アドレスにロードされますか?
私の言いたいことをより明確にするために:私の典型的なダミープログラムの起動スタックは次のようになります:
の asmBaseProcessStart
を見ると、XP ボックスに次のように表示されます。
今、私が興味を持っているのは次のことです:
Windows XP では、このマシンを何度再起動しても、アドレスは常に0x7C817054 になります。ASLR を使用して Win7 を使用している場合、kernel32.dll をロードする実行可能ファイルがASLR に対して有効になっていない場合、このアドレスは再起動ごとに変更されますか?
(注: 私にとって、このアドレスが役立つマイナーなユースケースは 1 つだけです。Visual Studio では、アセンブリ レベル関数の「データ ブレークポイント」、つまりブレークポイント @ 0x7 のみを設定できます。 . - 特定の ntdll.dll または kernel32.dll 関数でブレークしたい場合、Windows XP では、再起動の間にブレークポイントを調整する必要はありません.ASLR が開始された場合 (この質問の範囲)、変更する必要があります再起動間のデータブレークポイント。)
c# - PInvokeStackImbalance が WriteFile kernel32.dll で検出されました
フレームワーク 2 からフレームワーク 4 に移行した後、WriteFile 関数を実行するとエラーが発生します。
解決:
lpOverlapped パラメータは、umanaged C++ の unsigned long である int32 である必要があります。
元のエラー:
PInvokeStackImbalance が検出されました メッセージ: PInvoke 関数 '' の呼び出しにより、スタックのバランスが崩れました。これは、マネージド PInvoke 署名がアンマネージド ターゲット シグネチャと一致しないことが原因である可能性があります。PInvoke シグネチャの呼び出し規約とパラメーターがターゲットのアンマネージド シグネチャと一致することを確認します。
windows - kernel32.dll をリベースできますか? ロードアドレスが2つのプロセスで異なる
具体的には、同じセッション内の 2 つのプロセスで kernel32.dll のロード アドレスが異なる可能性があるかどうかを知りたいですか? createremote スレッドを使用したいので、リモート プロセスの kernel32 ロード アドレスが任意のシナリオで注入プロセスと異なる可能性があるかどうかを知りたいですか?
.net - .NETmscorlib.dllとKernel32.dllの関係
私が理解している限り、入出力機能が必要なアプリケーションはKernel32.dllと通信する必要があり、Kernel32.dllはカーネル自体に要求を送信します。ただし、.NETでは、mscorlib.dllにあるコンソールクラスは、他のアプリケーションと同様に、カーネルと直接通信しません。mscorlib.dllはその要求をKernel32.dllに送信する必要がありますか、それとも.NETにはそれをバイパスするための特別な特権がありますか?
誰かがそれがどのように機能するかについて深い知識を持っていますか?
ありがとうございました。
c# - C# で cmd.exe プロセスをリモート制御する方法
私は本当に問題で立ち往生しており (現在 7 日間)、頭がおかしくなる前に、アドバイスを求めようと思いました。
私がしたいのは、基本的にcmd.exeプロセスを開始してリモートコントロールすることです。ただし、StandardInput および StandardOutput ストリームは、ユーザー入力を待機する「mysql」などのコマンドによってトリガーされないため、ジョブを実行しません。
したがって、cmd.exe コンソールの内容を読み取って書き込むだけです。ただし、書き込みメソッドは新しいコマンドを起動できる必要があります。
私はたくさん試してみましたが、kernel32.dllがうまくいくと確信しています:
- ReadConsoleOutput()
- WriteConsoleInput()
- GetConsoleScreenBufferInfo()
- SetConsoleCursorPosition()
もちろん、私はすでにいくつかの作業を行っていますが、正しい道を歩んだかどうかは絶対にわかりません. したがって、おそらくあなたを混乱させるだけなので、コードは投稿しません。
誰かが動作中のデモやチュートリアルなどを教えてくれたら最高です。C++ や C であっても、何もないよりはましです。
前もって感謝します。
ミューズ・コッホハイム
PS: pinvoke や MSDN へのリンクだけを投稿しないでください。必要なのはもう少し複雑です。そして、自分でそこにたどり着くのに十分なwinapiの経験がないようです:/
編集:皆さんが投稿したリンクに基づいて得た新しいアイデアのいくつかを試してみました. 私は戻ってきて、私が理解したものを投稿します。助けてくれてありがとう...
c# - C# の Windows CreateFile が無効なハンドルを返す
C# アプリケーションで Kernel32.dll から CreateFile メソッドを呼び出そうとしていますが、毎回無効なハンドルが返されます。私はすべてを見てきましたが、この問題の解決策を見つけることができません。関連するコードは次のとおりです。
定数:
メソッドのインポート:
ドライバをロードする方法:
誰でも問題を解決するのを手伝ってもらえますか?
.net - Windowsフォームアプリケーションでコンソールオブジェクトにアクセスするための最良の方法は?
GUIアプリにCLIフロントエンドを持たせようとしています(反対ではありません)。
私は問題なく引数を処理することができました(のおかげで)が、コンソールに出力を書き込むためのアクセスを取得するための最良のSystem.Environment.GetCommandLineArgs()
方法が何であるか興味があります。
への参照を見つけましAllocConsole()
たが、これが唯一の方法であるかどうかは不明です。マネージコードで明らかにされたものをはるかに好むからです。
c# - Mono.Cecil でエクスポートされた関数を作成するには?
私は何を間違っていますか?LoadLibraryA のエクスポートされた関数を作成し、それをアセンブリに挿入しようとしています。
c# - ReadFile Kernel32 最大バッファ サイズ
C# を使用してディスクから直接読み取り、kernel32 ReadFile メソッドをピンボークしています。より大きな読み取り (現在は単一のチャンクでのみ読み取り) では、バッファー サイズが範囲外であることに気付きました。
ここで読み取りバッファの最大サイズを知っている人はいますか?
もしそうなら、読み込みたい余剰メモリがあるときにバッファサイズを制限する目的は何ですか? バッファリングと小さなメモリ フットプリントの維持の概念は理解していますが、なぜ小さいサイズが強制されるのですか? おそらく、古い Win32 API の単なる人工物でしょうか?
編集: から受け取ったエラーは、Marshal.GetLastWin32Error()
「値が期待される範囲内にありません」です。
このエラーが表示されるまでの上限は 8192 バイト (8KB であるため、混乱しています)。
前もって感謝します。