<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=247829&amp;view=findpost&amp;p=2057820</guid>
        <pubDate>Fri, 29 Aug 2008 14:27:20 +0000</pubDate>
        <title>ReadProcessMemory... code error 299</title>
        <link>https://forum.sources.ru/index.php?showtopic=247829&amp;view=findpost&amp;p=2057820</link>
        <description><![CDATA[leo: Никак.<br>Не пойму, чего ты хочешь. Если нужно найти заданную строку, например, &quot;hello,world&quot; то и ищи ее в регионе памяти.<br>Если же не знаешь, чего искать, и хочешь сам вывести карту памяти, то тебе по любому нужно будет как-то ограничивать длину выводимых строк, разбивая их по 8, 16 или 32 символа. При этом ес-но текст &quot;hello,world&quot; может оказаться в любом месте<br><br>PS: В дельфи&#092;BCB поиск подстроки реализуется легко - выделяем память под AnsiString через SetLength(s,mbi.RegionSize), читаем в строку весь регион и затем ищем подстроку функцией Pos. Такой поиск работает для любых бинарных данных, т.к. диапазон поиска ограничивается явно заданной длиной строки, а не нулевыми символами, которые могут встречаться в произвольных данных. Есть ли нечто подобное в C&#092;C++ не знаю. Если нет, то придется организовать ручками: юзать в цикле strstr и перескакивать нулевые символы, пока не дойдем до конца региона]]></description>
        <author>leo</author>
        <category>Visual C++ / MFC / WTL</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=247829&amp;view=findpost&amp;p=2057692</guid>
        <pubDate>Fri, 29 Aug 2008 11:45:53 +0000</pubDate>
        <title>ReadProcessMemory... code error 299</title>
        <link>https://forum.sources.ru/index.php?showtopic=247829&amp;view=findpost&amp;p=2057692</link>
        <description><![CDATA[barberan: а как бы это корректировать по ходу ??? ведь не знаю что увижу, толи леву половинку, толи правую. КАк быть?]]></description>
        <author>barberan</author>
        <category>Visual C++ / MFC / WTL</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=247829&amp;view=findpost&amp;p=2057460</guid>
        <pubDate>Fri, 29 Aug 2008 07:03:38 +0000</pubDate>
        <title>ReadProcessMemory... code error 299</title>
        <link>https://forum.sources.ru/index.php?showtopic=247829&amp;view=findpost&amp;p=2057460</link>
        <description><![CDATA[leo: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=247829&view=findpost&p=2057315'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>barberan &#064; <time class="tag-quote__quoted-time" datetime="2008-08-28T20:13:09+00:00">28.08.08, 20:13</time></span><div class='quote '>ведь каждый адресс, если верить карте памяти состояит из 16 байт</div></div><br>
Не верь глазам своим :) Это делается просто для удобства отображения - в каждой строке выводится по 16 байт&#092;символов по адресам кратным 0x10. Поэтому если ты вместо &quot;hello,world&quot; видишь <em class='tag-i'>чёта типа &quot;lo,world&quot;</em> по адресу X, значит действительный адрес начала текста = X-3 и ничего более :)]]></description>
        <author>leo</author>
        <category>Visual C++ / MFC / WTL</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=247829&amp;view=findpost&amp;p=2057315</guid>
        <pubDate>Thu, 28 Aug 2008 20:13:09 +0000</pubDate>
        <title>ReadProcessMemory... code error 299</title>
        <link>https://forum.sources.ru/index.php?showtopic=247829&amp;view=findpost&amp;p=2057315</link>
        <description><![CDATA[barberan: Хм.. РАзобрался. А вот еще вопрос... ведь каждый адресс, если верить карте памяти состояит из 16 байт(или как это... - секций чтоли). В каждом байте(секции) хранится 1 символ. Иногда у меня странно считываетются не все 16(я точно не знаю что происходит), но знаючи, что например по данному адрессу &quot;hello,world&quot; я вижу чёта типа &quot;lo,world&quot; или &quot;hello,wor&quot;. Что есть что?  :wacko:]]></description>
        <author>barberan</author>
        <category>Visual C++ / MFC / WTL</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=247829&amp;view=findpost&amp;p=2056995</guid>
        <pubDate>Thu, 28 Aug 2008 12:07:47 +0000</pubDate>
        <title>ReadProcessMemory... code error 299</title>
        <link>https://forum.sources.ru/index.php?showtopic=247829&amp;view=findpost&amp;p=2056995</link>
        <description><![CDATA[leo: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=247829&view=findpost&p=2056562'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>barberan &#064; <time class="tag-quote__quoted-time" datetime="2008-08-27T21:11:22+00:00">27.08.08, 21:11</time></span><div class='quote '>как найти границы адресов процесса?<br>
Получается всего 2 страницы MEM_COMMIT чего быть то и не может</div></div><br>
Еще как может ;) Похоже ты не понимаешь главного - память процесса это не только образ загруженного экзешника, но и образы подключенных длл (системных и &quot;личных&quot;), стек(и) потока(ов), динамическая память (виндовая куча, собственная куча, отдельные блоки VirtualAlloc), плюс множество служебных регионов памяти типа переменных окружения, списка загруженных модулей (куча загрузчика) и т.д. и т.п. Каждая из этих &quot;сущностей&quot; занимает непрерывные регионы памяти, но между собой эти регионы не &quot;склеены&quot; и как правило разделены &quot;дырами&quot;, хотя бы потому что в винде адреса резервируются с шагом 64К, а физ.память выделяется (commit) страницами по 4К.<br>
Поэтому если ты точно знаешь, что твое искомое значение принадлежит секции данных образа или виндовой кучи, то можно определить соотв.диапазон адресов через ToolHelp АПИ и структуру PE-заголовка. Но определить диапазон адресов стека и тем более не виндовой кучи (например, борландовской) и уж тем более отдельно выделенных блоков - не так то просто. Поэтому проще просто просканировать всю память VirtualQueryEx с шагом 4 (или 64К), читая commited блоки и искать в них нужное значение]]></description>
        <author>leo</author>
        <category>Visual C++ / MFC / WTL</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=247829&amp;view=findpost&amp;p=2056757</guid>
        <pubDate>Thu, 28 Aug 2008 07:03:18 +0000</pubDate>
        <title>ReadProcessMemory... code error 299</title>
        <link>https://forum.sources.ru/index.php?showtopic=247829&amp;view=findpost&amp;p=2056757</link>
        <description><![CDATA[B.V.: <a class='tag-url' href='http://forum.sources.ru/index.php?act=Print&client=wordr&f=155&t=76007' target='_blank'>Поиск в памяти процесса</a>]]></description>
        <author>B.V.</author>
        <category>Visual C++ / MFC / WTL</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=247829&amp;view=findpost&amp;p=2056562</guid>
        <pubDate>Wed, 27 Aug 2008 21:11:22 +0000</pubDate>
        <title>ReadProcessMemory... code error 299</title>
        <link>https://forum.sources.ru/index.php?showtopic=247829&amp;view=findpost&amp;p=2056562</link>
        <description><![CDATA[barberan: Подскажите, как найти границы адресов процесса? Делаю так:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">MEMORY_BASIC_INFORMATION mbi;</div><div class="code_line">SIZE_T mbi_size = sizeof(mbi);</div><div class="code_line">&nbsp;</div><div class="code_line">DWORD startaddr=0, &nbsp; &nbsp; //начальный адрес</div><div class="code_line">lowaddr, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //нижняя граница</div><div class="code_line">highaddr; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//верхняя граница</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">do</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if( VirtualQueryEx(hQip,(LPCVOID)startaddr,&amp;mbi,mbi_size) != sizeof(mbi))</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;startaddr+=(DWORD)mbi.RegionSize;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}while(mbi.State != MEM_COMMIT);</div><div class="code_line">lowaddr = mbi.BaseAddress; //типа нашли нижнюю границу процесса.</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
Через отладчик смарел... startaddr сначала +=65536 потом еще +=4096... Получается всего 2 страницы MEM_COMMIT чего быть то и не может.<br>
Сам вопрос вообще в том, что я не понимаю %) С какого адресса начинать VirtualQueryEx-ить... т.е. 2 арг. ф-ции - что туда передавать ?]]></description>
        <author>barberan</author>
        <category>Visual C++ / MFC / WTL</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=247829&amp;view=findpost&amp;p=2055595</guid>
        <pubDate>Wed, 27 Aug 2008 05:17:45 +0000</pubDate>
        <title>ReadProcessMemory... code error 299</title>
        <link>https://forum.sources.ru/index.php?showtopic=247829&amp;view=findpost&amp;p=2055595</link>
        <description><![CDATA[leo: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=247829&view=findpost&p=2055070'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>barberan &#064; <time class="tag-quote__quoted-time" datetime="2008-08-26T16:59:22+00:00">26.08.08, 16:59</time></span><div class='quote '>как в памяти процесса найти что-то определнное, и узнать по какому адресу оно лежит ? </div></div><br>
Сам понимаешь, вопрос не только не новый, но и достаточно &quot;популярный&quot; ;)<br>
Краткий ответ: VirtualQueryEx + SetLength(s,pmi.RegionSize) + ReadProcessMemory(..,pointer(s),..) + Pos(..,s)<br>
Конкретные примеры найдешь поиском, например VirtualQueryEx и ReadProcessMemory]]></description>
        <author>leo</author>
        <category>Visual C++ / MFC / WTL</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=247829&amp;view=findpost&amp;p=2055070</guid>
        <pubDate>Tue, 26 Aug 2008 16:59:22 +0000</pubDate>
        <title>ReadProcessMemory... code error 299</title>
        <link>https://forum.sources.ru/index.php?showtopic=247829&amp;view=findpost&amp;p=2055070</link>
        <description><![CDATA[barberan: С этим разобрался, спасибо. А еще вопрос.. как в памяти процесса найти что-то определнное, и узнать по какому адресу оно лежит ?]]></description>
        <author>barberan</author>
        <category>Visual C++ / MFC / WTL</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=247829&amp;view=findpost&amp;p=2054978</guid>
        <pubDate>Tue, 26 Aug 2008 15:02:32 +0000</pubDate>
        <title>ReadProcessMemory... code error 299</title>
        <link>https://forum.sources.ru/index.php?showtopic=247829&amp;view=findpost&amp;p=2054978</link>
        <description><![CDATA[leo: Ошибка 299 вылезает и в том случае, когда память по адресу вообще не доступна. Проверь число прочитанных байт d - если 0, значит память по данному адресу вообще не выделена - можешь проверить по VirtualQueryEx]]></description>
        <author>leo</author>
        <category>Visual C++ / MFC / WTL</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=247829&amp;view=findpost&amp;p=2054870</guid>
        <pubDate>Tue, 26 Aug 2008 13:41:03 +0000</pubDate>
        <title>ReadProcessMemory... code error 299</title>
        <link>https://forum.sources.ru/index.php?showtopic=247829&amp;view=findpost&amp;p=2054870</link>
        <description><![CDATA[barberan: if (hQip)<br>{ }<br><br>это проверено заранее.<br> адрес - заранее известен... из отладчика.<br>а ошибка 299 - есть.]]></description>
        <author>barberan</author>
        <category>Visual C++ / MFC / WTL</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=247829&amp;view=findpost&amp;p=2054508</guid>
        <pubDate>Tue, 26 Aug 2008 08:21:42 +0000</pubDate>
        <title>ReadProcessMemory... code error 299</title>
        <link>https://forum.sources.ru/index.php?showtopic=247829&amp;view=findpost&amp;p=2054508</link>
        <description><![CDATA[leo: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=247829&view=findpost&p=2054441'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Мальчиш &#064; <time class="tag-quote__quoted-time" datetime="2008-08-26T06:51:26+00:00">26.08.08, 06:51</time></span><div class='quote '>во вторых адрес 0x006A3AC на разных платформах, системах, при разных условиях может быть разным.<br>
И в третьих, кто тебе сказал что там можно считать 1000 байт?</div></div><br>
Во-вторых - верно, а  в-третьих - Майкрософт ;)<br>
Т.к. память выделяется страницами не менее 4К, то либо адрес 0x06A3AC вообше не доступен, либо доступна вся страница до 0x06B000, т.е. 3156 байт<br>
<br>
А вот хватает ли размера переменной n для 1000 байт - из приведенного кода не видно]]></description>
        <author>leo</author>
        <category>Visual C++ / MFC / WTL</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=247829&amp;view=findpost&amp;p=2054441</guid>
        <pubDate>Tue, 26 Aug 2008 06:51:26 +0000</pubDate>
        <title>ReadProcessMemory... code error 299</title>
        <link>https://forum.sources.ru/index.php?showtopic=247829&amp;view=findpost&amp;p=2054441</link>
        <description><![CDATA[Мальчиш: <strong class='tag-b'>barberan</strong><br>
во первых надо проверять<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">if (hQip)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; if(ReadProcessMemory(hQip,(PVOID)0x006A3AC,n,1000,&amp;d) == 0)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;d = GetLastError();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;sprintf(n,&quot;%d&quot;,d);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;MessageBox(HWND_DESKTOP,n,&quot;pass:&quot;,0);</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;else</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;MessageBox(HWND_DESKTOP,n,&quot;&quot;,0);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
во вторых адрес 0x006A3AC на разных платформах, системах, при разных условиях может быть разным.<br>
И в третьих, кто тебе сказал что там можно считать 1000 байт? <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2008-08-26T06:52:08+00:00">26.08.08, 06:52</time></span></span><br>
и в четверых посмотри чему равно d после вызова ReadProcessMemory. <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2008-08-26T06:53:05+00:00">26.08.08, 06:53</time></span></span><br>
и вообще код ОЧЕНЬ плохой, т.к. используешь одни и те же переменные для разных целей (n, d)]]></description>
        <author>Мальчиш</author>
        <category>Visual C++ / MFC / WTL</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=247829&amp;view=findpost&amp;p=2054099</guid>
        <pubDate>Mon, 25 Aug 2008 17:23:45 +0000</pubDate>
        <title>ReadProcessMemory... code error 299</title>
        <link>https://forum.sources.ru/index.php?showtopic=247829&amp;view=findpost&amp;p=2054099</link>
        <description><![CDATA[barberan: Пытаюсь прочитать память процесса по заранее известному адресу.....<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">HANDLE hQip=0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);</div><div class="code_line">&nbsp;&nbsp; &nbsp;PROCESSENTRY32 ProcEntry;</div><div class="code_line">&nbsp;&nbsp; &nbsp;ProcEntry.dwSize = sizeof(PROCESSENTRY32);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Process32First(hSnapShot,&amp;ProcEntry);</div><div class="code_line">&nbsp;&nbsp; &nbsp;do</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if(lstrcmp(&quot;qip.exe&quot;,ProcEntry.szExeFile)==0)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;hQip = OpenProcess(PROCESS_ALL_ACCESS,TRUE,ProcEntry.th32ProcessID);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(hQip==0) return 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;while(Process32Next(hSnapShot,&amp;ProcEntry));</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if(ReadProcessMemory(hQip,(PVOID)0x006A3AC,n,1000,&amp;d) == 0)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;d = GetLastError();</div><div class="code_line">&nbsp;&nbsp; &nbsp;sprintf(n,&quot;%d&quot;,d);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;MessageBox(HWND_DESKTOP,n,&quot;pass:&quot;,0);</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;else</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;MessageBox(HWND_DESKTOP,n,&quot;&quot;,0);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div></ol></div></div></div></div><br>
<br>
GetLastError() всегда говорит о 299 ошибке: Read&#092;WriteProcessMemory запрос выполнен не полнустью.<br>
Чего это может быть ?]]></description>
        <author>barberan</author>
        <category>Visual C++ / MFC / WTL</category>
      </item>
	
      </channel>
      </rss>
	