读《软件调试》第九章

Jun 07, 2016 pm 03:56 PM
cpu 今日 教師

今日读了张银奎老师的《软件调试》,前面的CPU和硬件相关的部分离得比较远,所以从第九章操作系统读起,今天的读书笔记: 9.2采集调试消息 调试事件分为8种 typedef enum _DBGKM_APINUMBER { DbgkmExceptionApi = 0, // 异常 DbgkmCreateThreadApi = 1, //

今日读了张银奎老师的《软件调试》,前面的CPU和硬件相关的部分离得比较远,所以从第九章操作系统读起,今天的读书笔记:

9.2采集调试消息
调试事件分为8种
typedef enum _DBGKM_APINUMBER
{
DbgkmExceptionApi = 0, // 异常
DbgkmCreateThreadApi = 1, // 创建线程
DbgkmCreateProcessApi = 2, // 创建进程
DbgkmExitThreadApi = 3, // 退出线程
DbgkmExitProcessApi = 4, // 进程退出
DbgkmLoadDllApi = 5, // 映射DLL
DbgkmUnloadDllApi = 6, // 反映射DLL
DbgkmErrorReportApi = 7, // 内部错误
DbgkmMaxApiNumber = 8, // 这组常量的最大值
} DBGKM_APINUMBER;


9.2.2 进程和线程创建消息
操作系统就支持向调试系统发送消息,这个我是没有想到的,具体过程如下:
创建用户态windows线程时,首先为线程建立必要的内核对象和数据结构,并分配栈(stack)空间,这些工作完成后,
该线程处于挂起状态(CREATE_SUSPEND), 而后进程管理器会通知环境子系统,环境子系统会作必要的设置和登记,最后
进程管理器会调用PspUserThreadStartup例程,准备启动该线程。
为了支持调试,PspUserThreadStartup总是会调用调试子系统的内核函数DbgkCreateThread,以便让调试子系统得到处理机会。


DbgkCreateThread会检查新创建线程所在的进程是否正在被调试(根据DebugPort是否为空),如果不是,便立即返回,
如果是,则会继续检查该进程的用户态运行时间(UserTime)是否为0,目的是判断该线程是否是进程中的第一个线程,如果是,
则通过DbgkSendApiMessage()函数向DebugPort发送DbgkmCreateProcessApi消息,如果不是,
则发送DbgkmCreateThreadApi消息。
调试器收到的进程创建(CREATE_PROCESS_DEBUG_EVENT,值为3)和线程创建(CREATE_THREAD_DEBUG_EVENT,值为2)事件就是源于这两个消息。


9.2.3 进程和线程退出消息 --- 与上面类似


9.2.4 模块映射和反映射消息
DLL(Dynamic-link Library)是Windows中使用最多的技术之一。如:
Windows内核文件NTOSKRNL.EXE虽然是EXE后缀,其实质是一个DLL;
NTDLL.DLL是连接用户态和操作系统内核的桥梁,用户态代码通过它访问内核服务;
Windows子系统DLL(KERNEL32.DLL,ADVAPI32.DLL,USER32.DLL,GDI32.DLL)是Windows API的载体;


观察进程中的DLL:
1.运行notepad.exe
2.启动VC6,通过Build>Start Debug>Attatch to Process...菜单弹出Attach Process对话框,然后选择notepad.
3. 通过Debug>Modules...菜单弹出模块列表,便可以看到notepad进程中的DLL了。
第二列是该模块在进程空间中的地址(虚拟地址,均小于0x80000000),可见这些模块都是位于用户空间中的。


存在于多个进程空间中的DLL,是否会重复占用内存?
否!当LoadLibrary()和LoadLibraryEx() API加载一个DLL时,会首先判断该DLL是否已经加载过,如果是,则不会重复加载,
只是将该DLL对应的内存页面映射(map)到目标进程的内存空间,并把该DLL的引用次数加1.
当进程退出或调用FreeLibrary() API要卸载一个DLL时,Windows会从进程的虚拟内存空间中把该DLL的映射删除(unmap),
并递减该DLL的引用次数,如果引用次数变为0,那么该DLL会被彻底移出内存。


9.2.5 异常消息
为了支持调试,系统会把被调试程序中发生的所有异常发送给调试器。
内核中KiDispatchException函数是分发异常的枢纽,它会给每个异常安排最多两轮被处理的机会,
对于每一轮处理机会,它都会调用调试子系统的DbgkForwardException函数来通知调试子系统。


总结:
系统的进程管理器、内存管理器和异常分发函数会调用调试子系统的Dbgk采集例程,来向调试子系统通报调试消息,
这些例程被调用后会根据当前进程的DebugPort字段来判断当前进程是否处于被调试状态。
如果不是,便忽略这次调用,直接返回;
如果是,便产生一个DBGKM_APIMSG结构,然后调用下一节将介绍的DbgkSendApiMessage函数来发送调试消息。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ゲーム時の CPU 使用率はどのくらいあるべきですか? ゲーム時の CPU 使用率はどのくらいあるべきですか? Feb 19, 2024 am 11:21 AM

ゲームは多くのリソースを消費するため、コンピューターの速度が低下するのが一般的です。ゲーム時の CPU 使用率を理解し、過負荷を避けることが重要です。したがって、適切な CPU 使用率を追跡することが、ゲーム体験をスムーズに保つための鍵となります。この記事では、ゲームの実行中に達成すべき適切な CPU 使用率について説明します。ゲーム中の CPU 使用率 CPU 使用率はプロセッサのワークロードの重要な指標であり、CPU のパフォーマンス仕様に依存します。一般に、より強力な CPU ほど使用率が高くなります。より多くのコアとスレッドを備えた CPU は、システム全体のパフォーマンスを向上させることができます。マルチスレッドのサポートは、CPU の潜在能力を最大限に引き出すのに役立ちます。ゲームでは、CPU 使用率はプロセッサー使用率に依存し、ゲームに影響を与える可能性があります。

Win11でCPUパフォーマンスを最大に設定する方法 Win11でCPUパフォーマンスを最大に設定する方法 Feb 19, 2024 pm 07:42 PM

Win11 システムを使用しているときに、コンピューターの動作が十分にスムーズでないことに気づき、CPU のパフォーマンスを向上させたいと考えていますが、その方法がわからないというユーザーが多くいます。以下では、Win11 システムで CPU パフォーマンスを最高レベルに設定し、コンピュータの効率を高める方法を詳しく紹介します。設定方法: 1. デスクトップ上の「このPC」を右クリックし、オプションリストから「プロパティ」を選択します。 2. 新しいインターフェースに入ったら、「関連リンク」の「システムの詳細設定」をクリックします。 3. 開いたウィンドウで、上部の「詳細設定」タブをクリックし、「パフォーマンス」の下部にある「&」をクリックします。

Intel XTU を使用して CPU をアンダーボルト化し、オーバークロックする方法 Intel XTU を使用して CPU をアンダーボルト化し、オーバークロックする方法 Feb 19, 2024 am 11:06 AM

Intel XTU は、コンピュータのパフォーマンスを簡単に管理できる強力なアプリケーションです。 CPU 電圧を調整することで過熱の問題を解決したり、オーバークロックしてパフォーマンスを向上したりできます。この記事では、電圧の調整やオーバークロックなど、インテル XTU を利用してコンピューターのパフォーマンスを最適化する方法について説明します。不足電圧とオーバークロックは CPU にどのような影響を与えますか? CPU のアンダーボルトとオーバークロックの方法を学ぶ前に、まずそれらが何であるかを理解する必要があります。不足電圧とは、CPU に必要な電圧を徐々に下げることを指します。高電圧により温度が高くなるため、このプロセスは熱の放出を減らすのに役立ちます。 CPU への電圧供給を下げることにより、温度を効果的に下げることができます。ラップトップが熱くなって速度が低下し始めた場合は、すぐに問題を解決する必要があります。

ボックス CPU とバルク CPU の違い ボックス CPU とバルク CPU の違い Jan 23, 2024 am 09:46 AM

ボックス CPU とバルク CPU の違い: 1. 品質、2. 保証期間、3. ファン、4. 価格、5. パッケージング、6. 販売チャネル。詳細な紹介: 1. 品質、箱入りでもバルクでも、CPU 自体の品質に違いはありません. すべて同じメーカーによって製造され、同じ品質テストと品質管理プロセスを受けています; 2. 保証期間、箱入り CPU バルク CPU の保証期間が通常 1 年であるのに対し、箱入り CPU は正規代理店や認定ディーラーなどから販売されることが多いため、通常は 3 年間と長い保証期間が提供されます。

コンピューターの CPU のクロック周波数を上げる方法 コンピューターの CPU のクロック周波数を上げる方法 Feb 20, 2024 am 09:54 AM

コンピュータの CPU をオーバークロックする方法 テクノロジーの継続的な進歩に伴い、コンピュータのパフォーマンスに対する人々の要求もますます高くなっています。コンピューターのパフォーマンスを向上させる効果的な方法は、オーバークロックによって CPU の動作周波数を上げることです。オーバークロックにより、CPU はデータをより高速に処理できるようになり、より高いコンピューティング能力が提供されます。では、コンピューターの CPU をオーバークロックするにはどうすればよいでしょうか?ここではオーバークロックの基本原理と具体的な操作方法を紹介します。まず、オーバークロックがどのように機能するかを理解しましょう。 CPUの動作周波数はマザーボード上の水晶発振器によって決まります。

144コア、3DスタックSRAM:富士通、次世代データセンタープロセッサMONAKAの詳細を発表 144コア、3DスタックSRAM:富士通、次世代データセンタープロセッサMONAKAの詳細を発表 Jul 29, 2024 am 11:40 AM

7月28日の当サイトのニュースによると、海外メディアTechRaderは、富士通が2027年に出荷予定の「FUJITSU-MONAKA」(以下、MONAKA)プロセッサを詳しく紹介したと報じた。 MONAKACPUは「クラウドネイティブ3Dメニーコア」アーキテクチャをベースとし、Arm命令セットを採用しており、AIコンピューティングに適しており、メインフレームレベルのRAS1を実現できます。富士通は、MONAKAはエネルギー効率と性能の飛躍的な向上を達成すると述べた。超低電圧(ULV)技術などの技術のおかげで、CPUは2027年には競合製品の2倍のエネルギー効率を達成でき、冷却には水冷が必要ない; さらに、プロセッサのアプリケーションパフォーマンスが相手の2倍に達することもあります。命令に関しては、MONAKAにはvectorが搭載されています。

WIN10サービスホストの動作プロセスがCPUを過剰に占有している WIN10サービスホストの動作プロセスがCPUを過剰に占有している Mar 27, 2024 pm 02:41 PM

1. まず、タスクバーの空白スペースを右クリックして[タスクマネージャー]オプションを選択するか、スタートロゴを右クリックして[タスクマネージャー]オプションを選択します。 2. 開いたタスク マネージャー インターフェイスで、右端の [サービス] タブをクリックします。 3. 開いた[サービス]タブで、下の[サービスを開く]オプションをクリックします。 4. 表示される[サービス]ウィンドウで、[InternetConnectionSharing(ICS)]サービスを右クリックし、[プロパティ]オプションを選択します。 5. 表示されたプロパティ画面で[プログラムから開く]を[無効]に変更し、[適用]をクリックして[OK]をクリックします。 6. スタートロゴをクリックし、シャットダウンボタンをクリックして[再起動]を選択し、コンピュータの再起動を完了します。

AM4 は死ぬことを拒否、ニュースによると AMD は最大 4.8GHz のクロックで動作する Ryzen 9 5900XT/7 5800XT を発売するとのこと AM4 は死ぬことを拒否、ニュースによると AMD は最大 4.8GHz のクロックで動作する Ryzen 9 5900XT/7 5800XT を発売するとのこと Jun 05, 2024 pm 09:43 PM

6 月 1 日のこの Web サイトのニュースによると、ソースの @CodeCommando が本日ツイートし、Computex2024 イベントでの AMD の今後のプレゼンテーション資料のスクリーンショットを共有しました。ツイートの内容は「AM4 は決して死ぬことはない」であり、添付の写真には 2 つの新しいものが示されていました。 Ryzen5000XTシリーズプロセッサ。スクリーンショットによると、次の 2 つの製品が示されています。 Ryzen95900XTR Ryzen95900XT は、AMD の Ryzen95950X よりもわずかに遅いクロック速度を持つ、比較的ハイエンドに位置する新しい 16 コア AM4 プロセッサです。 Ryzen75800XT AMD の既存の Ryzen75800X プロセッサの高速バージョンです。両方のプロセッサのクロックは最大 4.8G です。

See all articles