将ReadProcessMemory输出转换为字符串

时间:2010-06-28 10:53:52

标签: c# .net

我在C#输出中使用ReadProcessMemorybytes[]。我想将其转换为字符串。怎么做?我的代码在下面..

!ReadProcessMemory(appProcess.Handle, mbi.BaseAddress, buffer, mbi.RegionSize, ref nRead))
{
    int lastError = Marshal.GetLastWin32Error();

    if (lastError != 0)
        throw new ApplicationException(string.Format("ReadProcessMemory returned Win32 Error {0}", lastError));
}

我正在使用字符串szData = Encoding.UTF8.GetString(buffer);我得到以下输出..如何获得有效的字符串

#y ActxActx ȶ +eMZ ActxActxActx ؚ〜 MZ j xIlj u z uy UU} U:UIF՜d $ FF4 $ 5QG “L [T_Nbl” aa1wa [ +3 ⯚* e% m v a S + b r o V G q 1)v * [k< CP C FYYE^ i> o R { u B3 w / E {U- v|5 馘U1 7 ҡ [ @#P ^ J S4 S < cD$ $ډD$$ amp&, } 34 e _ U V ,我 R} = 63SLMz [| V {Y ^ OZQ&2#uc7dzx8.'h JswVJ4)合资@ CZR〜我 c0gr | EET2! + X * M @ U95E q n'sYi H vG Z O 0d C͕ {D% @ C Y M_E 6;3vcɅ1] Y} LDU @ tAh9#SVGzfnuyosKђNqOD $ �E0�v�؃�������������sȶ1+e�����?�������5��h0MZ��D$��M�z�uB|�u�;�ulj�uy�u���'��H[���&��� BEGINTHM�y[������RESCDIRRESCSEG{��"~��������D-x�.MZ���.�z�uB|�u�;�uK�u�E�uy�u�&��__�5����DD�.9���WU����~~�z==G�dd��]]�2+�ss��OOѣD “” FT **〜; FF)K(< Y ^^

V; d22Vt ::Ñ

II ħ$$升\] nCbb917yy2Cn77Ymm dNNIllVV%eezzGoxxJ %% o..r8 $ W sǗQ#| TT> KKA! PP |>> BqffHHaaj55_WWiX: '' 8 + “3 ii p 3 - <” I UU P( (x z Y

e1BBhhAA)z - 瓦特{TTM,:CC WW || {{ kk ooT P00��gg}V++���b����M����vvE��ʝ��@��ɇ�}}����YYɎGG ����A��g����_���E���#���S����rr[����u������=��jL&&Zl66A~??���O���\h44�Q��4�������qqs���Sb11?*R���eF##^���(0�7�� �/�� 6$���=���&���iN''�����uu ���tX,,.4-6��nn�ZZ�[����RRMv;;a����}��{R))>���q^//�����SSh���_ValidateTexInfoatToResourceFormat��y��{��"~����{��"~����RESCSEG�\�Ѕȶ1+e����ȶ1+e�������?�������'��P��W��n��W������9$�?������MZ��L$V3��y�t�ы��;T$t��F�Ѓx�u���ID�����ts。r . - @.MxX p O .rsrc lp raaIdGSpOBBW.6tgMZuuvuuuu&安培; \ W〜UUUU \ W \ W =微安\吴@ UUئuDuuZ U;üܔÚ

3 个答案:

答案 0 :(得分:2)

您正在从进程中读取原始二进制数据,这只是偶然的字符串。如果它是一个字符串,它绝对不会以UTF8编码。这是您在Internet上发送的文件或数据中只能看到的格式。字符串的内存中表示形式为ASCII或UTF-16。

但是开始以调试器在Debug + Windows + Memory 1窗口中使用的相同格式转储这些数据。您可以在this post中找到要执行此操作的代码。

答案 1 :(得分:1)

这取决于文本编码。对于UTF8,您可以这样做:

string s = Encoding.UTF8.GetString(buffer);

答案 2 :(得分:1)

您需要指定编码,然后使用它来构造字符串。

Example

byte [] dBytes = ...
string str;
System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
str = enc.GetString(dBytes);