問題タブ [ntdll]
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.
c - NtDll は本当に C ランタイム関数をエクスポートしますか? また、これらを自分のアプリケーションで使用できますか?
Windows 10 コンピューターの NtDll エクスポート テーブルを調べていたところ、、、、などの標準 C ランタイム関数がエクスポートされていることがわかりましmemcpy
た。sprintf
strlen
LoadLibrary
と を介して実行時に動的に呼び出すことができるということGetProcAddress
ですか? これはすべての Windows バージョンに当てはまりますか?
もしそうなら、(NtDll の CRT 関数を使用するだけで) C ランタイム ライブラリを完全に削除できるので、プログラムを小さくできますか?
winapi - NtQueryInformationFile が正しくない割り当てサイズを返す
FILE_STANDARD_INFORMATION 構造体で NtQueryInformationFileを使用して、ファイルの割り当てサイズを取得します。ただし、小さなファイルの場合、間違った1 つの結果が返されます。たとえば、サイズが 1 バイトのテキスト ファイルは、4096 バイトではなく、8 バイトの割り当てサイズを返します。問題はどこですか?
1 エクスプローラー (私の場合は Windows XP Checked Build) では、ディスク上のサイズがより高い数字 (サイズ 1 のファイルで 4096 バイト) を報告するため、この値は正しくないと想定しています。
c++ - システム関数を呼び出す人を見つける
VisualStudio 2015 (update 2) で開発された C++ アプリケーションがあります。
AMD Code XL を使用してプロファイリングすると、プログラムがその時間のほぼ 20% をRtlUpcaseUnicodeToMultiByteN
モジュールから関数に費やしていることがわかりますntdll.dll
。どうやら、Unicode tsrings を大文字に変換します。
そんなに時間をかけても意味がないので、誰が関数を呼び出しているかを知る必要があります。簡単ではないことがわかりました。
私がやりたいことは、ブレークポイントを設定してから、コール スタックを確認することです。ただし、ソースコードがないと、通常の方法で設定することはできません。
Windbg を試してみましたが、スタック トレースは基本的に役に立ちませんでした。
次に、VisualStudio で「関数ブレークポイント」を設定する方法があることを発見しました。しかし、プログラムが壊れることはありませんでした。「モジュール」ウィンドウがntdll.dll
「シンボルがロードされました」ステータスとして表示されたとしても。
これ以上何ができますか?
c++ - Visual Studio 2010 での ntdll.dll 割り当てエラー
いくつかの C++ ライブラリを使用して Visual Studio 2010 で開発された適切に実行されるアプリケーションがあります。必要なファイルをラップトップにコピーして、自分の時間に作業し、必要な環境をセットアップしました (VS2010、ITK、VTK、Boost、Qt、FANN、Waffles)。仕事用のコンピューターで正常に動作していたコードが、ラップトップでランタイム エラーになり、問題を特定できません。
コードを実行すると、「 **** (ntdll.dll) で未処理の例外 - アクセス違反の読み取り場所 **** 」が表示されて中断します (エラーが表示されるコード ウィンドウは calloc_impl.c です)。コール スタックは、ntdll.dll!RtlAllocateHeap() を示しています。ntdll のシンボル ロード情報を表示しようとすると、.pdb ファイルが Microsoft Public Symbols サーバーからロードされます (システム 32 またはアプリケーション フォルダーのいずれにも、コンピューター上で見つかりませんでした)。
これは私のラップトップのパフォーマンス制限に何らかの関係がありますか? それとも、私がセットアップした環境がどういうわけか完全ではありませんか?仕事に関連しているため、コードのスナップショットを投稿することはできませんが、問題が明確になったことを願っています. どんな助けでも大歓迎です。
c - メモリにロードされたフック dll
メモリへの dll ロードのイベントをキャッチするプログラムを作成しようとしています。そのために、LdrLoadDll
API にフックを付けました。これは非常にうまく機能しますが、問題は、この API が依存関係としてロードされた dll をキャッチしないことです。例えば -
を使用LdrLoadDl
すると、メモリへのロードはキャッチされますが、依存関係の 1 つであるものはchrome_child.dll
キャッチされません。win32u.dll
chrome_child.dll
その目的で使用するより良い API を知っている人はいますか?
c - C - ntdll のみを使用したスタック割り当て
ntdll.dll
のみを使用してスタックにメモリを割り当てるAPI 呼び出しまたは別の同様の方法はありますか?
私はそれを知っalloca()
ていますが、からの関数しか使用できないため、使用できませんntdll.dll
。
ありがとう!
c++ - C++ SysCall asm 未解決の外部
asm のシステムコールを介して NtReadVirtualMemory を呼び出そうとしています。私はいくつかの異なる理由でこれを行っていますが、それほど重要ではありません。したがって、メインヘッダーファイルで次のように関数を定義します。
私が信じているパラメータは正しいです
次に、プロジェクトに ASM ファイルを作成しました。私は、このタスクのごく一部であるため、このタスクを完了しようとするのに十分な知識しかありません。おそらく、このasmファイルをどこにも含める必要はないので、残しました。ここにあります:
ただし、コンパイルすると、未解決の外部エラーが発生します。これは、この ASM ファイル内で定義する必要があるためだと思いますが、それを行う方法がわかりません。私は何を間違っていますか/どうすればよいですか。
私は Windows 7 を使用しており、実際の syscall インデックスは次の表に示すように 37 です。
質問者の正確なエラーは次のとおりです。
コメントされたソリューションでまだエラーが発生しています: