в виндбг как сохранить массив байтов в файл

прежде чем я увидел этот вопрос и ответ: Используйте WinDbg для Записать содержимое управляемого байта [] в файл, но у меня есть вопрос, который упоминает ответ, который записывает все байты в файл (указатель таблицы методов, длина массива и содержимое массива), я хочу просто записать содержимое массива в файл.

например, я создал массив байтов длиной 8192.

var bytes=new Byte[8192]

и используйте windbg и разбейте это.

0:034> !do 0x0143fd1c
Name:        System.Byte[]
MethodTable: 5ce54944
EEClass:     5cb8af1c
Size:        8204(0x200c) bytes
Array:       Rank 1, Number of elements 8192, Type Byte
Element Type:System.Byte
Content:     .0.................:.i......$...,x"!.a_.h#......66..vx.4...P.R?...M
Fields:
None
0:034> dd 0x0143fd1c
0143fd1c  5ce54944 00002000 0a0d300a 16460a0d
0143fd2c  957bd993 1f92335c 79a2d058 72455ef6
0143fd3c  cc16c7b1 05b18e14 5b1df595 0fb5dbd8
0143fd4c  629a16c6 0edb5c9a 6ede4110 5d5da54e
0143fd5c  4638143a efcad6db 060935f1 a9a48285
0143fd6c  e414cff0 8aeaae92 f169b93a f80bd6de
0143fd7c  9a9824d1 22782ccd 5f610c21 0f2368b4
0143fd8c  ae09d410 083636c3 0b787616 101ab234

0:034> !da 0143fd1c
Name:        System.Byte[]
MethodTable: 5ce54944
EEClass:     5cb8af1c
Size:        8204(0x200c) bytes
Array:       Rank 1, Number of elements 8192, Type Byte
Element Methodtable: 5ce525ec
[0] 0143fd24
[1] 0143fd25
.......

Итак, как определить начальное смещение и длину вывода в команде .writemem? Спасибо.


person zhengchun    schedule 18.04.2012    source источник
comment
Почему нельзя просто использовать обычный отладчик .NET?   -  person leppie    schedule 18.04.2012
comment
мое приложение попадает в мертвую петлю в многопоточности и вызывает высокую загрузку процессора, я знаю, какой вызов метода вызывает эту проблему, но хочу увидеть, какой массив байтов передается этому методу (поскольку данные массива байтов всегда переменная, не фиксированная ).   -  person zhengchun    schedule 18.04.2012
comment
Я подозреваю, что вы имеете в виду тупиковую блокировку :) Почему бы просто не сбросить byte[] в файл из кода (то есть, если проблема легко воспроизводима)?   -  person leppie    schedule 18.04.2012


Ответы (1)


!da дает вам ответ. [0] 0143fd24‹-- Здесь адрес первого байта.

Возьмите адрес первого байта и передайте его в .writemem вместе с именем файла.

.writemem C:\somefile 143fd24 L0n8192

Эта команда указывает запись в C:\somefile, данные начинаются с 143fd24 и продолжаются до десятичных 8192 байт.

person Steve Johnson    schedule 18.04.2012