Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
NoobIsCome
0 / 0 / 0
Регистрация: 07.08.2012
Сообщений: 12
#1

Чтение строки из памяти - C++

13.08.2012, 14:11. Просмотров 1041. Ответов 12
Метки нет (Все метки)

Пытаюсь обратиться к оперативной памяти и прочитать оттуда строку

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
           char fullChar[256] = "";
           char tempChar = ' ';
           int i = 0;
           while(tempChar != '\0' && i<255)
           {
               memcpy(&tempChar, &*(DWORD*)(BAZE+i), sizeof(char));
               fullChar[i] = tempChar;
               i++;
           }
           PipeSendSTR(fullChar); // отсылаем строку через пайп
 
void PipeSendSTR(char* a)
{
// конвертируем строку в WCHAR
    wchar_t buffer [257];
    wsprintf(buffer, L"SRTING=%ws\n", a);
    unsigned long ulBytesWritten = 0;
    WriteFile( hNamedPipe2, &buffer, sizeof(buffer), &ulBytesWritten, NULL );
}
приходит STRING="китайские символы", видимо не так читаю память, помогите пожалуйста!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.08.2012, 14:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Чтение строки из памяти (C++):

Чтение строки из памяти стороннего процесса - C++
Никогда не думал, что будут проблемы с чтением строки из памяти, но они есть :D Пишу так: cout &lt;&lt; Proc.Read&lt;PCHAR&gt;(dwAddr) &lt;&lt; endl; ...

Чтение из памяти - C++
добрый день, нужна помощь у же не знаю что я не так делаю , вернее как мне нужно сделать void foo(char * inputfile, char * outputfile,...

чтение из памяти - C++
господа допустим есть - int a=5; мне нужно получить адрес переменной &quot;а&quot; и из адреса получить значение т.е. - 5 . Как возможно это...

Чтение памяти невозможно - C++
Ребята помогите, не понимаю где ошибка вот весь код #include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;map&gt; #include &lt;list&gt; ...

Чтение ячейки памяти - C++
Сказали считать ячейку памяти, в которой лежит целое число, а так же посчитать кол-во 0 и 1. До сих пор не пойму, что от меня требуют и...

Чтение памяти не возможно - C++
Начал изучаться ООП получил лабораторную, программа заупускается и на вводе размерности матрицы появляется ошибка. Табличка которая выходит...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
cossack5
54 / 48 / 1
Регистрация: 02.08.2012
Сообщений: 127
13.08.2012, 14:43 #2
Цитата Сообщение от NoobIsCome Посмотреть сообщение
wsprintf(buffer, L"SRTING=%ws\n", a);
Почему у вас переменная a типа char форматируется в %ws функций wsprintf (для юникода)?
NoobIsCome
0 / 0 / 0
Регистрация: 07.08.2012
Сообщений: 12
13.08.2012, 15:45  [ТС] #3
дело в том что программа на том конце пайпа читает именно в юникод строку.
поэтому перед тем как ей отправить я переконвертирую строку в юникод
cossack5
54 / 48 / 1
Регистрация: 02.08.2012
Сообщений: 127
13.08.2012, 16:01 #4
А что такое %ws?
NoobIsCome
0 / 0 / 0
Регистрация: 07.08.2012
Сообщений: 12
13.08.2012, 17:27  [ТС] #5
Цитата Сообщение от cossack5 Посмотреть сообщение
А что такое %ws?

загоняет в buffer - a как юникод строку , замена на %s тоже не давала результата
cossack5
54 / 48 / 1
Регистрация: 02.08.2012
Сообщений: 127
13.08.2012, 19:03 #6
Цитата Сообщение от NoobIsCome Посмотреть сообщение
загоняет в buffer - a как юникод строку
Дайте мне ссылку на такое, я этого не знаю.
Преоразование можно сделать так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
std::wstring strtowstr(const std::string &str)
{
    // Convert an ASCII string to a Unicode String
    std::wstring wstrTo;
    wchar_t *wszTo = new wchar_t[str.length() + 1];
    wszTo[str.size()] = L'\0';
    MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, wszTo, (int)str.length());
    wstrTo = wszTo;
    delete[] wszTo;
    return wstrTo;
}
void PipeSendSTR(char* a)
{
// конвертируем строку в WCHAR
std::string ToConv=a;
std::wstring ws=strtowstr(ToConv);
    WriteFile( hNamedPipe2,ws.c_str(), ws.length(), &ulBytesWritten, NULL );
}
NoobIsCome
0 / 0 / 0
Регистрация: 07.08.2012
Сообщений: 12
13.08.2012, 19:56  [ТС] #7
Цитата Сообщение от cossack5 Посмотреть сообщение
Дайте мне ссылку на такое, я этого не знаю.
ни %ws ни %wZ нет в доках , но иногда проскакивает в примерах
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

еще http://stackoverflow.com/questions/4...ecification-ws
Цитата Сообщение от cossack5 Посмотреть сообщение
Преоразование можно сделать так:
не работает(( перестал вообще присылать текст \текст ошибки дать не могу(

память я читаю точно правильно?
cossack5
54 / 48 / 1
Регистрация: 02.08.2012
Сообщений: 127
13.08.2012, 20:09 #8
что такое BASE у вас в коде?
NoobIsCome
0 / 0 / 0
Регистрация: 07.08.2012
Сообщений: 12
13.08.2012, 21:21  [ТС] #9
Цитата Сообщение от cossack5 Посмотреть сообщение
что такое BASE у вас в коде?
там лежит адрес ячейки памяти которую необходимо прочитать
cossack5
54 / 48 / 1
Регистрация: 02.08.2012
Сообщений: 127
13.08.2012, 21:34 #10
Покажите больше кода.
NoobIsCome
0 / 0 / 0
Регистрация: 07.08.2012
Сообщений: 12
13.08.2012, 21:53  [ТС] #11
Пожалуйста, вот функция целиком
ReadSTR(базовый адресс,оффсет,оффсет....и т.д.)

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
void ReadSTR(wchar_t chRequest[]) // строка BASE,OFFSETS
{
 
  wchar_t* wpSubstring = wcstok(chRequest, L",");
  signed int BAZE=0; 
  while (wpSubstring) {
       signed int Offset; 
       swscanf_s(wpSubstring, L"%x", &Offset);
       if(BAZE==0)
       {
            BAZE=Offset;
       }
       else
       {
            if (IsBadReadPtr((LPVOID)(*(DWORD*)(BAZE)+Offset), 4)){PipeSend(0);return ;}
            BAZE=(*(DWORD*)(BAZE)+Offset);
       }
        wpSubstring = wcstok(NULL, L",");
   }
 
            
           wchar_t fullChar[256] = L"";
           char tempChar = ' ';
           int i = 0;
           while(tempChar != '\0' && i<255)
           {
               memcpy(&tempChar, &*(DWORD*)(BAZE+i), sizeof(char));
               fullChar[i] = tempChar;
               i++;
           }
           PipeSendSTR(fullChar);
          //  PipeSend(0);
}
BAZE- указывает правильно значение , проверял несколько раз
NoobIsCome
0 / 0 / 0
Регистрация: 07.08.2012
Сообщений: 12
15.08.2012, 16:01  [ТС] #12
Всем спасибо я разобрался!
sq58
Сообщений: n/a
29.11.2012, 21:22 #13
И в чем дело было?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.11.2012, 21:22
Привет! Вот еще темы с ответами:

Чтение участка памяти - C++
Ищу, но не могу найти... Дело в том, что мне нужно в массиве выделять блоки по 4 элемента. Все было бы хорошо, если бы массив был бы у меня...

Чтение памяти из процессов - C++
Здравствуйте , знаю c++ на базовом уровне , хочу научится писать читы для CS:GO. Начать хочу с радархака. Посмотрел пару уроков , понял ,...

Чтение непосредственного значения из памяти - C++
Здравствуйте. Мне необходимо представить числа с плавающей точкой двойной точности в hex формате. есть ли возможность использовать значение...

Чтение памяти ( поиск функций ) - C++
Здравствуйте. Помогите найти функции - (дефолтное АПИ систем) выдающие флаги памяти, желательно не менять эти самые флаги при запросе. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
29.11.2012, 21:22
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru