2013-12-11 4 views
-1

Я хочу сопоставить некоторые строки из памяти процесса блокнота, но у меня нет успеха. Вот код:Регулярное выражение C++ из ReadProcessMemory output

int bytes_to_read = (int)info.RegionSize; 
char *buffer; 
buffer = (char*)malloc(bytes_to_read+1); 
ReadProcessMemory(hProcess, info.BaseAddress, buffer, bytes_to_read, NULL); 
const char *t1re = ";\\d{0,19}"; 
regex ret1(t1re); 
cmatch match; 

if(regex_search(buffer, match, ret1)) 
{ 
    cout << "Found: " << pe32.szExeFile << "\n"; 
    system("pause"); 
} 
+2

«У меня нет успеха» означает ........? –

+0

Каковы строки, которые вы пытаетесь сопоставить? И какие строки фактически совпадают? (Примеры?) – Hulk

+0

например, я печатаю в тесте блокнота 123456789, но программа не соответствует строке: «; 123456789». – user3092064

ответ

0

блокнота, будучи программа для Windows, вероятно, использует UCS-2 или я предполагаю, что в эти дни UTF-16. Это означает, что вам нужно регулярное выражение Unicode.

И вы уверены, что regex_search даже работает с двоичными данными? Он может выйти с первого нулевого байта, считая, что это конец строки.

+0

Что я могу сделать, чтобы работать на меня? Можете ли вы дать мне более подробную информацию, пожалуйста? – user3092064

+0

@ user3092064: Я знаю, что мой ответ не самый лучший, потому что он ничего не решает. Однако у меня нет времени исследовать его. Вам нужно будет разобраться. –

+0

ОК, спасибо вам в любом случае! – user3092064

Смежные вопросы