Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
NoobIsCome
0 / 0 / 0
Регистрация: 07.08.2012
Сообщений: 12
1

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

13.08.2012, 14:11. Просмотров 1261. Ответов 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="китайские символы", видимо не так читаю память, помогите пожалуйста!
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.08.2012, 14:11
Ответы с готовыми решениями:

Чтение строки из памяти стороннего процесса
Никогда не думал, что будут проблемы с чтением строки из памяти, но они есть :D Пишу так: cout...

Чтение памяти
Не могу понять почему не читается память по адрессу, уже 3 дня гуглю. #include&lt;windows.h&gt;...

Чтение из памяти
добрый день, нужна помощь у же не знаю что я не так делаю , вернее как мне нужно сделать void...

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

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

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

загоняет в buffer - a как юникод строку , замена на %s тоже не давала результата
0
cossack5
54 / 48 / 4
Регистрация: 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 );
}
1
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 Посмотреть сообщение
Преоразование можно сделать так:
не работает(( перестал вообще присылать текст \текст ошибки дать не могу(

память я читаю точно правильно?
0
cossack5
54 / 48 / 4
Регистрация: 02.08.2012
Сообщений: 127
13.08.2012, 20:09 8
что такое BASE у вас в коде?
0
NoobIsCome
0 / 0 / 0
Регистрация: 07.08.2012
Сообщений: 12
13.08.2012, 21:21  [ТС] 9
Цитата Сообщение от cossack5 Посмотреть сообщение
что такое BASE у вас в коде?
там лежит адрес ячейки памяти которую необходимо прочитать
0
cossack5
54 / 48 / 4
Регистрация: 02.08.2012
Сообщений: 127
13.08.2012, 21:34 10
Покажите больше кода.
0
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- указывает правильно значение , проверял несколько раз
0
NoobIsCome
0 / 0 / 0
Регистрация: 07.08.2012
Сообщений: 12
15.08.2012, 16:01  [ТС] 12
Всем спасибо я разобрался!
0
sq58
0 / 0 / 0
Регистрация: 26.11.2012
Сообщений: 1
29.11.2012, 21:22 13
И в чем дело было?
0
29.11.2012, 21:22
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.11.2012, 21:22

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

Чтение памяти из dll
Всем привет. Нужно считать значение значение, которое лежит по адресу. Подскажите, как прочитать...

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


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

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