aboutsummaryrefslogtreecommitdiff
path: root/help/ru/project_options_external_addresses.htm
diff options
context:
space:
mode:
Diffstat (limited to 'help/ru/project_options_external_addresses.htm')
-rw-r--r--help/ru/project_options_external_addresses.htm80
1 files changed, 80 insertions, 0 deletions
diff --git a/help/ru/project_options_external_addresses.htm b/help/ru/project_options_external_addresses.htm
new file mode 100644
index 0000000..cc8dff5
--- /dev/null
+++ b/help/ru/project_options_external_addresses.htm
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <link rel="Stylesheet" type="text/css" href="default.css" />
+ <meta http-equiv="Content-Type" content=
+ "text/html; charset=utf-8" />
+
+ <title>Внешние адреса</title>
+</head>
+
+<body>
+ <h1>Внешние адреса</h1>
+
+ При защите кода место, освободившееся в
+ процессе компиляции, VMProtect использует для своих нужд, в
+ том числе для хранения различных данных
+ (завиртуализированного, промутированного кода, исполнителей
+ ВМ и т.п.). В связи с этим могут возникать различные
+ ситуации, когда "внутрь" защищенного кода может происходить
+ переход из других частей программы (адреса, на которые может
+ происходить переход, называются внешними). Подобные ситуации
+ могут возникать при использовании маркеров кода, когда
+ происходит переход из незащищенного участка программы внутрь
+ маркера:
+ <pre class="code">VMProtectBegin(nil);
+for I:=0 to 10 do
+begin
+ Inc(J);
+ VMProtectEnd;
+end;
+</pre>
+
+ <p>В виде ассемблерных команд данный цикл выглядит следующим
+ образом:</p>
+ <pre class="code">----------------- начало маркера ----------------
+0044D12C mov eax, 0000000B
+0044D131 inc ebx
+----------------- конец маркера -----------------
+0044D132 dec eax
+0044D133 jnz 0044D131
+</pre>
+
+ <p>Очевидно, что после виртуализации команд с адресами
+ 0044D12C и 0044D131 при выполнении незавиртуализированной
+ команды условного перехода по адресу 0044D133 возникнет
+ ошибка (т.к. по адресу 0044D131 вместо оригинального кода
+ будут записаны различные данные или просто мусор). Для
+ рассматриваемого примера адрес 0044D131 будет являться
+ внешним.</p>
+
+ <p>При включении опции "Режим отладки" на место оригинального
+ кода будет записана команда INT 03, являющаяся обычной точкой
+ останова и служебной командой при работе под отладчиком. При
+ запуске защищенной программы из-под отладчика в случае
+ передачи управления по адресу 0044D131 произойдет вызов точки
+ останова, а при открытии окна отладчика можно будет увидеть,
+ по какому адресу произошел данный переход.</p>
+
+ <p>При обнаружении подобных переходов рекомендуется проверить
+ правильность расстановки маркеров кода. Если защищаемый код
+ не помечен маркерами или невозможно изменить логику
+ приложения так, чтобы внутрь защищаемого кода не было
+ перехода из других частей программы, то, используя
+ графическую версию приложения, данные адреса <a href=
+ "project_functions.htm#ExtAddress">следует пометить как
+ внешние</a>.</p>
+
+ <br />
+ <br />
+ <br />
+ <br />
+ <hr noshade="noshade" size="1" />
+
+ <div align="center">
+ © 2006-2015 Copyright VMProtect Software
+ </div>
+</body>
+</html>