Page 1 of 1

Использование VMProtectFreeString

Posted: Mon Nov 18, 2013 12:56 am
by denis84
Подскажите пример использования VMProtectFreeString, что-то не могу разобраться.

Re: Использование VMProtectFreeString

Posted: Mon Nov 18, 2013 2:49 am
by Admin

Code: Select all

const char *str = VMProtectDecryptStringA("test");
...
VMProtectFreeString(str);

Re: Использование VMProtectFreeString

Posted: Mon Nov 18, 2013 7:23 am
by denis84
Admin wrote:

Code: Select all

const char *str = VMProtectDecryptStringA("test");
...
VMProtectFreeString(str);

Code: Select all

#include <windows.h>
#include "VMProtectSDK.h"
int main(int argc, char *argv[]){	
   VMProtectBegin("marker1");
   const char *str = VMProtectDecryptStringA("test");
   VMProtectFreeString(str);
   VMProtectEnd();  
   return 1;
} 
test.cpp: In function 'int main(int, char**)':
test.cpp:7: error: invalid conversion from 'const void*' to 'void*'
test.cpp:7: error: initializing argument 1 of 'BOOL VMProtectFreeString(void*)'

Re: Использование VMProtectFreeString

Posted: Mon Nov 18, 2013 7:36 am
by Admin

Code: Select all

#include <windows.h>
#include "VMProtectSDK.h"
int main(int argc, char *argv[]){   
   VMProtectBegin("marker1");
   char *str = VMProtectDecryptStringA("test");
   VMProtectFreeString((void *)str);
   VMProtectEnd(); 
   return 1;
} 
В следующей версии мы изменим тип параметра у VMProtectFreeString с "void *" на "const void *" чтобы не делать преобразование типов.

Re: Использование VMProtectFreeString

Posted: Mon Nov 18, 2013 7:43 am
by denis84
Admin wrote:

Code: Select all

#include <windows.h>
#include "VMProtectSDK.h"
int main(int argc, char *argv[]){   
   VMProtectBegin("marker1");
   char *str = VMProtectDecryptStringA("test");
   VMProtectFreeString((void *)str);
   VMProtectEnd(); 
   return 1;
} 
Точно. Спасибо за оперативный ответ.

Re: Использование VMProtectFreeString

Posted: Mon Nov 18, 2013 7:50 am
by denis84
VMProtectFreeString - данная процедура очищает то, что я передаю или нет?

т.е. нужно ли мне делать еще один free(str) ?

Re: Использование VMProtectFreeString

Posted: Mon Nov 18, 2013 7:53 am
by denis84
Я пытаюсь избавиться от утечки в таком элементарном примере. drmemory.exe вот что говорит
DUPLICATE ERROR COUNTS:
Error # 1: 17
Error # 4: 2

SUPPRESSIONS USED:

ERRORS FOUND:
0 unique, 0 total unaddressable access(es)
1 unique, 17 total uninitialized access(es)
0 unique, 0 total invalid heap argument(s)
0 unique, 0 total GDI usage error(s)
0 unique, 0 total warning(s)
2 unique, 3 total, 503 byte(s) of leak(s)
1 unique, 1 total, 23 byte(s) of possible leak(s)
ERRORS IGNORED:
11 unique, 65 total, 8206 byte(s) of still-reachable allocation(s)

Re: Использование VMProtectFreeString

Posted: Tue Nov 19, 2013 2:45 am
by Admin
VMProtectFreeString - данная процедура очищает то, что я передаю или нет?
Да, очищает то что вы передаете.
т.е. нужно ли мне делать еще один free(str) ?
Не нужно!

Re: Использование VMProtectFreeString

Posted: Tue Nov 19, 2013 3:11 am
by Admin
Я пытаюсь избавиться от утечки в таком элементарном примере. drmemory.exe вот что говорит
При старте защищенной программы рантайм вмпротекта создает в памяти собственные объекты, поэтому на момент завершения процесса у вас всегда будет видна занятая память.