Professional Documents
Culture Documents
Textbook Advanced Windows Memory Dump Analysis With Data Structures Dmitry Vostokov Ebook All Chapter PDF
Textbook Advanced Windows Memory Dump Analysis With Data Structures Dmitry Vostokov Ebook All Chapter PDF
https://textbookfull.com/product/for500-1-windows-digital-
forensics-and-advanced-data-triage-for500-2-core-windows-
forensics-part-1-windows-registry-forensics-and-analysis-sans-
institute/
https://textbookfull.com/product/advanced-data-structures-theory-
and-applications-1st-edition-suman-saha/
https://textbookfull.com/product/functional-data-structures-in-r-
advanced-statistical-programming-in-r-mailund/
https://textbookfull.com/product/functional-data-structures-in-r-
advanced-statistical-programming-in-r-thomas-mailund/
Azure Data Factory Cookbook - Second Edition Dmitry
Foshin
https://textbookfull.com/product/azure-data-factory-cookbook-
second-edition-dmitry-foshin/
https://textbookfull.com/product/advanced-structural-analysis-
with-matlab-srinivas-chandrasekaran/
https://textbookfull.com/product/azure-data-factory-cookbook-
data-engineers-guide-to-build-and-manage-etl-and-elt-pipelines-
with-data-integration-2nd-edition-dmitry-foshin/
https://textbookfull.com/product/data-structures-with-c-
programming-2nd-edition-anil-kumar-yadav/
https://textbookfull.com/product/data-lake-architecture-
designing-the-data-lake-and-avoiding-the-garbage-dump-first-
edition-bill-inmon/
7
Published by OpenTask, Republic of Ireland
All rights reserved. No part of this book may be reproduced, stored in a retrieval system, or
transmitted, in any form or by any means, without the prior written permission of the
publisher.
You must not circulate this book in any other binding or cover, and you must impose the same
condition on any acquirer.
Product and company names mentioned in this book may be trademarks of their owners.
OpenTask books and magazines are available through booksellers and distributors worldwide.
For further information or comments send requests to press@opentask.com.
A CIP catalog record for this book is available from the British Library.
Version 3, 2017
2
Contents
3
4
About the Author
5
Dmitry Vostokov is an internationally recognized expert, speaker,
educator, scientist, and author. He is the founder of pattern-oriented
software diagnostics, forensics and prognostics discipline, and
Software Diagnostics Institute (DA+TA: DumpAnalysis.org +
TraceAnalysis.org). Vostokov has also authored more than 30 books
on software diagnostics, forensics and problem-solving, memory
dump analysis, debugging, software trace and log analysis, reverse
engineering, and malware analysis. He has more than 20 years of
experience in software architecture, design, development, and
maintenance in a variety of industries including leadership, technical
and people management roles. Dmitry also founded DiaThings, Logtellect, OpenTask Iterative and
Incremental Publishing (OpenTask.com), Software Diagnostics Services (former Memory Dump
Analysis Services) PatternDiagnostics.com and Software Prognostics. In his spare time, he presents
various topics on Debugging.TV and explores Software Narratology, an applied science of software
stories that he pioneered, and its further development as Narratology of Things and Diagnostics of
Things (DoT). His current area of interest is theoretical software diagnostics and its mathematical
foundations.
6
Presentation Slides and Transcript
7
Hello Everyone, my name is Dmitry Vostokov, and I teach this course.
8
These prerequisites are hard to define. Software development experience will be a definite help for
some exercises. The familiarity with software design and UML would be beneficial when I show some
diagrams. The ability to read assembly language has some advantages but is not necessary for this
training. If you attended Accelerated training1, then it may also help because this training extends the
former one and presupposes the familiarity with its topics.
1
http://www.patterndiagnostics.com/accelerated-windows-memory-dump-analysis-book
7
Our primary goal is to learn various analysis techniques and debugging commands beyond listing
modules, processes, threads and their stack traces. When discussing modules, memory structures, and
kernel objects, it is necessary to use some graphical notation to communicate concepts, so my choice
was to use UML (Unified Modeling Language2). If you are not familiar with it, please don’t worry as I
explain notation along the way. We will use an only absolutely necessary minimum of it.
2
https://en.wikipedia.org/wiki/Unified_Modeling_Language
10
For me, there were many training formats to consider, and I decided that the best way is to
concentrate on hands-on exercises. Specifically for this training, I developed 12 of them. Slides are
kept to a minimum.
11
12
Practice Exercises
13
14
Now we come to practice immediately.
15
http://www.patterndiagnostics.com/Training/AdvWMDA/AdvWMDA-V3-Dumps.zip
If you want to experiment with memory dumps from legacy exercises you can download them too:
http://www.patterndiagnostics.com/Training/AdvWMDA/AdvWMDA-Legacy-Dumps.zip
16
17
Exercise 0: Download, setup and verify your WinDbg installation
Goal: Install Debugging Tools for Windows and set up symbols correctly.
1. Download and install the latest version of Debugging Tools for Windows (windbg.org for quick links).
2. Launch WinDbg from Windows Kits \ WinDbg (X64) or Windows Kits \ WinDbg (X86). For uniformity, we use
the X64 version of WinDbg throughout exercises
3. Open \AdvWMDA-Dumps\x64\notepad.DMP:
18
4. We get the dump file loaded:
19
5. Type the command .symfix c:\mss to set a path to download symbol files from Microsoft symbol file server
(use ENTER to execute commands after typing):
20
7. Type k command to verify the correctness of stack trace:
21
8. The output of command should be this:
0:000> k
# Child-SP RetAddr Call Site
00 000000b4`520dfd48 00007ffa`e57cf8e5 user32!NtUserGetMessage+0xa
01 000000b4`520dfd50 00007ff6`c5b33470 user32!GetMessageW+0x25
02 000000b4`520dfd80 00007ff6`c5b441f5 notepad!WinMain+0x178
03 000000b4`520dfe00 00007ffa`e3b42d92 notepad!WinMainCRTStartup+0x1c5
04 000000b4`520dfec0 00007ffa`e5bc9f64 kernel32!BaseThreadInitThunk+0x22
05 000000b4`520dfef0 00000000`00000000 ntdll!RtlUserThreadStart+0x34
If it has one of these forms below or similar then your symbol files were not set up correctly (coloring is mine) -
Incorrect Stack Trace pattern:
0:000> k
# Child-SP RetAddr Call Site
00 000000b4`520dfd48 00007ffa`e57cf8e5 0x00007ffa`e57dfcba
01 000000b4`520dfd50 00007ff6`c5b457b0 0x00007ffa`e57cf8e5
02 000000b4`520dfd58 00000000`00000000 0x00007ff6`c5b457b0
0:000> k
# Child-SP RetAddr Call Site
00 000000b4`520dfd48 00007ffa`e57cf8e5 user32!NtUserGetMessage+0xa
01 000000b4`520dfd50 00007ff6`c5b33470 user32!GetMessageW+0x25
02 000000b4`520dfd80 000000b4`52182438 0x00007ff6`c5b33470
03 000000b4`520dfd88 00000000`0eb130d3 0x000000b4`52182438
04 000000b4`520dfd90 00000000`00000001 0xeb130d3
05 000000b4`520dfd98 000000b4`5218247c 0x1
06 000000b4`520dfda0 00000000`00002d0c 0x000000b4`5218247c
07 000000b4`520dfda8 00007ffa`00000000 0x2d0c
08 000000b4`520dfdb0 00007ff6`00000000 0x00007ffa`00000000
09 000000b4`520dfdb8 00000000`00000000 0x00007ff6`00000000
0:000> k
# Child-SP RetAddr Call Site
00 000000b4`520dfd48 00007ffa`e57cf8e5 user32!NtUserGetMessage+0xa
*** ERROR: Module load completed but symbols could not be loaded for notepad.exe
01 000000b4`520dfd50 00007ff6`c5b33470 user32!GetMessageW+0x25
02 000000b4`520dfd80 00007ff6`c5b441f5 notepad+0x6eca
*** ERROR: Symbol file could not be found. Defaulted to export symbols for kernel32.dll -
03 000000b4`520dfe00 00007ffa`e3b42d92 notepad+0xcf8b
04 000000b4`520dfec0 00007ffa`e5bc9f64 kernel32!BaseThreadInitThunk+0x22
05 000000b4`520dfef0 00000000`00000000 ntdll!RtlUserThreadStart+0x34
0:000> k
# Child-SP RetAddr Call Site
00 000000b4`520dfd48 00007ffa`e57cf8e5 user32!NtUserGetMessage+0xa
01 000000b4`520dfd50 00007ff6`c5b33470 user32!GetMessageW+0x25
02 000000b4`520dfd80 00007ff6`c5b441f5 notepad+0x6eca
03 000000b4`520dfe00 00007ffa`e3b42d92 notepad+0xcf8b
04 000000b4`520dfec0 00007ffa`e5bc9f64 kernel32!BaseThreadInitThunk+0x22
05 000000b4`520dfef0 00000000`00000000 ntdll!RtlUserThreadStart+0x34
9. To avoid possible confusion and glitches, we recommend exiting WinDbg after each exercise.
22
Complete memory dumps were saved from Windows 10 system3 running under VMware Workstation
Pro. We will learn more than 20 memory analysis patterns.
3
For exercise C11 the memory dump was saved from x64 Windows Vista system. Exercises from the previous version of this
training based on WinDbg from Windows 8.1 with memory dumps saved from x64 Windows Vista system running under
VMware are available in Legacy Exercises section.
23
24
Exercise C1: Stack Trace Collection (64-bit)
Goal: Learn how to get stack traces related to sessions, processes, and threads; diagnose different thread types; get
stack traces from WOW64 processes.
Patterns: Stack Trace Collection (unmanaged space); Passive Thread; Coupled Processes (weak); Coupled Processes
(strong); Wait Chain (ALPC); Virtualized Process; Truncated Stack Trace.
2. Open \AdvMDA-Dumps\x64\MEMORY-Normal.DMP
*** ERROR: Module load completed but symbols could not be loaded for myfault.sys
*** ERROR: Module load completed but symbols could not be loaded for NotMyfault.exe
Probably caused by : myfault.sys ( myfault+1385 )
Followup: MachineOwner
-----------
Note: Probably caused by myfault.sys. We used NotMyFault tool from Windows Internals:
http://technet.microsoft.com/en-us/sysinternals/bb963901
http://download.sysinternals.com/files/NotMyFault.zip
25
4. We open a log file, set up symbols and reload them:
3: kd> .reload
Loading Kernel Symbols
...............................................................
................................................................
......................................
Loading User Symbols
...........................................
Loading unloaded module list
.............
3: kd> !session
Sessions on machine: 2
Valid Sessions: 0 1
Current Session 1
3: kd> !process
PROCESS ffffe000ec09a080
SessionId: 1 Cid: 1594 Peb: 00379000 ParentCid: 0c64
DirBase: 3cfce000 ObjectTable: ffffc000dd91c2c0 HandleCount: <Data Not Accessible>
Image: NotMyfault.exe
VadRoot ffffe000eb3fb4b0 Vads 92 Clone 0 Private 473. Modified 6. Locked 0.
DeviceMap ffffc000db0667a0
Token ffffc000dd9d5a90
ElapsedTime 00:00:05.488
UserTime 00:00:00.000
KernelTime 00:00:00.000
QuotaPoolUsage[PagedPool] 224896
QuotaPoolUsage[NonPagedPool] 12632
Working Set Sizes (now,min,max) (3220, 50, 345) (12880KB, 200KB, 1380KB)
PeakWorkingSetSize 3149
VirtualSize 115 Mb
PeakVirtualSize 115 Mb
PageFaultCount 3323
MemoryPriority FOREGROUND
BasePriority 8
CommitCharge 539
Job ffffe000ec07ead0
26
THREAD ffffe000ec41f040 Cid 1594.154c Teb: 0000000000382000 Win32Thread: 0000000000000000 WAIT:
(WrQueue) UserMode Alertable
ffffe000ec00bb40 QueueObject
3: kd> !session -s 0
Sessions on machine: 2
Implicit process is now ffffe000`eb239080
Using session 0
PEB at 00000061467f1000
InheritedAddressSpace: No
ReadImageFileExecOptions: No
BeingDebugged: No
ImageBaseAddress: 00007ff71e540000
Ldr 00007ff8ed365200
Ldr.Initialized: Yes
Ldr.InInitializationOrderModuleList: 0000022132102ee0 . 000002213211b4e0
Ldr.InLoadOrderModuleList: 0000022132103050 . 000002213211b4c0
Ldr.InMemoryOrderModuleList: 0000022132103060 . 000002213211b4d0
Base TimeStamp Module
7ff71e540000 5632d16d Oct 30 02:09:49 2015 C:\Windows\system32\csrss.exe
7ff8ed220000 56a8483f Jan 27 04:31:59 2016 C:\Windows\SYSTEM32\ntdll.dll
7ff8e9820000 5632d16f Oct 30 02:09:51 2015 C:\Windows\system32\CSRSRV.dll
7ff8e9800000 5632d166 Oct 30 02:09:42 2015 C:\Windows\system32\basesrv.DLL
7ff8e97c0000 5632d722 Oct 30 02:34:10 2015 C:\Windows\system32\winsrv.DLL
7ff8eb3e0000 565423d2 Nov 24 08:46:10 2015 C:\Windows\system32\USER32.dll
7ff8e9c80000 56a8489c Jan 27 04:33:32 2016 C:\Windows\system32\kernelbase.dll
7ff8eb0b0000 5632d5aa Oct 30 02:27:54 2015 C:\Windows\system32\kernel32.dll
7ff8ed090000 568b2035 Jan 05 01:45:25 2016 C:\Windows\system32\GDI32.dll
7ff8e97b0000 5632d888 Oct 30 02:40:08 2015 C:\Windows\system32\sxssrv.DLL
27
7ff8e9670000 5632d5f0 Oct 30 02:29:04 2015 C:\Windows\system32\sxs.dll
7ff8ea890000 5632d515 Oct 30 02:25:25 2015 C:\Windows\system32\RPCRT4.dll
7ff8e9bb0000 5632d756 Oct 30 02:35:02 2015 C:\Windows\system32\bcryptPrimitives.dll
SubSystemData: 0000000000000000
ProcessHeap: 00000221320e0000
ProcessParameters: 0000022132102550
CurrentDirectory: 'C:\Windows\system32\'
WindowTitle: '< Name not readable >'
ImageFile: 'C:\Windows\system32\csrss.exe'
CommandLine: '%SystemRoot%\system32\csrss.exe ObjectDirectory=\Windows SharedSection=1024,20480,768
Windows=On SubSystemType=Windows ServerDll=basesrv,1 ServerDll=winsrv:UserServerDllInitialization,3
ServerDll=sxssrv,4 ProfileControl=Off MaxRequestThreads=16'
DllPath: '< Name not readable >'
Environment: 0000022132102080
ComSpec=C:\Windows\system32\cmd.exe
NUMBER_OF_PROCESSORS=4
OS=Windows_NT
Path=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
PROCESSOR_ARCHITECTURE=AMD64
PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 58 Stepping 9, GenuineIntel
PROCESSOR_LEVEL=6
PROCESSOR_REVISION=3a09
PSModulePath=%ProgramFiles%\WindowsPowerShell\Modules;C:\Windows\system32\WindowsPowerShell\v1.0\Modules
SystemDrive=C:
SystemRoot=C:\Windows
TEMP=C:\Windows\TEMP
TMP=C:\Windows\TEMP
USERNAME=SYSTEM
windir=C:\Windows
28
THREAD ffffe000eb74d080 Cid 0180.01b0 Teb: 00000061467fc000 Win32Thread: ffffe000ebf95c60 WAIT:
(WrLpcReply) UserMode Non-Alertable
ffffe000eb74d6b8 Semaphore Limit 0x1
Waiting for reply to ALPC Message ffffc000dae5fb30 : queued at port ffffe000eb73a800 : owned by
process ffffe000eb83e840
Not impersonating
DeviceMap ffffc000da21a760
Owning Process ffffe000eb239080 Image: csrss.exe
Attached Process N/A Image: N/A
Wait Start TickCount 2203 Ticks: 8578 (0:00:02:14.031)
Context Switch Count 7 IdealProcessor: 1
UserTime 00:00:00.000
KernelTime 00:00:00.000
Win32 Start Address winsrv!TerminalServerRequestThread (0x00007ff8e97c1320)
Stack Init ffffd000250bcc90 Current ffffd000250bc3f0
Base ffffd000250bd000 Limit ffffd000250b7000 Call 0000000000000000
Priority 15 BasePriority 15 PriorityDecrement 0 IoPriority 2 PagePriority 5
Kernel stack not resident.
29
Another random document with
no related content on Scribd:
pont.
Je me dirigeai vers Fleet street, dans l’intention de prendre un
fiacre et de rentrer chez moi. Quand mon premier sentiment
d’indignation se fut dissipé, tout le grotesque de l’aventure m’apparut
et je me mis à rire tout haut parmi les rues désertes, au scandale
d’un agent de police. Plus j’y réfléchissais, plus je riais de bon cœur,
mais une main, en se posant sur mon épaule, vint modérer ma
gaieté : je me retournai, et vis celui qui aurait dû être couché au
poste de la police fluviale. Il était trempé des pieds à la tête, son
chapeau de soie dégoulinant se tenait tout en arrière de son occiput,
et autour de son cou pendait une couverture rayée de jaune,
évidente propriété de l’État.
— Le crépitement d’un fagot sous une marmite, dit-il, solennel.
Petit gars, sais-tu bien que c’est un péché de rire sans motif ? Ma
conscience m’a fait craindre que tu n’arrives jamais chez toi, et je
suis venu pour te conduire un bout. Ils sont bien mal élevés, là-bas
près de l’eau. Ils n’ont pas voulu m’écouter lorsque je leur ai parlé de
tes œuvres, aussi je les ai lâchés. Jette sur toi cette couverture, petit
gars. Elle est belle et fraîche.
Je soupirai intérieurement. La Providence à coup sûr avait
décrété que je vadrouillerais pendant l’éternité avec l’infâme
connaissance de MacPhee.
— Allez-vous-en, lui dis-je, allez chez vous, ou sinon je vous fais
arrêter.
Il s’adossa contre un réverbère et se mit un doigt sur le nez… sur
son indécent pif sensuel.
— Maintenant je me rappelle que MacPhee m’avait prévenu que
tu étais plus orgueilleux qu’un paon, et le fait que tu m’as jeté à la
dérive dans un bateau prouve que tu étais saoul comme une grive.
Un nom illustre est comme un gâteau savoureux. Moi, je n’en ai pas.
Et il se lécha gaiement les babines.
— Je le sais, dis-je. Et alors ?
— Ouais, mais toi tu en as un. Je me rappelle maintenant que
MacPhee parlait de ta réputation dont tu étais si fier. Petit gars, si tu
me fais arrêter… je suis vieux assez pour être ton père… je bafoue
ta réputation jusqu’à extinction de voix : car je t’appellerai par ton
nom jusqu’à ce que les vaches rentrent à l’étable. Ce n’est pas de la
plaisanterie que d’être mon ami. Si tu repousses mon amitié, il te
faut du moins venir jusqu’à Vine street avec moi pour avoir volé le
youyou du Breslau.
Et il se mit à chanter à gorge déployée :
Au matin
Au matin avec le tombereau noir…
Nous remonterons à Vine street, au matin !
— C’est à Bow street que vous allez venir, vous, dit l’agent avec
aigreur.
— Cet homme est mourant. (Il geignait, étendu sur le pavé.)
Amenez l’ambulance, dis-je.
Il y a une ambulance derrière St. Clément Danes, ce en quoi je
suis mieux renseigné que beaucoup. L’agent, paraît-il, possédait les
clefs du kiosque où elle gîtait. Nous la sortîmes (c’était un engin à
trois roues, pourvu d’une capote) et nous jetâmes dessus le corps
de l’individu.
Placé dans une voiture d’ambulance, un corps a l’air aussi mort
que possible. A la vue des semelles de bottes roides, les agents se
radoucirent.
— Allons-y donc, firent-ils.
Je m’imaginai qu’ils parlaient toujours de Bow street.
— Laissez-moi voir Dempsey trois minutes, s’il est de service,
répliquai-je.
— Entendu. Il y est.
Je compris alors que tout irait bien, mais avant de nous mettre en
route, je passai la tête sous la capote de l’ambulance, pour voir si
l’individu était encore en vie. Mon oreille perçut un chuchotement
discret.
— Petit gars, tu devras me payer un nouveau chapeau. Ils m’ont
crevé le mien. Ne va pas me lâcher à cette heure, petit gars. Avec
mes cheveux gris je suis trop vieux pour aller en prison par ta faute.
Ne me lâche pas, petit gars.
— Vous aurez de la chance si vous vous en tirez à moins de sept
ans, dis-je à l’agent.
Mûs par une crainte très vive d’avoir outrepassé leur devoir, les
deux agents quittèrent leurs secteurs de surveillance, et le lugubre
convoi se déroula le long du Strand désert. Je savais qu’une fois
arrivé à l’ouest d’Adelphi je serais en pays ami. Les agents
également eurent sujet de le savoir, car tandis que je marchais
fièrement à quelques pas en avant du catafalque, un autre agent me
jeta au passage :
— Bonsoir, monsieur.
— Là, vous voyez, dis-je avec hauteur. Je ne voudrais pour rien
au monde être dans votre peau. Ma parole, j’ai bonne envie de vous
mener tous deux à la préfecture de police.
— Si ce monsieur est de vos amis, peut-être… dit l’agent qui
avait asséné le coup et songeait aux conséquences de son acte.
— Peut-être aimeriez-vous me voir partir sans rien dire de
l’aventure, complétai-je.
Alors apparut à nos yeux la silhouette du brigadier Dempsey, que
son imperméable rendait pour moi pareil à un ange de lumière. Je le
connaissais depuis des mois, il était de mes meilleurs amis, et il
nous arrivait de bavarder ensemble dans le petit matin. Les sots
cherchent à gagner les bonnes grâces des princes et des ministres,
et les cours et ministères les laissent périr misérablement. Le sage
se fait des alliés parmi la police et les cochers de fiacre, en sorte que
ses amis jaillissent du kiosque et de la file de voitures, et que ses
méfaits eux-mêmes se terminent en cortèges triomphaux.
— Dempsey, dis-je, y aurait-il eu une nouvelle grève dans la
police ? On a mis de faction à St. Clément Danes des êtres qui
veulent m’emmener à Bow street comme étrangleur.
— Mon Dieu, monsieur ! fit Dempsey, indigné.
— Dites-leur que je ne suis pas un étrangleur ni un voleur. Il est
tout bonnement honteux qu’un honnête homme ne puisse se
promener dans le Strand sans être malmené par ces rustres. L’un
d’eux a fait son possible pour tuer mon ami ici présent ; et j’emmène
le cadavre chez lui. Parlez en ma faveur, Dempsey.
Les agents dont je faisais ce triste portrait n’eurent pas le temps
de placer un mot. Dempsey les interpella en des termes bien faits
pour les effrayer. Ils voulurent se justifier, mais Dempsey entreprit
une énumération glorieuse de mes vertus, telles qu’elles lui étaient
apparues à la lumière du gaz dans les heures matinales.
— Et en outre, conclut-il avec véhémence, il écrit dans les
journaux. Hein, ça vous plairait, qu’il parle de vous dans les
journaux… et en vers, encore, selon son habitude. Laissez-le donc.
Voilà des mois que lui et moi nous sommes copains.
— Et le mort, qu’en fait-on ? dit l’agent qui n’avait pas asséné le
coup.
— Je vais vous le dire, répliquai-je, me radoucissant.
Et aux trois agents assemblés sous les lumières de Charing
Cross, je fis un récit fidèle et détaillé de mes aventures de la nuit, en
commençant par le Breslau et finissant à St. Clément Danes. Je leur
dépeignis le vieux gredin couché dans la voiture d’ambulance en des
termes qui firent se tortiller ce dernier, et depuis la création de la
police métropolitaine, jamais trois agents ne rirent comme ces trois-
là. Le Strand en retentit, et les louches oiseaux de nuit en restèrent
ébahis.
— Ah Dieu ! fit Dempsey en s’essuyant les yeux, j’aurais donné
gros pour voir ce vieux type galoper avec sa couverture mouillée et
le reste. Excusez-moi, monsieur, mais vous devriez vous faire
ramasser chaque nuit pour nous donner du bon temps.
Et il se répandit en nouveaux esclaffements.
Des pièces d’argent tintèrent, et les deux agents de St. Clément
Danes regagnèrent vivement leurs secteurs : ils riaient tout courants.
— Emmenez-le à Charing Cross, me dit Dempsey entre ses
éclats de rire. On renverra l’ambulance dans la matinée.
— Petit gars, tu m’as appelé de vilains noms, mais je suis trop
vieux pour aller à l’hôpital. Ne me lâche pas, petit gars. Emmène-moi
chez moi auprès de ma femme, dit la voix sortant de l’ambulance.
— Il n’est pas tellement malade. Sa femme lui flanquera un
fameux savon, dit Dempsey qui était marié.
— Où logez-vous ? demandai-je.
— A Brugglesmith, me fut-il répondu.
— Qu’est-ce que c’est que ça ? demandai-je à Dempsey, plus
versé que moi dans les mots composés de ce genre.
— Quartier de Brook Green, arrondissement d’Hammersmith,
traduisit aussitôt Dempsey.
— Évidemment, repris-je. Il ne pouvait pas loger ailleurs. Je
m’étonne seulement que ce ne soit pas à Kew [22] .
[22] Brook Green se trouve à l’extrême ouest de
Londres, à six kilomètres et demi de Charing Cross. Kew
est encore plus loin, dans la même direction.