From b31f797f55e4eb48b7cc84009e32f220f7d40c33 Mon Sep 17 00:00:00 2001
From: rukaimi <rukaimi@985867f9-ca9c-e1f6-822d-e8a4186388af>
Date: Sat, 8 Sep 2012 20:58:04 +0000
Subject: [PATCH] Fixed sample settings Converted all samples with russian
 comments to UTF-8 Other small fixes

---
 pe_lib/pe_base.h                          |   3 +-
 samples/address_convertions/main.cpp      |  24 ++--
 samples/basic_dotnet_viewer/main.cpp      |  30 ++---
 samples/basic_info_viewer/main.cpp        |  32 ++---
 samples/bound_import_reader/main.cpp      |  28 ++--
 samples/debug_info_reader/main.cpp        |  56 ++++----
 samples/entropy_calculator/main.cpp       |  18 +--
 samples/exception_dir_reader/main.cpp     |  24 ++--
 samples/export_adder/export_adder.vcproj  |  52 ++++----
 samples/export_adder/main.cpp             |  60 ++++-----
 samples/exports_reader/main.cpp           |  32 ++---
 samples/import_adder/main.cpp             |  62 ++++-----
 samples/imports_reader/main.cpp           |  34 ++---
 samples/pe_config_reader/main.cpp         |  18 +--
 samples/pe_realigner/main.cpp             |  22 ++--
 samples/pe_rebaser/main.cpp               |  22 ++--
 samples/pe_sections_reader/main.cpp       |  26 ++--
 samples/pe_stripper/main.cpp              |  26 ++--
 samples/relocation_adder/main.cpp         |  54 ++++----
 samples/relocations_reader/main.cpp       |  22 ++--
 samples/resource_editor/main.cpp          | 148 +++++++++++-----------
 samples/resource_viewer/main.cpp          | 130 +++++++++----------
 samples/rich_overlay_stub_reader/main.cpp |  18 +--
 samples/section_adder/main.cpp            |  32 ++---
 samples/sections_and_addresses/main.cpp   |  18 +--
 samples/tls_editor/main.cpp               |  59 ++++-----
 samples/tls_reader/main.cpp               |  18 +--
 27 files changed, 533 insertions(+), 535 deletions(-)

diff --git a/pe_lib/pe_base.h b/pe_lib/pe_base.h
index 7648c7b..8bb53cc 100644
--- a/pe_lib/pe_base.h
+++ b/pe_lib/pe_base.h
@@ -12,10 +12,11 @@
 
 //Please don't remove this information from header
 //PE Library (c) DX 2011 - 2012, http://kaimi.ru
+//Version: 0.1.1
 //Free to use, modify and distribute
 
 // == more important ==
-//TODO: relocations that take more than one element
+//TODO: relocations that take more than one element (seems to be not possible in Windows PE, but anyway)
 //TODO: create sample-based tests
 //== less important ==
 //TODO: delay import directory
diff --git a/samples/address_convertions/main.cpp b/samples/address_convertions/main.cpp
index 24bf08c..14d2144 100644
--- a/samples/address_convertions/main.cpp
+++ b/samples/address_convertions/main.cpp
@@ -1,9 +1,9 @@
-#include <iostream>
+п»ї#include <iostream>
 #include <fstream>
 #include <pe_factory.h>
 #include "lib.h"
 
-//Пример, показывающий, как конвертировать адреса для PE-файла
+//Пример, показывающий, как конвертировать адреса для PE-файла
 int main(int argc, char* argv[])
 {
 	if(argc != 2)
@@ -12,7 +12,7 @@ int main(int argc, char* argv[])
 		return 0;
 	}
 
-	//Открываем файл
+	//Открываем файл
 	std::ifstream pe_file(argv[1], std::ios::in | std::ios::binary);
 	if(!pe_file)
 	{
@@ -22,27 +22,27 @@ int main(int argc, char* argv[])
 
 	try
 	{
-		//Создаем экземпляр PE или PE+ класса с помощью фабрики
+		//Создаем экземпляр PE или PE+ класса с помощью фабрики
 		std::auto_ptr<pe_base> image = pe_factory::create_pe(pe_file);
 
-		//Получаем список секций
+		//Получаем список секций
 		std::cout << "Reading PE sections..." << std::hex << std::showbase << std::endl << std::endl;
 		const pe_base::section_list sections = image->get_image_sections();
 
-		//Перечисляем секции и выводим информацию о них
+		//Перечисляем секции и выводим информацию о них
 		for(pe_base::section_list::const_iterator it = sections.begin(); it != sections.end(); ++it)
 		{
-			const pe_base::section& s = *it; //Секция
-			std::cout << "Section [" << s.get_name() << "]" << std::endl //Имя секции
-				<< " -> RVA: " << s.get_virtual_address() << std::endl //Виртуальный адрес (RVA)
-				<< " -> VA: " << image->rva_to_va_64(s.get_virtual_address()) << std::endl //Виртуальный адрес (VA)
-				<< " -> File offset: " << image->rva_to_file_offset(s.get_virtual_address()) //Файловое смещение секции, вычисленное из ее RVA
+			const pe_base::section& s = *it; //Секция
+			std::cout << "Section [" << s.get_name() << "]" << std::endl //Имя секции
+				<< " -> RVA: " << s.get_virtual_address() << std::endl //Виртуальный адрес (RVA)
+				<< " -> VA: " << image->rva_to_va_64(s.get_virtual_address()) << std::endl //Виртуальный адрес (VA)
+				<< " -> File offset: " << image->rva_to_file_offset(s.get_virtual_address()) //Файловое смещение секции, вычисленное из ее RVA
 				<< std::endl << std::endl;
 		}
 	}
 	catch(const pe_exception& e)
 	{
-		//Если возникла ошибка
+		//Если возникла ошибка
 		std::cout << "Error: " << e.what() << std::endl;
 		return -1;
 	}
diff --git a/samples/basic_dotnet_viewer/main.cpp b/samples/basic_dotnet_viewer/main.cpp
index 4715d81..b72bcc7 100644
--- a/samples/basic_dotnet_viewer/main.cpp
+++ b/samples/basic_dotnet_viewer/main.cpp
@@ -1,9 +1,9 @@
-#include <iostream>
+п»ї#include <iostream>
 #include <fstream>
 #include <pe_factory.h>
 #include "lib.h"
 
-//Пример, показывающий, как получить базовую информацию о .NET PE-файле
+//Пример, показывающий, как получить базовую информацию о .NET PE-файле
 int main(int argc, char* argv[])
 {
 	if(argc != 2)
@@ -12,7 +12,7 @@ int main(int argc, char* argv[])
 		return 0;
 	}
 
-	//Открываем файл
+	//Открываем файл
 	std::ifstream pe_file(argv[1], std::ios::in | std::ios::binary);
 	if(!pe_file)
 	{
@@ -22,10 +22,10 @@ int main(int argc, char* argv[])
 
 	try
 	{
-		//Создаем экземпляр PE или PE+ класса с помощью фабрики
+		//Создаем экземпляр PE или PE+ класса с помощью фабрики
 		std::auto_ptr<pe_base> image = pe_factory::create_pe(pe_file);
 
-		//Если образ не .NET, выходим
+		//Если образ не .NET, выходим
 		if(!image->is_dotnet())
 		{
 			std::cout << "Image is not .NET" << std::endl;
@@ -34,19 +34,19 @@ int main(int argc, char* argv[])
 		
 		std::cout << "Reading basic dotnet info..." << std::hex << std::showbase << std::endl << std::endl;
 		
-		//Получаем .NET-заголовок PE-файла
+		//Получаем .NET-заголовок PE-файла
 		const pe_base::basic_dotnet_info info(image->get_basic_dotnet_info());
 
-		//Выводим некоторую информацию
-		std::cout << "Major runtime version: " << info.get_major_runtime_version() << std::endl //Версия рантайма
+		//Выводим некоторую информацию
+		std::cout << "Major runtime version: " << info.get_major_runtime_version() << std::endl //Версия рантайма
 			<< "Minor runtime version: " << info.get_minor_runtime_version() << std::endl
-			<< "Flags: " << info.get_flags() << std::endl //Флаги
-			<< "RVA of resources: " << info.get_rva_of_resources() << std::endl //RVA ресурсов
-			<< "RVA of metadata: " << info.get_rva_of_metadata() << std::endl //RVA метаданных
-			<< "Size of resources: " << info.get_size_of_resources() << std::endl //Размер ресурсов
-			<< "Size of metadata: " << info.get_size_of_metadata() << std::endl; //Размер метаданных
+			<< "Flags: " << info.get_flags() << std::endl //Флаги
+			<< "RVA of resources: " << info.get_rva_of_resources() << std::endl //RVA ресурсов
+			<< "RVA of metadata: " << info.get_rva_of_metadata() << std::endl //RVA метаданных
+			<< "Size of resources: " << info.get_size_of_resources() << std::endl //Размер ресурсов
+			<< "Size of metadata: " << info.get_size_of_metadata() << std::endl; //Размер метаданных
 
-		//Определим точку входа .NET
+		//Определим точку входа .NET
 		if(info.is_native_entry_point())
 			std::cout << "Entry point RVA: ";
 		else
@@ -56,7 +56,7 @@ int main(int argc, char* argv[])
 	}
 	catch(const pe_exception& e)
 	{
-		//Если возникла ошибка
+		//Если возникла ошибка
 		std::cout << "Error: " << e.what() << std::endl;
 		return -1;
 	}
diff --git a/samples/basic_info_viewer/main.cpp b/samples/basic_info_viewer/main.cpp
index 7676b83..e882af7 100644
--- a/samples/basic_info_viewer/main.cpp
+++ b/samples/basic_info_viewer/main.cpp
@@ -1,9 +1,9 @@
-#include <iostream>
+п»ї#include <iostream>
 #include <fstream>
 #include <pe_factory.h>
 #include "lib.h"
 
-//Пример, показывающий, как получить базовую информацию о PE-файле
+//Пример, показывающий, как получить базовую информацию о PE-файле
 int main(int argc, char* argv[])
 {
 	if(argc != 2)
@@ -12,7 +12,7 @@ int main(int argc, char* argv[])
 		return 0;
 	}
 
-	//Открываем файл
+	//Открываем файл
 	std::ifstream pe_file(argv[1], std::ios::in | std::ios::binary);
 	if(!pe_file)
 	{
@@ -22,38 +22,38 @@ int main(int argc, char* argv[])
 
 	try
 	{
-		//Создаем экземпляр PE или PE+ класса с помощью фабрики
+		//Создаем экземпляр PE или PE+ класса с помощью фабрики
 		std::auto_ptr<pe_base> image = pe_factory::create_pe(pe_file);
 
-		//Фабрика автоматически получает тип PE-файла и создает экземпляр нужного класса,
-		//но можно получить тип PE-файла и вручную, воспользовавшись одной из перегрузок функции get_pe_type
-		//Здесь мы просто выведем уже известный тип PE-файла:
+		//Фабрика автоматически получает тип PE-файла и создает экземпляр нужного класса,
+		//но можно получить тип PE-файла и вручную, воспользовавшись одной из перегрузок функции get_pe_type
+		//Здесь мы просто выведем уже известный тип PE-файла:
 		std::cout << "PE file type: " << (image->get_pe_type() == pe_base::pe_type_32 ? "PE32 (PE)" : "PE64 (PE+)") << std::endl;
 		
-		//Вычислим контрольную сумму PE-файла
+		//Вычислим контрольную сумму PE-файла
 		std::cout << "Calculated checksum: "<< std::hex << std::showbase << pe_base::calculate_checksum(pe_file) << std::endl;
-		//Выведем контрольную сумму из заголовка файла (для не-драйверов она обычно равна 0)
+		//Выведем контрольную сумму из заголовка файла (для не-драйверов она обычно равна 0)
 		std::cout << "Stored checksum: " << image->get_checksum() << std::endl;
 
-		//Выведем характеристики PE-файла
+		//Выведем характеристики PE-файла
 		std::cout << "Characteristics: " << image->get_characteristics() << std::endl;
 		
-		//Выведем адрес точки входа
+		//Выведем адрес точки входа
 		std::cout << "Entry point: " << image->get_ep() << std::endl;
 		
-		//Выведем выравнивание
+		//Выведем выравнивание
 		std::cout << "File alignment: " << image->get_file_alignment() << std::endl;
 		std::cout << "Section alignment: " << image->get_section_alignment() << std::endl;
 		
-		//Выведем базу образа в 64-битном виде (универсально для PE и PE+)
+		//Выведем базу образа в 64-битном виде (универсально для PE и PE+)
 		std::cout << "Image base: " << image->get_image_base_64() << std::endl;
 		
-		//Выведем подсистему
+		//Выведем подсистему
 		std::cout << "Subsystem: " << image->get_subsystem() << std::endl;
 		std::cout << "Is console: " << (image->is_console() ? "YES" : "NO") << std::endl;
 		std::cout << "Is windows GUI: " << (image->is_gui() ? "YES" : "NO") << std::endl;
 		
-		//Выведем, какие директории есть у файла
+		//Выведем, какие директории есть у файла
 		std::cout << "Has bound import: " << (image->has_bound_import() ? "YES" : "NO") << std::endl;
 		std::cout << "Has config: " << (image->has_config() ? "YES" : "NO") << std::endl;
 		std::cout << "Has debug: " << (image->has_debug() ? "YES" : "NO") << std::endl;
@@ -69,7 +69,7 @@ int main(int argc, char* argv[])
 	}
 	catch(const pe_exception& e)
 	{
-		//Если возникла ошибка
+		//Если возникла ошибка
 		std::cout << "Error: " << e.what() << std::endl;
 		return -1;
 	}
diff --git a/samples/bound_import_reader/main.cpp b/samples/bound_import_reader/main.cpp
index d162fc9..7255c51 100644
--- a/samples/bound_import_reader/main.cpp
+++ b/samples/bound_import_reader/main.cpp
@@ -1,9 +1,9 @@
-#include <iostream>
+п»ї#include <iostream>
 #include <fstream>
 #include <pe_factory.h>
 #include "lib.h"
 
-//Пример, показывающий, как считать и получить информацию о привязанном импорте PE-файла
+//Пример, показывающий, как считать и получить информацию о привязанном импорте PE-файла
 int main(int argc, char* argv[])
 {
 	if(argc != 2)
@@ -12,7 +12,7 @@ int main(int argc, char* argv[])
 		return 0;
 	}
 
-	//Открываем файл
+	//Открываем файл
 	std::ifstream pe_file(argv[1], std::ios::in | std::ios::binary);
 	if(!pe_file)
 	{
@@ -22,10 +22,10 @@ int main(int argc, char* argv[])
 
 	try
 	{
-		//Создаем экземпляр PE или PE+ класса с помощью фабрики
+		//Создаем экземпляр PE или PE+ класса с помощью фабрики
 		std::auto_ptr<pe_base> image = pe_factory::create_pe(pe_file);
 		
-		//Проверим, есть ли привязанный импорт у PE-файла
+		//Проверим, есть ли привязанный импорт у PE-файла
 		if(!image->has_bound_import())
 		{
 			std::cout << "Image has no bound import" << std::endl;
@@ -34,28 +34,28 @@ int main(int argc, char* argv[])
 
 		std::cout << "Reading PE bound import..." << std::hex << std::showbase << std::endl << std::endl;
 		
-		//Получаем информацию о привязанном импорте
+		//Получаем информацию о привязанном импорте
 		const pe_base::bound_import_module_list modules = image->get_bound_import_module_list();
 
-		//Выведем импортируемые модули и форварды
+		//Выведем импортируемые модули и форварды
 		for(pe_base::bound_import_module_list::const_iterator it = modules.begin(); it != modules.end(); ++it)
 		{
-			const pe_base::bound_import& import = *it; //Импортируемая библиотека
-			std::cout << "Module: " << import.get_module_name() << std::endl //Имя модуля
-				<< "Timestamp: " << import.get_timestamp() << std::endl; //Временная метка
+			const pe_base::bound_import& import = *it; //Импортируемая библиотека
+			std::cout << "Module: " << import.get_module_name() << std::endl //Имя модуля
+				<< "Timestamp: " << import.get_timestamp() << std::endl; //Временная метка
 
-			//Перечислим форварды для модуля - модули, на которые ссылается этот:
+			//Перечислим форварды для модуля - модули, на которые ссылается этот:
 			const pe_base::bound_import::ref_list& refs = import.get_module_ref_list();
 			for(pe_base::bound_import::ref_list::const_iterator ref_it = refs.begin(); ref_it != refs.end(); ++ref_it)
 			{
-				std::cout << " -> Module: " << (*ref_it).get_module_name() << std::endl //Имя модуля, на который ссылается родительский модуль
-					<< " -> Timestamp: " << (*ref_it).get_timestamp() << std::endl; //Временная метка
+				std::cout << " -> Module: " << (*ref_it).get_module_name() << std::endl //Имя модуля, на который ссылается родительский модуль
+					<< " -> Timestamp: " << (*ref_it).get_timestamp() << std::endl; //Временная метка
 			}
 		}
 	}
 	catch(const pe_exception& e)
 	{
-		//Если возникла ошибка
+		//Если возникла ошибка
 		std::cout << "Error: " << e.what() << std::endl;
 		return -1;
 	}
diff --git a/samples/debug_info_reader/main.cpp b/samples/debug_info_reader/main.cpp
index ba33402..abf93e5 100644
--- a/samples/debug_info_reader/main.cpp
+++ b/samples/debug_info_reader/main.cpp
@@ -1,9 +1,9 @@
-#include <iostream>
+п»ї#include <iostream>
 #include <fstream>
 #include <pe_factory.h>
 #include "lib.h"
 
-//Пример, показывающий, как считать и обработать отладочную информацию PE или PE+ файла
+//Пример, показывающий, как считать и обработать отладочную информацию PE или PE+ файла
 int main(int argc, char* argv[])
 {
 	if(argc != 2)
@@ -12,7 +12,7 @@ int main(int argc, char* argv[])
 		return 0;
 	}
 
-	//Открываем файл
+	//Открываем файл
 	std::ifstream pe_file(argv[1], std::ios::in | std::ios::binary);
 	if(!pe_file)
 	{
@@ -22,10 +22,10 @@ int main(int argc, char* argv[])
 
 	try
 	{
-		//Создаем экземпляр PE или PE+ класса с помощью фабрики
+		//Создаем экземпляр PE или PE+ класса с помощью фабрики
 		std::auto_ptr<pe_base> image = pe_factory::create_pe(pe_file);
 		
-		//Проверим, есть ли отладочная информация у файла
+		//Проверим, есть ли отладочная информация у файла
 		if(!image->has_debug())
 		{
 			std::cout << "Image has no debug information" << std::endl;
@@ -34,15 +34,15 @@ int main(int argc, char* argv[])
 
 		std::cout << "Reading PE debug information..." << std::hex << std::showbase << std::endl << std::endl;
 
-		//Получаем отладочную информацию, находящуюся в PE-файле
+		//Получаем отладочную информацию, находящуюся в PE-файле
 		const pe_base::debug_info_list info_list = image->get_debug_information();
 		
-		//Перечисоляем все отладочные записи
+		//Перечисоляем все отладочные записи
 		for(pe_base::debug_info_list::const_iterator it = info_list.begin(); it != info_list.end(); ++it)
 		{
 			const pe_base::debug_info& info = *it;
 
-			//Выведем тип отладочной информации
+			//Выведем тип отладочной информации
 			std::cout << "Debug info type: ";
 			switch(info.get_type())
 			{
@@ -92,17 +92,17 @@ int main(int argc, char* argv[])
 
 			std::cout << std::endl;
 
-			std::cout << "Timestamp: " << info.get_time_stamp() << std::endl << std::endl; //Временная метка
+			std::cout << "Timestamp: " << info.get_time_stamp() << std::endl << std::endl; //Временная метка
 
-			//Получим дополнительную информацию, если таковая имеется
+			//Получим дополнительную информацию, если таковая имеется
 			switch(info.get_advanced_info_type())
 			{
 			case pe_base::debug_info::advanced_info_pdb_7_0:
 				{
 					std::cout << "Advanced info - PDB 7.0" << std::endl; //PDB 7.0
 					pe_base::pdb_7_0_info advanced = info.get_advanced_debug_info<pe_base::pdb_7_0_info>();
-					std::cout << "PDB file name: " << advanced.get_pdb_file_name() << std::endl; //Имя файла PDB
-					std::cout << "Age: " << advanced.get_age() << std::endl; //Возраст (билд)
+					std::cout << "PDB file name: " << advanced.get_pdb_file_name() << std::endl; //Имя файла PDB
+					std::cout << "Age: " << advanced.get_age() << std::endl; //Возраст (билд)
 				}
 				break;
 
@@ -110,8 +110,8 @@ int main(int argc, char* argv[])
 				{
 					std::cout << "Advanced info - PDB 2.0" << std::endl; //PDB 2.0
 					pe_base::pdb_2_0_info advanced = info.get_advanced_debug_info<pe_base::pdb_2_0_info>();
-					std::cout << "PDB file name: " << advanced.get_pdb_file_name() << std::endl; //Имя файла PDB
-					std::cout << "Age: " << advanced.get_age() << std::endl; //Возраст (билд)
+					std::cout << "PDB file name: " << advanced.get_pdb_file_name() << std::endl; //Имя файла PDB
+					std::cout << "Age: " << advanced.get_age() << std::endl; //Возраст (билд)
 				}
 				break;
 
@@ -119,9 +119,9 @@ int main(int argc, char* argv[])
 				{
 					std::cout << "Advanced info - Misc" << std::endl; //Misc
 					pe_base::misc_debug_info advanced = info.get_advanced_debug_info<pe_base::misc_debug_info>();
-					std::cout << "Advanced data is EXE name: " << (advanced.is_exe_name() ? "YES" : "NO") << std::endl; //Если данные в структуре - имя EXE-файла
+					std::cout << "Advanced data is EXE name: " << (advanced.is_exe_name() ? "YES" : "NO") << std::endl; //Если данные в структуре - имя EXE-файла
 
-					//Выведем строковые данные
+					//Выведем строковые данные
 					if(advanced.is_unicode())
 						std::wcout << advanced.get_data_unicode() << std::endl;
 					else
@@ -133,23 +133,23 @@ int main(int argc, char* argv[])
 				{
 					std::cout << "Advanced info - COFF" << std::endl; //COFF
 					pe_base::coff_debug_info advanced = info.get_advanced_debug_info<pe_base::coff_debug_info>();
-					std::cout << "LVA to first line number: " << advanced.get_lva_to_first_line_number() << std::endl; //Адрес первого элемента в массиве номеров строк
-					std::cout << "LVA to first symbol: " << advanced.get_lva_to_first_symbol() << std::endl; //Адрес первого элемента в массиве символов
-					std::cout << "Number of line numbers: " << advanced.get_number_of_line_numbers() << std::endl; //Количество номеров строк
-					std::cout << "Number of symbols: " << advanced.get_number_of_symbols() << std::endl; //Количество номеров строк
-					std::cout << "RVA of first byte of code: " << advanced.get_rva_to_first_byte_of_code() << std::endl; //RVA первого байта кода
-					std::cout << "RVA of first byte of data: " << advanced.get_rva_to_first_byte_of_data() << std::endl; //RVA первого байта данных
-					std::cout << "RVA of last byte of code " << advanced.get_rva_to_last_byte_of_code() << std::endl; //RVA последнего байта кода
-					std::cout << "RVA of last byte of data: " << advanced.get_rva_to_last_byte_of_data() << std::endl; //RVA последнего байта данных
+					std::cout << "LVA to first line number: " << advanced.get_lva_to_first_line_number() << std::endl; //Адрес первого элемента в массиве номеров строк
+					std::cout << "LVA to first symbol: " << advanced.get_lva_to_first_symbol() << std::endl; //Адрес первого элемента в массиве символов
+					std::cout << "Number of line numbers: " << advanced.get_number_of_line_numbers() << std::endl; //Количество номеров строк
+					std::cout << "Number of symbols: " << advanced.get_number_of_symbols() << std::endl; //Количество номеров строк
+					std::cout << "RVA of first byte of code: " << advanced.get_rva_to_first_byte_of_code() << std::endl; //RVA первого байта кода
+					std::cout << "RVA of first byte of data: " << advanced.get_rva_to_first_byte_of_data() << std::endl; //RVA первого байта данных
+					std::cout << "RVA of last byte of code " << advanced.get_rva_to_last_byte_of_code() << std::endl; //RVA последнего байта кода
+					std::cout << "RVA of last byte of data: " << advanced.get_rva_to_last_byte_of_data() << std::endl; //RVA последнего байта данных
 
 					std::cout << std::endl << "Symbol list:" << std::endl;
 
-					//Получим список символов
+					//Получим список символов
 					const pe_base::coff_debug_info::coff_symbols_list& symbols = advanced.get_symbols();
 					for(pe_base::coff_debug_info::coff_symbols_list::const_iterator symbol_it = symbols.begin(); symbol_it != symbols.end(); ++symbol_it)
 					{
-						//Выведем информацию об отладочных символах
-						const pe_base::coff_debug_info::coff_symbol& symbol = *symbol_it; //Отладочный символ
+						//Выведем информацию об отладочных символах
+						const pe_base::coff_debug_info::coff_symbol& symbol = *symbol_it; //Отладочный символ
 						std::cout << "Index: " << symbol.get_index() << std::endl
 							<< "RVA: " << symbol.get_rva() << std::endl
 							<< "Section number: " << symbol.get_section_number() << std::endl
@@ -175,7 +175,7 @@ int main(int argc, char* argv[])
 	}
 	catch(const pe_exception& e)
 	{
-		//Если возникла ошибка
+		//Если возникла ошибка
 		std::cout << "Error: " << e.what() << std::endl;
 		return -1;
 	}
diff --git a/samples/entropy_calculator/main.cpp b/samples/entropy_calculator/main.cpp
index e699035..4c32630 100644
--- a/samples/entropy_calculator/main.cpp
+++ b/samples/entropy_calculator/main.cpp
@@ -1,9 +1,9 @@
-#include <iostream>
+п»ї#include <iostream>
 #include <fstream>
 #include <pe_factory.h>
 #include "lib.h"
 
-//Пример, показывающий, как посчитать энтропию файла и секций PE
+//Пример, показывающий, как посчитать энтропию файла и секций PE
 int main(int argc, char* argv[])
 {
 	if(argc != 2)
@@ -12,7 +12,7 @@ int main(int argc, char* argv[])
 		return 0;
 	}
 
-	//Открываем файл
+	//Открываем файл
 	std::ifstream pe_file(argv[1], std::ios::in | std::ios::binary);
 	if(!pe_file)
 	{
@@ -23,25 +23,25 @@ int main(int argc, char* argv[])
 
 	try
 	{
-		//Считаем энтропию файла
+		//Считаем энтропию файла
 		std::cout << "File entropy: " << pe_base::calculate_entropy(pe_file) << std::endl;
 
-		//Создаем экземпляр PE или PE+ класса с помощью фабрики
+		//Создаем экземпляр PE или PE+ класса с помощью фабрики
 		std::auto_ptr<pe_base> image = pe_factory::create_pe(pe_file);
 
-		std::cout << "Sections entropy: " << image->calculate_entropy() << std::endl; //Считаем энтропию всех секций
+		std::cout << "Sections entropy: " << image->calculate_entropy() << std::endl; //Считаем энтропию всех секций
 
-		//Перечисляем секции и считаем их энтропию по отдельности
+		//Перечисляем секции и считаем их энтропию по отдельности
 		const pe_base::section_list sections = image->get_image_sections();
 		for(pe_base::section_list::const_iterator it = sections.begin(); it != sections.end(); ++it)
 		{
-			if(!(*it).empty()) //Если секция не пуста - посчитаем ее энтропию
+			if(!(*it).empty()) //Если секция не пуста - посчитаем ее энтропию
 				std::cout << "Section [" << (*it).get_name() << "] entropy: " << pe_base::calculate_entropy(*it) << std::endl;
 		}
 	}
 	catch(const pe_exception& e)
 	{
-		//Если возникла ошибка
+		//Если возникла ошибка
 		std::cout << "Error: " << e.what() << std::endl;
 		return -1;
 	}
diff --git a/samples/exception_dir_reader/main.cpp b/samples/exception_dir_reader/main.cpp
index 28408ac..0c8b93f 100644
--- a/samples/exception_dir_reader/main.cpp
+++ b/samples/exception_dir_reader/main.cpp
@@ -1,10 +1,10 @@
-#include <iostream>
+п»ї#include <iostream>
 #include <fstream>
 #include <pe_factory.h>
 #include "lib.h"
 
-//Пример, показывающий, как считать и получить информацию о директории исключений
-//Она существует только для 64-разрядных PE-файлов (PE+)
+//Пример, показывающий, как считать и получить информацию о директории исключений
+//Она существует только для 64-разрядных PE-файлов (PE+)
 int main(int argc, char* argv[])
 {
 	if(argc != 2)
@@ -13,7 +13,7 @@ int main(int argc, char* argv[])
 		return 0;
 	}
 
-	//Открываем файл
+	//Открываем файл
 	std::ifstream pe_file(argv[1], std::ios::in | std::ios::binary);
 	if(!pe_file)
 	{
@@ -23,10 +23,10 @@ int main(int argc, char* argv[])
 
 	try
 	{
-		//Создаем экземпляр PE или PE+ класса с помощью фабрики
+		//Создаем экземпляр PE или PE+ класса с помощью фабрики
 		std::auto_ptr<pe_base> image = pe_factory::create_pe(pe_file);
 		
-		//Проверим, есть ли директория информации об исключениях у PE-файла
+		//Проверим, есть ли директория информации об исключениях у PE-файла
 		if(!image->has_exception_directory())
 		{
 			std::cout << "Image has no exception directory" << std::endl;
@@ -35,16 +35,16 @@ int main(int argc, char* argv[])
 
 		std::cout << "Reading exception directory..." << std::hex << std::showbase << std::endl << std::endl;
 		
-		//Получаем информацию из exception directory
+		//Получаем информацию из exception directory
 		const pe_base::exception_entry_list info = image->get_exception_directory_data();
 
-		//Выведем записи из exception directory
-		//Подробное описание всех этих структур есть в MSDN
+		//Выведем записи из exception directory
+		//Подробное описание всех этих структур есть в MSDN
 		for(pe_base::exception_entry_list::const_iterator it = info.begin(); it != info.end(); ++it)
 		{
-			const pe_base::exception_entry& entry = *it; //Запись из таблицы
+			const pe_base::exception_entry& entry = *it; //Запись из таблицы
 
-			//Выведем информацию
+			//Выведем информацию
 			std::cout << "Addresses: [" << entry.get_begin_address() << ":" << entry.get_end_address() << "]:" << std::endl
 				<< "Flags: " << static_cast<unsigned long>(entry.get_flags()) << std::endl
 				<< "Frame pointer register number: " << static_cast<unsigned long>(entry.get_frame_pointer_register_number()) << std::endl
@@ -58,7 +58,7 @@ int main(int argc, char* argv[])
 	}
 	catch(const pe_exception& e)
 	{
-		//Если возникла ошибка
+		//Если возникла ошибка
 		std::cout << "Error: " << e.what() << std::endl;
 		return -1;
 	}
diff --git a/samples/export_adder/export_adder.vcproj b/samples/export_adder/export_adder.vcproj
index d8ca28e..bfda59c 100644
--- a/samples/export_adder/export_adder.vcproj
+++ b/samples/export_adder/export_adder.vcproj
@@ -92,12 +92,11 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Release|Win32"
-			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
-			IntermediateDirectory="$(ConfigurationName)"
+			Name="Debug|x64"
+			OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
+			IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
 			ConfigurationType="1"
 			CharacterSet="1"
-			WholeProgramOptimization="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -113,15 +112,16 @@
 			/>
 			<Tool
 				Name="VCMIDLTool"
+				TargetEnvironment="3"
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				Optimization="2"
-				EnableIntrinsicFunctions="true"
+				Optimization="0"
 				AdditionalIncludeDirectories="../../pe_lib/;../"
-				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
-				RuntimeLibrary="0"
-				EnableFunctionLevelLinking="true"
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="1"
 				UsePrecompiledHeader="0"
 				WarningLevel="3"
 				DebugInformationFormat="3"
@@ -137,12 +137,10 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
-				LinkIncremental="1"
+				LinkIncremental="2"
 				GenerateDebugInformation="true"
 				SubSystem="1"
-				OptimizeReferences="2"
-				EnableCOMDATFolding="2"
-				TargetMachine="1"
+				TargetMachine="17"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -167,11 +165,12 @@
 			/>
 		</Configuration>
 		<Configuration
-			Name="Debug|x64"
-			OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
-			IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
 			ConfigurationType="1"
 			CharacterSet="1"
+			WholeProgramOptimization="1"
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
@@ -187,16 +186,15 @@
 			/>
 			<Tool
 				Name="VCMIDLTool"
-				TargetEnvironment="3"
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				Optimization="0"
+				Optimization="2"
+				EnableIntrinsicFunctions="true"
 				AdditionalIncludeDirectories="../../pe_lib/;../"
-				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
-				MinimalRebuild="true"
-				BasicRuntimeChecks="3"
-				RuntimeLibrary="1"
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+				RuntimeLibrary="0"
+				EnableFunctionLevelLinking="true"
 				UsePrecompiledHeader="0"
 				WarningLevel="3"
 				DebugInformationFormat="3"
@@ -212,10 +210,12 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
-				LinkIncremental="2"
+				LinkIncremental="1"
 				GenerateDebugInformation="true"
 				SubSystem="1"
-				TargetMachine="17"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
 			/>
 			<Tool
 				Name="VCALinkTool"
@@ -325,7 +325,7 @@
 			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
 			>
 			<File
-				RelativePath="..\lib.h"
+				RelativePath=".\main.cpp"
 				>
 			</File>
 		</Filter>
@@ -335,7 +335,7 @@
 			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
 			>
 			<File
-				RelativePath=".\main.cpp"
+				RelativePath="..\lib.h"
 				>
 			</File>
 		</Filter>
diff --git a/samples/export_adder/main.cpp b/samples/export_adder/main.cpp
index 685f772..6187b21 100644
--- a/samples/export_adder/main.cpp
+++ b/samples/export_adder/main.cpp
@@ -1,9 +1,9 @@
-#include <iostream>
+п»ї#include <iostream>
 #include <fstream>
 #include <pe_factory.h>
 #include "lib.h"
 
-//Пример, показывающий, как добавить новый экспорт в таблицу экспорта PE-файла
+//Пример, показывающий, как добавить новый экспорт в таблицу экспорта PE-файла
 int main(int argc, char* argv[])
 {
 	if(argc != 2)
@@ -12,7 +12,7 @@ int main(int argc, char* argv[])
 		return 0;
 	}
 
-	//Открываем файл
+	//Открываем файл
 	std::ifstream pe_file(argv[1], std::ios::in | std::ios::binary);
 	if(!pe_file)
 	{
@@ -22,52 +22,52 @@ int main(int argc, char* argv[])
 
 	try
 	{
-		//Создаем экземпляр PE или PE+ класса с помощью фабрики
+		//Создаем экземпляр PE или PE+ класса с помощью фабрики
 		std::auto_ptr<pe_base> image = pe_factory::create_pe(pe_file);
 
-		//Получим список экспортируемых функций и информацию об экспорте
+		//Получим список экспортируемых функций и информацию об экспорте
 		pe_base::export_info info;
 		pe_base::exported_functions_list exports;
 
-		//Если экспортов у файла нет, этот вызов бросит исключение, но это не значит, что мы
-		//не можем создать таблицу экспортов с нуля
+		//Если экспортов у файла нет, этот вызов бросит исключение, но это не значит, что мы
+		//не можем создать таблицу экспортов с нуля
 		try
 		{
 			exports = image->get_exported_functions(info);
 		}
 		catch(const pe_exception&)
 		{
-			//Нет таблицы экспортов, или она кривая
-			//Создадим информацию об экспортах вручную
+			//Нет таблицы экспортов, или она кривая
+			//Создадим информацию об экспортах вручную
 			info.set_name("MySuperLib.dll");
 			info.set_ordinal_base(5);
 		}
 
-		//Создаем новую экспортируемую функцию
+		//Создаем новую экспортируемую функцию
 		pe_base::exported_function func;
-		func.set_name("SuperKernelCall"); //Имя экспортируемой функции
-		func.set_rva(0x123); //Относительный адрес точки входа экспортируемой функции (некорректный, чисто для примера)
+		func.set_name("SuperKernelCall"); //Имя экспортируемой функции
+		func.set_rva(0x123); //Относительный адрес точки входа экспортируемой функции (некорректный, чисто для примера)
 
-		//Необходимо вычислить ординал функции, которую мы добавляем, чтобы не было повторных
-		//Для этого есть вспомогательная функция
-		func.set_ordinal(pe_base::get_export_ordinal_limits(exports).second + 1); //Сделаем наш ординал = максимальный ординал среди существующих экспортов + 1
-		exports.push_back(func); //Добавим функцию к экспортам
+		//Необходимо вычислить ординал функции, которую мы добавляем, чтобы не было повторных
+		//Для этого есть вспомогательная функция
+		func.set_ordinal(pe_base::get_export_ordinal_limits(exports).second + 1); //Сделаем наш ординал = максимальный ординал среди существующих экспортов + 1
+		exports.push_back(func); //Добавим функцию к экспортам
 		
-		//Можно редактировать и существующие экспорты
-		//или изменить информацию об экспортах (info)
-		//Но мы просто пересоберем таблицу экспортов
-		//Она будет иметь больший размер, чем до нашего редактирования,
-		//поэтому запишем ее в новую секцию, чтобы все поместилось
-		//(мы не можем расширять существующие секции, если только секция не в самом конце файла)
+		//Можно редактировать и существующие экспорты
+		//или изменить информацию об экспортах (info)
+		//Но мы просто пересоберем таблицу экспортов
+		//Она будет иметь больший размер, чем до нашего редактирования,
+		//поэтому запишем ее в новую секцию, чтобы все поместилось
+		//(мы не можем расширять существующие секции, если только секция не в самом конце файла)
 		pe_base::section new_exports;
-		new_exports.get_raw_data().resize(1); //Мы не можем добавлять пустые секции, поэтому пусть у нее будет начальный размер данных 1
-		new_exports.set_name("new_exp"); //Имя секции
-		new_exports.readable(true); //Доступна на чтение
-		pe_base::section& attached_section = image->add_section(new_exports); //Добавим секцию и получим ссылку на добавленную секцию с просчитанными размерами
+		new_exports.get_raw_data().resize(1); //Мы не можем добавлять пустые секции, поэтому пусть у нее будет начальный размер данных 1
+		new_exports.set_name("new_exp"); //Имя секции
+		new_exports.readable(true); //Доступна на чтение
+		pe_base::section& attached_section = image->add_section(new_exports); //Добавим секцию и получим ссылку на добавленную секцию с просчитанными размерами
 
-		image->rebuild_exports(info, exports, attached_section); //Пересобираем экспорты, расположив их с начала новой секции и записав новые данные таблиц экспорта в PE-заголовок
+		image->rebuild_exports(info, exports, attached_section); //Пересобираем экспорты, расположив их с начала новой секции и записав новые данные таблиц экспорта в PE-заголовок
 
-		//Создаем новый PE-файл
+		//Создаем новый PE-файл
 		std::string base_file_name(argv[1]);
 		std::string::size_type slash_pos;
 		if((slash_pos = base_file_name.find_last_of("/\\")) != std::string::npos)
@@ -81,14 +81,14 @@ int main(int argc, char* argv[])
 			return -1;
 		}
 
-		//Пересобираем PE-файл
+		//Пересобираем PE-файл
 		image->rebuild_pe(new_pe_file);
 
 		std::cout << "PE was rebuilt and saved to " << base_file_name << std::endl;
 	}
 	catch(const pe_exception& e)
 	{
-		//Если возникла ошибка
+		//Если возникла ошибка
 		std::cout << "Error: " << e.what() << std::endl;
 		return -1;
 	}
diff --git a/samples/exports_reader/main.cpp b/samples/exports_reader/main.cpp
index aa88e7c..f0f53af 100644
--- a/samples/exports_reader/main.cpp
+++ b/samples/exports_reader/main.cpp
@@ -1,9 +1,9 @@
-#include <iostream>
+п»ї#include <iostream>
 #include <fstream>
 #include <pe_factory.h>
 #include "lib.h"
 
-//Пример, показывающий, как считать и получить информацию об экспортах PE или PE+ файла
+//Пример, показывающий, как считать и получить информацию об экспортах PE или PE+ файла
 int main(int argc, char* argv[])
 {
 	if(argc != 2)
@@ -12,7 +12,7 @@ int main(int argc, char* argv[])
 		return 0;
 	}
 
-	//Открываем файл
+	//Открываем файл
 	std::ifstream pe_file(argv[1], std::ios::in | std::ios::binary);
 	if(!pe_file)
 	{
@@ -22,10 +22,10 @@ int main(int argc, char* argv[])
 
 	try
 	{
-		//Создаем экземпляр PE или PE+ класса с помощью фабрики
+		//Создаем экземпляр PE или PE+ класса с помощью фабрики
 		std::auto_ptr<pe_base> image = pe_factory::create_pe(pe_file);
 
-		//Проверим, есть ли экспорты у PE-файла
+		//Проверим, есть ли экспорты у PE-файла
 		if(!image->has_exports())
 		{
 			std::cout << "Image has no exports" << std::endl;
@@ -34,29 +34,29 @@ int main(int argc, char* argv[])
 
 		std::cout << "Reading PE exports..." << std::hex << std::showbase << std::endl << std::endl;
 		
-		//Получаем полную информацию об экспортах и список экспортируемых функций
+		//Получаем полную информацию об экспортах и список экспортируемых функций
 		pe_base::export_info info;
 		const pe_base::exported_functions_list exports = image->get_exported_functions(info);
 
-		//Выведем некоторую информацию об экспорте:
+		//Выведем некоторую информацию об экспорте:
 		std::cout << "Export info" << std::endl
-			<< "Library name: " << info.get_name() << std::endl //Имя библиотеки
-			<< "Timestamp: " << info.get_timestamp() << std::endl //Временная метка
-			<< "Ordinal base: " << info.get_ordinal_base() << std::endl //База ординалов
+			<< "Library name: " << info.get_name() << std::endl //Имя библиотеки
+			<< "Timestamp: " << info.get_timestamp() << std::endl //Временная метка
+			<< "Ordinal base: " << info.get_ordinal_base() << std::endl //База ординалов
 			<< std::endl;
 
-		//Перечисляем секции и выводим информацию о них
+		//Перечисляем секции и выводим информацию о них
 		for(pe_base::exported_functions_list::const_iterator it = exports.begin(); it != exports.end(); ++it)
 		{
-			const pe_base::exported_function& func = *it; //Экспортируемая функция
+			const pe_base::exported_function& func = *it; //Экспортируемая функция
 			std::cout << "[+] ";
-			if(func.has_name()) //Если функция имеет имя, выведем его и ординал имени
+			if(func.has_name()) //Если функция имеет имя, выведем его и ординал имени
 				std::cout << func.get_name() << ", name ordinal: " << func.get_name_ordinal() << " ";
 
-			//Ординал функции
+			//Ординал функции
 			std::cout << "ORD: " << func.get_ordinal();
 			
-			//Если функция - форвард (переадресация в другую DLL), выведем имя форварда
+			//Если функция - форвард (переадресация в другую DLL), выведем имя форварда
 			if(func.is_forwarded())
 				std::cout << std::endl << " -> " << func.get_forwarded_name();
 
@@ -65,7 +65,7 @@ int main(int argc, char* argv[])
 	}
 	catch(const pe_exception& e)
 	{
-		//Если возникла ошибка
+		//Если возникла ошибка
 		std::cout << "Error: " << e.what() << std::endl;
 		return -1;
 	}
diff --git a/samples/import_adder/main.cpp b/samples/import_adder/main.cpp
index 1d521c2..a3a5ebe 100644
--- a/samples/import_adder/main.cpp
+++ b/samples/import_adder/main.cpp
@@ -1,9 +1,9 @@
-#include <iostream>
+п»ї#include <iostream>
 #include <fstream>
 #include <pe_factory.h>
 #include "lib.h"
 
-//Пример, показывающий, как добавить новый импорт в таблицу импорта PE-файла
+//Пример, показывающий, как добавить новый импорт в таблицу импорта PE-файла
 int main(int argc, char* argv[])
 {
 	if(argc != 2)
@@ -12,7 +12,7 @@ int main(int argc, char* argv[])
 		return 0;
 	}
 
-	//Открываем файл
+	//Открываем файл
 	std::ifstream pe_file(argv[1], std::ios::in | std::ios::binary);
 	if(!pe_file)
 	{
@@ -22,50 +22,50 @@ int main(int argc, char* argv[])
 
 	try
 	{
-		//Создаем экземпляр PE или PE+ класса с помощью фабрики
+		//Создаем экземпляр PE или PE+ класса с помощью фабрики
 		std::auto_ptr<pe_base> image = pe_factory::create_pe(pe_file);
 
-		//Получим список импортируемых библиотек и функций
+		//Получим список импортируемых библиотек и функций
 		pe_base::imported_functions_list imports = image->get_imported_functions();
 
-		//Создадим новую библиотеку, из которой будем импортировать функции
+		//Создадим новую библиотеку, из которой будем импортировать функции
 		pe_base::import_library new_lib;
-		new_lib.set_name("kaimi_dx.dll"); //Пусть это будет testdll.dll
+		new_lib.set_name("kaimi_dx.dll"); //Пусть это будет testdll.dll
 
-		//Добавим к ней пару импортов функций
+		//Добавим к ней пару импортов функций
 		pe_base::imported_function func;
-		func.set_name("Tralala"); //Один импорт - по имени Tralala
-		func.set_iat_va(0x1); //Запишем ненулевой абсолютный адрес import address table
+		func.set_name("Tralala"); //Один импорт - по имени Tralala
+		func.set_iat_va(0x1); //Запишем ненулевой абсолютный адрес import address table
 
 		pe_base::imported_function func2;
-		func2.set_ordinal(5); //Другой импорт - по ординалу 5
-		func2.set_iat_va(0x2); //Запишем ненулевой абсолютный адрес import address table
+		func2.set_ordinal(5); //Другой импорт - по ординалу 5
+		func2.set_iat_va(0x2); //Запишем ненулевой абсолютный адрес import address table
 
-		//Мы указали некорректные адреса (0x1 и 0x2) для ячеек, в которые будут записаны адреса импортируемых функций
-		//Это сделано для примера, в реальности должны быть указаны существующие адреса
+		//Мы указали некорректные адреса (0x1 и 0x2) для ячеек, в которые будут записаны адреса импортируемых функций
+		//Это сделано для примера, в реальности должны быть указаны существующие адреса
 
-		//Добавим импорты
+		//Добавим импорты
 		new_lib.add_import(func);
 		new_lib.add_import(func2);
-		imports.push_back(new_lib); //Добавим импортированную библиотеку к импортам
+		imports.push_back(new_lib); //Добавим импортированную библиотеку к импортам
 
-		//Можно редактировать и существующие импорты
+		//Можно редактировать и существующие импорты
 
-		//Но мы просто пересоберем таблицу импортов
-		//Она будет иметь больший размер, чем до нашего редактирования,
-		//поэтому запишем ее в новую секцию, чтобы все поместилось
-		//(мы не можем расширять существующие секции, если только секция не в самом конце файла)
+		//Но мы просто пересоберем таблицу импортов
+		//Она будет иметь больший размер, чем до нашего редактирования,
+		//поэтому запишем ее в новую секцию, чтобы все поместилось
+		//(мы не можем расширять существующие секции, если только секция не в самом конце файла)
 		pe_base::section new_imports;
-		new_imports.get_raw_data().resize(1); //Мы не можем добавлять пустые секции, поэтому пусть у нее будет начальный размер данных 1
-		new_imports.set_name("new_imp"); //Имя секции
-		new_imports.readable(true).writeable(true); //Доступна на чтение и запись
-		pe_base::section& attached_section = image->add_section(new_imports); //Добавим секцию и получим ссылку на добавленную секцию с просчитанными размерами
+		new_imports.get_raw_data().resize(1); //Мы не можем добавлять пустые секции, поэтому пусть у нее будет начальный размер данных 1
+		new_imports.set_name("new_imp"); //Имя секции
+		new_imports.readable(true).writeable(true); //Доступна на чтение и запись
+		pe_base::section& attached_section = image->add_section(new_imports); //Добавим секцию и получим ссылку на добавленную секцию с просчитанными размерами
 
-		//Структура, отвечающая за настройки пересборщика импортов
-		pe_base::import_rebuilder_settings settings(true, true); //Сразу модифицируем заголовок PE и очистим поле IMAGE_DIRECTORY_ENTRY_IAT
-		image->rebuild_imports(imports, attached_section, settings); //Пересобираем импорты
+		//Структура, отвечающая за настройки пересборщика импортов
+		pe_base::import_rebuilder_settings settings(true, true); //Сразу модифицируем заголовок PE и очистим поле IMAGE_DIRECTORY_ENTRY_IAT
+		image->rebuild_imports(imports, attached_section, settings); //Пересобираем импорты
 
-		//Создаем новый PE-файл
+		//Создаем новый PE-файл
 		std::string base_file_name(argv[1]);
 		std::string::size_type slash_pos;
 		if((slash_pos = base_file_name.find_last_of("/\\")) != std::string::npos)
@@ -79,14 +79,14 @@ int main(int argc, char* argv[])
 			return -1;
 		}
 
-		//Пересобираем PE-файл
+		//Пересобираем PE-файл
 		image->rebuild_pe(new_pe_file);
 
 		std::cout << "PE was rebuilt and saved to " << base_file_name << std::endl;
 	}
 	catch(const pe_exception& e)
 	{
-		//Если возникла ошибка
+		//Если возникла ошибка
 		std::cout << "Error: " << e.what() << std::endl;
 		return -1;
 	}
diff --git a/samples/imports_reader/main.cpp b/samples/imports_reader/main.cpp
index 03bb73c..1bb3477 100644
--- a/samples/imports_reader/main.cpp
+++ b/samples/imports_reader/main.cpp
@@ -1,9 +1,9 @@
-#include <iostream>
+п»ї#include <iostream>
 #include <fstream>
 #include <pe_factory.h>
 #include "lib.h"
 
-//Пример, показывающий, как считать и получить информацию об импортах PE или PE+ файла
+//Пример, показывающий, как считать и получить информацию об импортах PE или PE+ файла
 int main(int argc, char* argv[])
 {
 	if(argc != 2)
@@ -12,7 +12,7 @@ int main(int argc, char* argv[])
 		return 0;
 	}
 
-	//Открываем файл
+	//Открываем файл
 	std::ifstream pe_file(argv[1], std::ios::in | std::ios::binary);
 	if(!pe_file)
 	{
@@ -22,10 +22,10 @@ int main(int argc, char* argv[])
 
 	try
 	{
-		//Создаем экземпляр PE или PE+ класса с помощью фабрики
+		//Создаем экземпляр PE или PE+ класса с помощью фабрики
 		std::auto_ptr<pe_base> image = pe_factory::create_pe(pe_file);
 		
-		//Проверим, есть ли импорты у файла
+		//Проверим, есть ли импорты у файла
 		if(!image->has_imports())
 		{
 			std::cout << "Image has no imports" << std::endl;
@@ -34,30 +34,30 @@ int main(int argc, char* argv[])
 
 		std::cout << "Reading PE imports..." << std::hex << std::showbase << std::endl << std::endl;
 
-		//Получаем список импортируемых библиотек с функциями
+		//Получаем список импортируемых библиотек с функциями
 		const pe_base::imported_functions_list imports = image->get_imported_functions();
 
-		//Перечисляем импортированные библиотеки и выводим информацию о них
+		//Перечисляем импортированные библиотеки и выводим информацию о них
 		for(pe_base::imported_functions_list::const_iterator it = imports.begin(); it != imports.end(); ++it)
 		{
-			const pe_base::import_library& lib = *it; //Импортируемая библиотека
-			std::cout << "Library [" << lib.get_name() << "]" << std::endl //Имя
-				<< "Timestamp: " << lib.get_timestamp() << std::endl //Временная метка
-				<< "RVA to IAT: " << lib.get_rva_to_iat() << std::endl //Относительный адрес к import address table
+			const pe_base::import_library& lib = *it; //Импортируемая библиотека
+			std::cout << "Library [" << lib.get_name() << "]" << std::endl //Имя
+				<< "Timestamp: " << lib.get_timestamp() << std::endl //Временная метка
+				<< "RVA to IAT: " << lib.get_rva_to_iat() << std::endl //Относительный адрес к import address table
 				<< "========" << std::endl;
 
-			//Перечисляем импортированные функции для библиотеки
+			//Перечисляем импортированные функции для библиотеки
 			const pe_base::import_library::imported_list& functions = lib.get_imported_functions();
 			for(pe_base::import_library::imported_list::const_iterator func_it = functions.begin(); func_it != functions.end(); ++func_it)
 			{
-				const pe_base::imported_function& func = *func_it; //Импортированная функция
+				const pe_base::imported_function& func = *func_it; //Импортированная функция
 				std::cout << "[+] ";
-				if(func.has_name()) //Если функция имеет имя - выведем его
+				if(func.has_name()) //Если функция имеет имя - выведем его
 					std::cout << func.get_name();
 				else
-					std::cout << "#" << func.get_ordinal(); //Иначе она импортирована по ординалу
+					std::cout << "#" << func.get_ordinal(); //Иначе она импортирована по ординалу
 
-				//Хинт
+				//РҐРёРЅС‚
 				std::cout << " hint: " << func.get_hint() << std::endl;
 			}
 
@@ -66,7 +66,7 @@ int main(int argc, char* argv[])
 	}
 	catch(const pe_exception& e)
 	{
-		//Если возникла ошибка
+		//Если возникла ошибка
 		std::cout << "Error: " << e.what() << std::endl;
 		return -1;
 	}
diff --git a/samples/pe_config_reader/main.cpp b/samples/pe_config_reader/main.cpp
index 82c46d1..f1fe4a9 100644
--- a/samples/pe_config_reader/main.cpp
+++ b/samples/pe_config_reader/main.cpp
@@ -1,9 +1,9 @@
-#include <iostream>
+п»ї#include <iostream>
 #include <fstream>
 #include <pe_factory.h>
 #include "lib.h"
 
-//Пример, показывающий, как считать и получить информацию о Image Config (конфигурация исполняемого файла) PE или PE+
+//Пример, показывающий, как считать и получить информацию о Image Config (конфигурация исполняемого файла) PE или PE+
 int main(int argc, char* argv[])
 {
 	if(argc != 2)
@@ -12,7 +12,7 @@ int main(int argc, char* argv[])
 		return 0;
 	}
 
-	//Открываем файл
+	//Открываем файл
 	std::ifstream pe_file(argv[1], std::ios::in | std::ios::binary);
 	if(!pe_file)
 	{
@@ -22,16 +22,16 @@ int main(int argc, char* argv[])
 
 	try
 	{
-		//Создаем экземпляр PE или PE+ класса с помощью фабрики
+		//Создаем экземпляр PE или PE+ класса с помощью фабрики
 		std::auto_ptr<pe_base> image = pe_factory::create_pe(pe_file);
 
 		std::cout << "Reading PE image config info..." << std::hex << std::showbase << std::endl << std::endl;
 		
-		//Получаем конфигурацию
+		//Получаем конфигурацию
 		const pe_base::image_config_info info = image->get_image_config();
 
-		//Выводим данные конфигурации
-		//Подробнее о полях - в MSDN
+		//Выводим данные конфигурации
+		//Подробнее о полях - в MSDN
 		std::cout << "Critical section default timeout: " << info.get_critical_section_default_timeout() << std::endl
 			<< "Decommit free block threshold: " << info.get_decommit_free_block_threshold() << std::endl
 			<< "Decommit total free threshold: " << info.get_decommit_total_free_threshold() << std::endl
@@ -47,14 +47,14 @@ int main(int argc, char* argv[])
 			<< "Virtual memory threshold: " << info.get_virtual_memory_threshold() << std::endl
 			<< std::endl;
 
-		//Выведем адреса SE-хендлеров
+		//Выведем адреса SE-хендлеров
 		const pe_base::image_config_info::se_handler_list& se_handlers = info.get_se_handler_rvas();
 		for(pe_base::image_config_info::se_handler_list::const_iterator it = se_handlers.begin(); it != se_handlers.end(); ++it)
 			std::cout << "SE Handler: " << (*it) << std::endl;
 	}
 	catch(const pe_exception& e)
 	{
-		//Если возникла ошибка
+		//Если возникла ошибка
 		std::cout << "Error: " << e.what() << std::endl;
 		return -1;
 	}
diff --git a/samples/pe_realigner/main.cpp b/samples/pe_realigner/main.cpp
index 043ed7e..fac2540 100644
--- a/samples/pe_realigner/main.cpp
+++ b/samples/pe_realigner/main.cpp
@@ -1,9 +1,9 @@
-#include <iostream>
+п»ї#include <iostream>
 #include <fstream>
 #include <pe_factory.h>
 #include "lib.h"
 
-//Пример, показывающий, как изменить файловое выравнивание PE-файлов
+//Пример, показывающий, как изменить файловое выравнивание PE-файлов
 int main(int argc, char* argv[])
 {
 	if(argc != 2)
@@ -12,7 +12,7 @@ int main(int argc, char* argv[])
 		return 0;
 	}
 
-	//Открываем файл
+	//Открываем файл
 	std::ifstream pe_file(argv[1], std::ios::in | std::ios::binary);
 	if(!pe_file)
 	{
@@ -22,20 +22,20 @@ int main(int argc, char* argv[])
 
 	try
 	{
-		//Создаем экземпляр PE или PE+ класса с помощью фабрики
+		//Создаем экземпляр PE или PE+ класса с помощью фабрики
 		std::auto_ptr<pe_base> image = pe_factory::create_pe(pe_file);
 		
-		//Выведем темущий file alignment
+		//Выведем темущий file alignment
 		std::cout << "File alignment: " << image->get_file_alignment() << std::endl;
 		
-		//Предложим выбрать новое выравнивание
+		//Предложим выбрать новое выравнивание
 		DWORD new_alignment_index = static_cast<DWORD>(-1);
 
 		while(new_alignment_index > 3)
 		{
 			if(std::cin.fail())
 			{
-				//На случай, если пользователь ввел что-то некорректное
+				//На случай, если пользователь ввел что-то некорректное
 				std::cin.clear();
 				std::cin.ignore(static_cast<std::streamsize>(-1), '\n');
 			}
@@ -47,10 +47,10 @@ int main(int argc, char* argv[])
 
 		DWORD available_aligns[] = {512, 1024, 2048, 4096};
 
-		//Изменим выравнивание на то, которое указал пользователь
+		//Изменим выравнивание на то, которое указал пользователь
 		image->realign_file(available_aligns[new_alignment_index]);
 
-		//Создаем новый PE-файл
+		//Создаем новый PE-файл
 		std::string base_file_name(argv[1]);
 		std::string::size_type slash_pos;
 		if((slash_pos = base_file_name.find_last_of("/\\")) != std::string::npos)
@@ -64,14 +64,14 @@ int main(int argc, char* argv[])
 			return -1;
 		}
 
-		//Пересобираем PE-файл
+		//Пересобираем PE-файл
 		image->rebuild_pe(new_pe_file);
 
 		std::cout << "PE was rebuilt and saved to " << base_file_name << std::endl;
 	}
 	catch(const pe_exception& e)
 	{
-		//Если возникла ошибка
+		//Если возникла ошибка
 		std::cout << "Error: " << e.what() << std::endl;
 		return -1;
 	}
diff --git a/samples/pe_rebaser/main.cpp b/samples/pe_rebaser/main.cpp
index e3d1613..c94169c 100644
--- a/samples/pe_rebaser/main.cpp
+++ b/samples/pe_rebaser/main.cpp
@@ -1,9 +1,9 @@
-#include <iostream>
+п»ї#include <iostream>
 #include <fstream>
 #include <pe_factory.h>
 #include "lib.h"
 
-//Пример, показывающий, как изменить базовый адрес загрузки PE-файла при условии наличия релокаций
+//Пример, показывающий, как изменить базовый адрес загрузки PE-файла при условии наличия релокаций
 int main(int argc, char* argv[])
 {
 	if(argc != 2)
@@ -12,7 +12,7 @@ int main(int argc, char* argv[])
 		return 0;
 	}
 
-	//Открываем файл
+	//Открываем файл
 	std::ifstream pe_file(argv[1], std::ios::in | std::ios::binary);
 	if(!pe_file)
 	{
@@ -22,24 +22,24 @@ int main(int argc, char* argv[])
 
 	try
 	{
-		//Создаем экземпляр PE или PE+ класса с помощью фабрики
+		//Создаем экземпляр PE или PE+ класса с помощью фабрики
 		std::auto_ptr<pe_base> image = pe_factory::create_pe(pe_file);
 		
-		//Проверим, есть ли релокации у образа
+		//Проверим, есть ли релокации у образа
 		if(!image->has_reloc())
 		{
 			std::cout << "Image has no relocations, rebase is not possible" << std::endl;
 			return 0;
 		}
 
-		//Получим значение базового адреса загрузки образа (64-бита, универсально для PE и PE+)
+		//Получим значение базового адреса загрузки образа (64-бита, универсально для PE и PE+)
 		ULONGLONG base = image->get_image_base_64();
-		base += 0x100000; //Изменим базовый адрес загрузки
+		base += 0x100000; //Изменим базовый адрес загрузки
 		
-		//Произведем пересчет необходимых байтов
+		//Произведем пересчет необходимых байтов
 		image->rebase_image(image->get_relocations(), base);
 
-		//Создаем новый PE-файл
+		//Создаем новый PE-файл
 		std::string base_file_name(argv[1]);
 		std::string::size_type slash_pos;
 		if((slash_pos = base_file_name.find_last_of("/\\")) != std::string::npos)
@@ -53,14 +53,14 @@ int main(int argc, char* argv[])
 			return -1;
 		}
 
-		//Пересобираем PE-файл
+		//Пересобираем PE-файл
 		image->rebuild_pe(new_pe_file);
 
 		std::cout << "PE was rebuilt and saved to " << base_file_name << std::endl;
 	}
 	catch(const pe_exception& e)
 	{
-		//Если возникла ошибка
+		//Если возникла ошибка
 		std::cout << "Error: " << e.what() << std::endl;
 		return -1;
 	}
diff --git a/samples/pe_sections_reader/main.cpp b/samples/pe_sections_reader/main.cpp
index 62df662..cff2672 100644
--- a/samples/pe_sections_reader/main.cpp
+++ b/samples/pe_sections_reader/main.cpp
@@ -1,9 +1,9 @@
-#include <iostream>
+п»ї#include <iostream>
 #include <fstream>
 #include <pe_factory.h>
 #include "lib.h"
 
-//Пример, показывающий, как считать и получить информацию о секциях PE или PE+ файла
+//Пример, показывающий, как считать и получить информацию о секциях PE или PE+ файла
 int main(int argc, char* argv[])
 {
 	if(argc != 2)
@@ -12,7 +12,7 @@ int main(int argc, char* argv[])
 		return 0;
 	}
 
-	//Открываем файл
+	//Открываем файл
 	std::ifstream pe_file(argv[1], std::ios::in | std::ios::binary);
 	if(!pe_file)
 	{
@@ -22,28 +22,28 @@ int main(int argc, char* argv[])
 
 	try
 	{
-		//Создаем экземпляр PE или PE+ класса с помощью фабрики
+		//Создаем экземпляр PE или PE+ класса с помощью фабрики
 		std::auto_ptr<pe_base> image = pe_factory::create_pe(pe_file);
 
-		//Получаем список секций
+		//Получаем список секций
 		std::cout << "Reading PE sections..." << std::hex << std::showbase << std::endl << std::endl;
 		const pe_base::section_list sections = image->get_image_sections();
 
-		//Перечисляем секции и выводим информацию о них
+		//Перечисляем секции и выводим информацию о них
 		for(pe_base::section_list::const_iterator it = sections.begin(); it != sections.end(); ++it)
 		{
-			const pe_base::section& s = *it; //Секция
-			std::cout << "Section [" << s.get_name() << "]" << std::endl //Имя секции
-				<< "Characteristics: " << s.get_characteristics() << std::endl //Характеристики
-				<< "Size of raw data: " << s.get_size_of_raw_data() << std::endl //Размер данных в файле
-				<< "Virtual address: " << s.get_virtual_address() << std::endl //Виртуальный адрес
-				<< "Virtual size: " << s.get_virtual_size() << std::endl //Виртуальный размер
+			const pe_base::section& s = *it; //Секция
+			std::cout << "Section [" << s.get_name() << "]" << std::endl //Имя секции
+				<< "Characteristics: " << s.get_characteristics() << std::endl //Характеристики
+				<< "Size of raw data: " << s.get_size_of_raw_data() << std::endl //Размер данных в файле
+				<< "Virtual address: " << s.get_virtual_address() << std::endl //Виртуальный адрес
+				<< "Virtual size: " << s.get_virtual_size() << std::endl //Виртуальный размер
 				<< std::endl;
 		}
 	}
 	catch(const pe_exception& e)
 	{
-		//Если возникла ошибка
+		//Если возникла ошибка
 		std::cout << "Error: " << e.what() << std::endl;
 		return -1;
 	}
diff --git a/samples/pe_stripper/main.cpp b/samples/pe_stripper/main.cpp
index 9f7e17a..e2384f7 100644
--- a/samples/pe_stripper/main.cpp
+++ b/samples/pe_stripper/main.cpp
@@ -1,9 +1,9 @@
-#include <iostream>
+п»ї#include <iostream>
 #include <fstream>
 #include <pe_factory.h>
 #include "lib.h"
 
-//Пример, показывающий, как вырезать ненужные данные из PE-файла и пересобрать его
+//Пример, показывающий, как вырезать ненужные данные из PE-файла и пересобрать его
 int main(int argc, char* argv[])
 {
 	if(argc != 2)
@@ -12,7 +12,7 @@ int main(int argc, char* argv[])
 		return 0;
 	}
 
-	//Открываем файл
+	//Открываем файл
 	std::ifstream pe_file(argv[1], std::ios::in | std::ios::binary);
 	if(!pe_file)
 	{
@@ -22,17 +22,17 @@ int main(int argc, char* argv[])
 
 	try
 	{
-		//Создаем экземпляр PE или PE+ класса с помощью фабрики
+		//Создаем экземпляр PE или PE+ класса с помощью фабрики
 		std::auto_ptr<pe_base> image = pe_factory::create_pe(pe_file);
 		
-		//Удалим DOS stub и rich overlay
+		//Удалим DOS stub и rich overlay
 		image->strip_stub_overlay();
 
-		//Удалим ненужные DATA_DIRECTORY (нулевые)
-		//Очень малое количество линкеров умеют это делать
+		//Удалим ненужные DATA_DIRECTORY (нулевые)
+		//Очень малое количество линкеров умеют это делать
 		image->strip_data_directories(0);
 
-		//Создаем новый PE-файл
+		//Создаем новый PE-файл
 		std::string base_file_name(argv[1]);
 		std::string::size_type slash_pos;
 		if((slash_pos = base_file_name.find_last_of("/\\")) != std::string::npos)
@@ -46,17 +46,17 @@ int main(int argc, char* argv[])
 			return -1;
 		}
 
-		//Пересобираем PE-файл с опцией сжатия DOS-header
-		//Усеньшения размера это не дает, но упаковывает NT-заголовки в DOS-заголовок
-		//При пересборке автоматически убираются ненужные нулевые байты в самом конце образа,
-		//в результате чего размер образа становится немного меньше
+		//Пересобираем PE-файл с опцией сжатия DOS-header
+		//Усеньшения размера это не дает, но упаковывает NT-заголовки в DOS-заголовок
+		//При пересборке автоматически убираются ненужные нулевые байты в самом конце образа,
+		//в результате чего размер образа становится немного меньше
 		image->rebuild_pe(new_pe_file, true);
 		
 		std::cout << "PE was rebuilt and saved to " << base_file_name << std::endl;
 	}
 	catch(const pe_exception& e)
 	{
-		//Если возникла ошибка
+		//Если возникла ошибка
 		std::cout << "Error: " << e.what() << std::endl;
 		return -1;
 	}
diff --git a/samples/relocation_adder/main.cpp b/samples/relocation_adder/main.cpp
index 9a48324..ae4beef 100644
--- a/samples/relocation_adder/main.cpp
+++ b/samples/relocation_adder/main.cpp
@@ -1,9 +1,9 @@
-#include <iostream>
+п»ї#include <iostream>
 #include <fstream>
 #include <pe_factory.h>
 #include "lib.h"
 
-//Пример, показывающий, как добавить новую релокацию в таблицы релокаций PE-файла
+//Пример, показывающий, как добавить новую релокацию в таблицы релокаций PE-файла
 int main(int argc, char* argv[])
 {
 	if(argc != 2)
@@ -12,7 +12,7 @@ int main(int argc, char* argv[])
 		return 0;
 	}
 
-	//Открываем файл
+	//Открываем файл
 	std::ifstream pe_file(argv[1], std::ios::in | std::ios::binary);
 	if(!pe_file)
 	{
@@ -22,38 +22,38 @@ int main(int argc, char* argv[])
 
 	try
 	{
-		//Создаем экземпляр PE или PE+ класса с помощью фабрики
+		//Создаем экземпляр PE или PE+ класса с помощью фабрики
 		std::auto_ptr<pe_base> image = pe_factory::create_pe(pe_file);
 
-		//Перечислим и получим все записи из таблиц релокаций в PE-файле, кроме абсолютных
-		//Можно было бы включить в список и абсолютные записи (ABSOLUTE), передав в вызов true
-		//Эти записи не нужны при пересборке релокаций, они используются для выравнивания
-		//и будут добавлены автоматически пересборщиком
+		//Перечислим и получим все записи из таблиц релокаций в PE-файле, кроме абсолютных
+		//Можно было бы включить в список и абсолютные записи (ABSOLUTE), передав в вызов true
+		//Эти записи не нужны при пересборке релокаций, они используются для выравнивания
+		//и будут добавлены автоматически пересборщиком
 		pe_base::relocation_table_list tables = image->get_relocations();
 		
-		//Создаем новую таблицу релокаций
+		//Создаем новую таблицу релокаций
 		pe_base::relocation_table new_table;
-		new_table.set_rva(0x5678); //Относительный адрес релокаций в таблице - он некорректен, для примера, поэтому получившийся PE скорее всего не загрузится
-		//Добавим в таблицу новую релокацию
-		new_table.add_relocation(pe_base::relocation_entry(10, 3)); //Тип 3 - HIGHLOW-релокация, RRVA = 10, т.е. RVA = 0x5678 + 10
-		//Добавляем таблицу
+		new_table.set_rva(0x5678); //Относительный адрес релокаций в таблице - он некорректен, для примера, поэтому получившийся PE скорее всего не загрузится
+		//Добавим в таблицу новую релокацию
+		new_table.add_relocation(pe_base::relocation_entry(10, 3)); //Тип 3 - HIGHLOW-релокация, RRVA = 10, т.е. RVA = 0x5678 + 10
+		//Добавляем таблицу
 		tables.push_back(new_table);
 
-		//Можно редактировать и существующие релокации, но делать этого не стоит, так как файл не загрузится, если что-то в них поменять
-		//Если их удалить у EXE-файла полностью, то все будет нормально, у DLL этого делать не стоит
-		//Мы просто пересоберем релокации
-		//Они будет иметь больший размер, чем до нашего редактирования,
-		//поэтому запишем их в новую секцию, чтобы все поместилось
-		//(мы не можем расширять существующие секции, если только секция не в самом конце файла)
+		//Можно редактировать и существующие релокации, но делать этого не стоит, так как файл не загрузится, если что-то в них поменять
+		//Если их удалить у EXE-файла полностью, то все будет нормально, у DLL этого делать не стоит
+		//Мы просто пересоберем релокации
+		//Они будет иметь больший размер, чем до нашего редактирования,
+		//поэтому запишем их в новую секцию, чтобы все поместилось
+		//(мы не можем расширять существующие секции, если только секция не в самом конце файла)
 		pe_base::section new_relocs;
-		new_relocs.get_raw_data().resize(1); //Мы не можем добавлять пустые секции, поэтому пусть у нее будет начальный размер данных 1
-		new_relocs.set_name("new_rel"); //Имя секции
-		new_relocs.readable(true); //Доступна на чтение
-		pe_base::section& attached_section = image->add_section(new_relocs); //Добавим секцию и получим ссылку на добавленную секцию с просчитанными размерами
+		new_relocs.get_raw_data().resize(1); //Мы не можем добавлять пустые секции, поэтому пусть у нее будет начальный размер данных 1
+		new_relocs.set_name("new_rel"); //Имя секции
+		new_relocs.readable(true); //Доступна на чтение
+		pe_base::section& attached_section = image->add_section(new_relocs); //Добавим секцию и получим ссылку на добавленную секцию с просчитанными размерами
 
-		image->rebuild_relocations(tables, attached_section); //Пересобираем экспорты, расположив их с начала новой секции и записав новые данные таблиц релокаций в PE-заголовок
+		image->rebuild_relocations(tables, attached_section); //Пересобираем экспорты, расположив их с начала новой секции и записав новые данные таблиц релокаций в PE-заголовок
 
-		//Создаем новый PE-файл
+		//Создаем новый PE-файл
 		std::string base_file_name(argv[1]);
 		std::string::size_type slash_pos;
 		if((slash_pos = base_file_name.find_last_of("/\\")) != std::string::npos)
@@ -67,14 +67,14 @@ int main(int argc, char* argv[])
 			return -1;
 		}
 
-		//Пересобираем PE-файл
+		//Пересобираем PE-файл
 		image->rebuild_pe(new_pe_file);
 
 		std::cout << "PE was rebuilt and saved to " << base_file_name << std::endl;
 	}
 	catch(const pe_exception& e)
 	{
-		//Если возникла ошибка
+		//Если возникла ошибка
 		std::cout << "Error: " << e.what() << std::endl;
 		return -1;
 	}
diff --git a/samples/relocations_reader/main.cpp b/samples/relocations_reader/main.cpp
index fbaf994..ebc7a0d 100644
--- a/samples/relocations_reader/main.cpp
+++ b/samples/relocations_reader/main.cpp
@@ -1,9 +1,9 @@
-#include <iostream>
+п»ї#include <iostream>
 #include <fstream>
 #include <pe_factory.h>
 #include "lib.h"
 
-//Пример, показывающий, как считать и получить информацию о релокациях PE или PE+ файла
+//Пример, показывающий, как считать и получить информацию о релокациях PE или PE+ файла
 int main(int argc, char* argv[])
 {
 	if(argc != 2)
@@ -12,7 +12,7 @@ int main(int argc, char* argv[])
 		return 0;
 	}
 
-	//Открываем файл
+	//Открываем файл
 	std::ifstream pe_file(argv[1], std::ios::in | std::ios::binary);
 	if(!pe_file)
 	{
@@ -22,10 +22,10 @@ int main(int argc, char* argv[])
 
 	try
 	{
-		//Создаем экземпляр PE или PE+ класса с помощью фабрики
+		//Создаем экземпляр PE или PE+ класса с помощью фабрики
 		std::auto_ptr<pe_base> image = pe_factory::create_pe(pe_file);
 		
-		//Проверим, есть ли релокации у файла
+		//Проверим, есть ли релокации у файла
 		if(!image->has_reloc())
 		{
 			std::cout << "Image has no relocations" << std::endl;
@@ -34,18 +34,18 @@ int main(int argc, char* argv[])
 
 		std::cout << "Reading PE relocations..." << std::hex << std::showbase << std::endl << std::endl;
 
-		//Получаем список таблиц релокаций
+		//Получаем список таблиц релокаций
 		const pe_base::relocation_table_list tables = image->get_relocations();
 
-		//Перечисляем таблицы релокаций и выводим информацию о них
+		//Перечисляем таблицы релокаций и выводим информацию о них
 		for(pe_base::relocation_table_list::const_iterator it = tables.begin(); it != tables.end(); ++it)
 		{
-			const pe_base::relocation_table& table = *it; //Таблица релокаций
-			std::cout << "RVA [" << table.get_rva() << "]" << std::endl //Относительный адрес
+			const pe_base::relocation_table& table = *it; //Таблица релокаций
+			std::cout << "RVA [" << table.get_rva() << "]" << std::endl //Относительный адрес
 				<< "=========="
 				<< std::endl;
 
-			//Перечислим все релокации
+			//Перечислим все релокации
 			const pe_base::relocation_table::relocation_list& relocs = table.get_relocations();
 			for(pe_base::relocation_table::relocation_list::const_iterator reloc_it = relocs.begin(); reloc_it != relocs.end(); ++reloc_it)
 			{
@@ -57,7 +57,7 @@ int main(int argc, char* argv[])
 	}
 	catch(const pe_exception& e)
 	{
-		//Если возникла ошибка
+		//Если возникла ошибка
 		std::cout << "Error: " << e.what() << std::endl;
 		return -1;
 	}
diff --git a/samples/resource_editor/main.cpp b/samples/resource_editor/main.cpp
index aa1b601..a1b7630 100644
--- a/samples/resource_editor/main.cpp
+++ b/samples/resource_editor/main.cpp
@@ -1,16 +1,16 @@
-#include <iostream>
+п»ї#include <iostream>
 #include <fstream>
 #include <pe_factory.h>
 #include <pe_resource_manager.h>
 #include "resource.h"
 #include "lib.h"
 
-//Пример, показывающий, как редактировать ресурсы PE-файла
-//Для начала рекомендуется ознакомиться с примером resource_viewer
-//Обратите внимание, что пример корректно отработает и в x86, и в x64 варианте
+//Пример, показывающий, как редактировать ресурсы PE-файла
+//Для начала рекомендуется ознакомиться с примером resource_viewer
+//Обратите внимание, что пример корректно отработает и в x86, и в x64 варианте
 int main(int argc, char* argv[])
 {
-	//Открываем файл (сами себя)
+	//Открываем файл (сами себя)
 	std::ifstream pe_file(argv[0], std::ios::in | std::ios::binary);
 	if(!pe_file)
 	{
@@ -20,115 +20,115 @@ int main(int argc, char* argv[])
 
 	try
 	{
-		//Создаем экземпляр PE или PE+ класса с помощью фабрики
+		//Создаем экземпляр PE или PE+ класса с помощью фабрики
 		std::auto_ptr<pe_base> image = pe_factory::create_pe(pe_file);
 
-		//Суть примера будет состоять в следующем:
-		//В сам пример вкомпиливается иконка в директорию с именем CUSTOM
-		//Иконка состоит из трех картинок разных разрешений
-		//Наша задача - считать иконку из директории CUSTOM и установить ее как главную иконку exe-файла
-		//Далее - удалить директорию CUSTOM
-		//Наконец, добавить какую-нибудь информацию о версии к файлу
+		//Суть примера будет состоять в следующем:
+		//В сам пример вкомпиливается иконка в директорию с именем CUSTOM
+		//Иконка состоит из трех картинок разных разрешений
+		//Наша задача - считать иконку из директории CUSTOM и установить ее как главную иконку exe-файла
+		//Далее - удалить директорию CUSTOM
+		//Наконец, добавить какую-нибудь информацию о версии к файлу
 
-		//Проверим, есть ли ресурсы у файла
+		//Проверим, есть ли ресурсы у файла
 		if(!image->has_resources())
 		{
 			std::cout << "Image has no resources" << std::endl;
 			return 0;
 		}
 
-		//Получаем корневую директорию ресурсов
+		//Получаем корневую директорию ресурсов
 		std::cout << "Reading PE resources..." << std::hex << std::showbase << std::endl << std::endl;
 		pe_base::resource_directory root = image->get_resources();
 
-		//Для облегчения работы с директориями и записями ресурсов созданы вспомогательные классы
-		//Этот класс позволяет извлекать из PE-файлов любые ресурсы и перезаписывать их
-		//и предоставляет высокоуровневые функции для извечения иконок, курсоров, картинкок, строковых таблиц
-		//и таблиц сообщений, а также информации о версии
-		//и редактирования иконок, курсоров, картинок и информации о версии
+		//Для облегчения работы с директориями и записями ресурсов созданы вспомогательные классы
+		//Этот класс позволяет извлекать из PE-файлов любые ресурсы и перезаписывать их
+		//и предоставляет высокоуровневые функции для извечения иконок, курсоров, картинкок, строковых таблиц
+		//и таблиц сообщений, а также информации о версии
+		//и редактирования иконок, курсоров, картинок и информации о версии
 		pe_resource_manager res(root);
 
-		//Для начала убедимся, что директория CUSTOM есть
+		//Для начала убедимся, что директория CUSTOM есть
 		if(!res.resource_exists(L"CUSTOM"))
 		{
 			std::cout << "\"CUSTOM\" resource directory does not exist" << std::endl;
 			return -1;
 		}
 
-		//Получим нашу иконку из этой директории: мы знаем, что ее ID=100 и она одна в директории имен, поэтому делаем так
-		//Получаем ее по нулевому индексу (можно было получить по языку, но это незачем, т.к. она единственная)
+		//Получим нашу иконку из этой директории: мы знаем, что ее ID=100 и она одна в директории имен, поэтому делаем так
+		//Получаем ее по нулевому индексу (можно было получить по языку, но это незачем, т.к. она единственная)
 		const pe_resource_viewer::resource_data_info data = res.get_resource_data_by_id(L"CUSTOM", IDR_CUSTOM1);
 
-		//Необходимо теперь добавить ее как главную иконку
-		//Иконка приложения - это иконка из той группы иконок, которая следует самой первой в списке групп иконок
-		//Помните, что сначала идут именованные ресурсы, а потом ресурсы с идентификаторами, и всё сортируется
-		//Создадим группу иконок с именем MAIN_ICON
-		res.add_icon(data.get_data(), //Данные файла иконки
-			L"MAIN_ICON", //Имя группы иконок (помните, у нас три картинки внутри иконки, они будут находиться в этой группе)
-			0, //Язык - нам неважен
-			pe_resource_manager::icon_place_after_max_icon_id, //Вариант расположения иконок в существующей группе - нам он неважен, так как мы создаем новую группу
-			data.get_codepage(), //Сохраним исходную Codepage
-			0 //Timestamp - неважен
+		//Необходимо теперь добавить ее как главную иконку
+		//Иконка приложения - это иконка из той группы иконок, которая следует самой первой в списке групп иконок
+		//Помните, что сначала идут именованные ресурсы, а потом ресурсы с идентификаторами, и всё сортируется
+		//Создадим группу иконок с именем MAIN_ICON
+		res.add_icon(data.get_data(), //Данные файла иконки
+			L"MAIN_ICON", //Имя группы иконок (помните, у нас три картинки внутри иконки, они будут находиться в этой группе)
+			0, //Язык - нам неважен
+			pe_resource_manager::icon_place_after_max_icon_id, //Вариант расположения иконок в существующей группе - нам он неважен, так как мы создаем новую группу
+			data.get_codepage(), //Сохраним исходную Codepage
+			0 //Timestamp - неважен
 			);
 		
-		//Теперь удалим уже ненужную директорию CUSTOM
+		//Теперь удалим уже ненужную директорию CUSTOM
 		res.remove_resource(L"CUSTOM");
 		
-		//Теперь создадим информацию о версии
-		pe_resource_viewer::file_version_info file_info; //Базовая информация о файле
-		file_info.set_special_build(true); //Это будет специальный билд
-		file_info.set_file_os(pe_resource_viewer::file_version_info::file_os_nt_win32); //Система, на которой работает файл
-		file_info.set_file_version_ms(0x00010002); //Версия файла будет 1.2.3.4
+		//Теперь создадим информацию о версии
+		pe_resource_viewer::file_version_info file_info; //Базовая информация о файле
+		file_info.set_special_build(true); //Это будет специальный билд
+		file_info.set_file_os(pe_resource_viewer::file_version_info::file_os_nt_win32); //Система, на которой работает файл
+		file_info.set_file_version_ms(0x00010002); //Версия файла будет 1.2.3.4
 		file_info.set_file_version_ls(0x00030004);
 
-		//Теперь создадим строки с информацией и трансляции (переводы)
+		//Теперь создадим строки с информацией и трансляции (переводы)
 		pe_resource_viewer::lang_string_values_map strings;
 		pe_resource_viewer::translation_values_map translations;
 
-		//Для работы со строками и трансляциями есть вспомогательный класс
+		//Для работы со строками и трансляциями есть вспомогательный класс
 		version_info_editor version(strings, translations);
-		//Добавим трансляцию - default process language, UNICODE
-		//Можно указать и конкретный язык и кодировку
+		//Добавим трансляцию - default process language, UNICODE
+		//Можно указать и конкретный язык и кодировку
 		version.add_translation(version_info_editor::default_language_translation);
-		//Строки будут устанавливаться для дефолтной кодировки (default_language_translation)
-		//Если такой нет, то для первой найденной
-		//Если вообще нет ни одной трансляции, то будет добавлена дефолтная (default_language_translation)
-		//Таким образом, предыдущий вызов add_translation можно было бы опустить
-		//И еще: необязательно устанавливать все доступные строки, как сделано ниже
-		version.set_company_name(L"Kaimi.ru DX"); //Имя компании-производителя
-		version.set_file_description(L"Generated file version info"); //Описание файла
-		version.set_internal_name(L"Tralala.exe"); //Внутреннее имя файла
-		version.set_legal_copyright(L"(C) DX Portable Executable Library"); //Копирайт
-		version.set_original_filename(L"resource_editor.exe"); //Оригинальное имя файла
-		version.set_product_name(L"PE Resource Editor Example"); //Имя продукта
-		version.set_product_version(L"x.y.z"); //Версия продукта
-
-		//Можно также добавить свою собственную строку: она будет храниться в информации о версии,
-		//но Windows Explorer вряд ли ее отобразит в свойствах файла
+		//Строки будут устанавливаться для дефолтной кодировки (default_language_translation)
+		//Если такой нет, то для первой найденной
+		//Если вообще нет ни одной трансляции, то будет добавлена дефолтная (default_language_translation)
+		//Таким образом, предыдущий вызов add_translation можно было бы опустить
+		//И еще: необязательно устанавливать все доступные строки, как сделано ниже
+		version.set_company_name(L"Kaimi.ru DX"); //Имя компании-производителя
+		version.set_file_description(L"Generated file version info"); //Описание файла
+		version.set_internal_name(L"Tralala.exe"); //Внутреннее имя файла
+		version.set_legal_copyright(L"(C) DX Portable Executable Library"); //Копирайт
+		version.set_original_filename(L"resource_editor.exe"); //Оригинальное имя файла
+		version.set_product_name(L"PE Resource Editor Example"); //Имя продукта
+		version.set_product_version(L"x.y.z"); //Версия продукта
+
+		//Можно также добавить свою собственную строку: она будет храниться в информации о версии,
+		//но Windows Explorer вряд ли ее отобразит в свойствах файла
 		version.set_property(L"MyLittleProperty", L"Secret Value");
 
-		//Установим информацию о версии
-		res.set_version_info(file_info, strings, translations, 1033); //1033 - русский язык
+		//Установим информацию о версии
+		res.set_version_info(file_info, strings, translations, 1033); //1033 - русский язык
 		
-		//Осталось переименовать старую секцию ресурсов
-		//Она называется .rsrc
-		//Переименование необходимо для того, чтобы Windows Explorer смог считать из новой секции иконку
+		//Осталось переименовать старую секцию ресурсов
+		//Она называется .rsrc
+		//Переименование необходимо для того, чтобы Windows Explorer смог считать из новой секции иконку
 		image->section_from_directory(IMAGE_DIRECTORY_ENTRY_RESOURCE).set_name("oldres");
 
-		//Пересоберем ресурсы
-		//Они будет иметь больший размер, чем до нашего редактирования,
-		//поэтому запишем их в новую секцию, чтобы все поместилось
-		//(мы не можем расширять существующие секции, если только секция не в самом конце файла)
+		//Пересоберем ресурсы
+		//Они будет иметь больший размер, чем до нашего редактирования,
+		//поэтому запишем их в новую секцию, чтобы все поместилось
+		//(мы не можем расширять существующие секции, если только секция не в самом конце файла)
 		pe_base::section new_resources;
-		new_resources.get_raw_data().resize(1); //Мы не можем добавлять пустые секции, поэтому пусть у нее будет начальный размер данных 1
-		new_resources.set_name(".rsrc"); //Имя секции
-		new_resources.readable(true); //Доступна на чтение
-		pe_base::section& attached_section = image->add_section(new_resources); //Добавим секцию и получим ссылку на добавленную секцию с просчитанными размерами
+		new_resources.get_raw_data().resize(1); //Мы не можем добавлять пустые секции, поэтому пусть у нее будет начальный размер данных 1
+		new_resources.set_name(".rsrc"); //Имя секции
+		new_resources.readable(true); //Доступна на чтение
+		pe_base::section& attached_section = image->add_section(new_resources); //Добавим секцию и получим ссылку на добавленную секцию с просчитанными размерами
 		
-		//Теперь пересоберем ресурсы, расположив их в самом начале новой секции и поправив PE-заголовок, записав туда новые параметры директории ресурсоы
+		//Теперь пересоберем ресурсы, расположив их в самом начале новой секции и поправив PE-заголовок, записав туда новые параметры директории ресурсоы
 		image->rebuild_resources(root, attached_section);
 		
-		//Создаем новый PE-файл
+		//Создаем новый PE-файл
 		std::string base_file_name(argv[0]);
 		std::string::size_type slash_pos;
 		if((slash_pos = base_file_name.find_last_of("/\\")) != std::string::npos)
@@ -142,14 +142,14 @@ int main(int argc, char* argv[])
 			return -1;
 		}
 
-		//Пересобираем PE-файл
+		//Пересобираем PE-файл
 		image->rebuild_pe(new_pe_file);
 
 		std::cout << "PE was rebuilt and saved to " << base_file_name << std::endl;
 	}
 	catch(const pe_exception& e)
 	{
-		//Если возникла ошибка
+		//Если возникла ошибка
 		std::cout << "Error: " << e.what() << std::endl;
 		return -1;
 	}
diff --git a/samples/resource_viewer/main.cpp b/samples/resource_viewer/main.cpp
index a7b5934..5e10cd1 100644
--- a/samples/resource_viewer/main.cpp
+++ b/samples/resource_viewer/main.cpp
@@ -1,10 +1,10 @@
-#include <iostream>
+п»ї#include <iostream>
 #include <fstream>
 #include <pe_factory.h>
 #include <pe_resource_manager.h>
 #include "lib.h"
 
-//Пример, показывающий, как читать ресурсы PE-файла
+//Пример, показывающий, как читать ресурсы PE-файла
 int main(int argc, char* argv[])
 {
 	if(argc != 2)
@@ -13,7 +13,7 @@ int main(int argc, char* argv[])
 		return 0;
 	}
 
-	//Открываем файл
+	//Открываем файл
 	std::ifstream pe_file(argv[1], std::ios::in | std::ios::binary);
 	if(!pe_file)
 	{
@@ -23,55 +23,55 @@ int main(int argc, char* argv[])
 
 	try
 	{
-		//Создаем экземпляр PE или PE+ класса с помощью фабрики
+		//Создаем экземпляр PE или PE+ класса с помощью фабрики
 		std::auto_ptr<pe_base> image = pe_factory::create_pe(pe_file);
 
-		//Проверим, есть ли ресурсы у файла
+		//Проверим, есть ли ресурсы у файла
 		if(!image->has_resources())
 		{
 			std::cout << "Image has no resources" << std::endl;
 			return 0;
 		}
 
-		//Получаем корневую директорию ресурсов
+		//Получаем корневую директорию ресурсов
 		std::cout << "Reading PE resources..." << std::hex << std::showbase << std::endl << std::endl;
 		const pe_base::resource_directory root = image->get_resources();
 
-		//Для облегчения работы с директориями и записями ресурсов созданы вспомогательные классы
-		//Этот класс позволяет извлекать из PE-файлов любые ресурсы
-		//и предоставляет высокоуровневые функции для извечения иконок, курсоров, картинкок, строковых таблиц
-		//и таблиц сообщений, а также информации о версии
+		//Для облегчения работы с директориями и записями ресурсов созданы вспомогательные классы
+		//Этот класс позволяет извлекать из PE-файлов любые ресурсы
+		//и предоставляет высокоуровневые функции для извечения иконок, курсоров, картинкок, строковых таблиц
+		//и таблиц сообщений, а также информации о версии
 		pe_resource_viewer res(root);
 
-		//Выведем типы ресурсов, которые присутствуют в PE-файле
+		//Выведем типы ресурсов, которые присутствуют в PE-файле
 		pe_resource_viewer::resource_type_list res_types(res.list_resource_types());
 		for(pe_resource_viewer::resource_type_list::const_iterator it = res_types.begin(); it != res_types.end(); ++it)
 			std::cout << "Present resource type: " << (*it) << std::endl;
 
 		std::cout << std::endl;
 
-		//Выведем иофнрмацию о версии, если она существует
+		//Выведем иофнрмацию о версии, если она существует
 		if(res.resource_exists(pe_resource_viewer::resource_version))
 		{
 			pe_resource_viewer::lang_string_values_map strings;
 			pe_resource_viewer::translation_values_map translations;
-			//Получаем список строк, переводов и базовую информацию о файле
+			//Получаем список строк, переводов и базовую информацию о файле
 			pe_resource_viewer::file_version_info file_info(res.get_version_info(strings, translations));
 
-			//Выводить информацию будем в юникодный поток
+			//Выводить информацию будем в юникодный поток
 			std::wstringstream version_info;
-			//Выведем некоторую базовую информацию
+			//Выведем некоторую базовую информацию
 			version_info << L"Version info: " << std::endl;
-			version_info << L"File version: " << file_info.get_file_version_string<wchar_t>() << std::endl; //Строка версии файла
-			version_info << L"Debug build: " << (file_info.is_debug() ? L"YES" : L"NO") << std::endl; //Отладочный ли билд
+			version_info << L"File version: " << file_info.get_file_version_string<wchar_t>() << std::endl; //Строка версии файла
+			version_info << L"Debug build: " << (file_info.is_debug() ? L"YES" : L"NO") << std::endl; //Отладочный ли билд
 			version_info << std::endl;
 
-			//Выведем строки для разных трансляций:
+			//Выведем строки для разных трансляций:
 			for(pe_resource_viewer::lang_string_values_map::const_iterator it = strings.begin(); it != strings.end(); ++it)
 			{
 				version_info << L"Translation ID: " << (*it).first << std::endl;
 
-				//Перечислим записи в таблице строк для текущей трансляции (перевода)
+				//Перечислим записи в таблице строк для текущей трансляции (перевода)
 				const pe_resource_viewer::string_values_map& string_table = (*it).second;
 				for(pe_resource_viewer::string_values_map::const_iterator str_it = string_table.begin(); str_it != string_table.end(); ++str_it)
 					version_info << (*str_it).first << L": " << (*str_it).second << std::endl;
@@ -79,12 +79,12 @@ int main(int argc, char* argv[])
 				version_info << std::endl;
 			}
 			
-			//Выведем доступные переводы (трансляции):
+			//Выведем доступные переводы (трансляции):
 			for(pe_resource_viewer::translation_values_map::const_iterator it = translations.begin(); it != translations.end(); ++it)
 				version_info << L"Translation: language: " << (*it).first << ", codepage: " << (*it).second << std::endl;
 
 			{
-				//Создаем файл, в который запишем информацию о версии
+				//Создаем файл, в который запишем информацию о версии
 				std::ofstream version_info_file("version_info.txt", std::ios::out | std::ios::trunc | std::ios::binary);
 				if(!version_info_file)
 				{
@@ -93,63 +93,63 @@ int main(int argc, char* argv[])
 				}
 
 				std::wstring version_info_string(version_info.str());
-				//Запишем буфер, чтобы не париться с локалями и записью юникода в файл
+				//Запишем буфер, чтобы не париться с локалями и записью юникода в файл
 				version_info_file.write(reinterpret_cast<const char*>(version_info_string.data()), version_info_string.length() * sizeof(wchar_t));
 
 				std::cout << "version_info.txt created" << std::endl << std::endl;
 			}
 
-			//Для облегчения чтения информации о версии есть специальный класс
+			//Для облегчения чтения информации о версии есть специальный класс
 			version_info_viewer version_viewer(strings, translations);
 			std::wcout << "Original filename: " << version_viewer.get_original_filename() << std::endl << std::endl;
 		}
 
 		{
-			//Найдем, есть ли у приложения иконка
-			//Для этого сначала узнаем все имена и идентификаторы групп иконок
-			//Все ресурсы в целом организованы в таком виде (дерево):
-			//тип ресурса
-			//--> имя ресурса
-			//----> язык рерурса
-			//------> ресурс
-			//----> язык ресурса
-			//------> ресурс
+			//Найдем, есть ли у приложения иконка
+			//Для этого сначала узнаем все имена и идентификаторы групп иконок
+			//Все ресурсы в целом организованы в таком виде (дерево):
+			//тип ресурса
+			//--> имя ресурса
+			//----> язык рерурса
+			//------> ресурс
+			//----> язык ресурса
+			//------> ресурс
 			//----> ...
-			//--> имя ресурса
+			//--> имя ресурса
 			//--> ...
-			//--> id ресурса
-			//----> язык рерурса
-			//------> ресурс
-			//----> язык ресурса
-			//------> ресурс
+			//--> id ресурса
+			//----> язык рерурса
+			//------> ресурс
+			//----> язык ресурса
+			//------> ресурс
 			//----> ...
-			//--> id ресурса
+			//--> id ресурса
 			//--> ...
-			//тип ресурса
+			//тип ресурса
 			//...
 			pe_resource_viewer::resource_id_list icon_id_list(res.list_resource_ids(pe_resource_viewer::resource_icon_group));
 			pe_resource_viewer::resource_name_list icon_name_list(res.list_resource_names(pe_resource_viewer::resource_icon_group));
-			std::string main_icon; //Данные иконки приложения
-			//Сначала всегда располагаются именованные ресурсы, поэтому проверим, есть ли они
+			std::string main_icon; //Данные иконки приложения
+			//Сначала всегда располагаются именованные ресурсы, поэтому проверим, есть ли они
 			if(!icon_name_list.empty())
 			{
-				//Получим самую первую иконку для самого первого языка (по индексу 0)
-				//Если надо было бы перечислить языки для заданной иконки, можно было вызвать list_resource_languages
-				//Если надо было бы получить иконку для конкретного языка, можно было вызвать get_icon_by_name (перегрузка с указанием языка)
+				//Получим самую первую иконку для самого первого языка (по индексу 0)
+				//Если надо было бы перечислить языки для заданной иконки, можно было вызвать list_resource_languages
+				//Если надо было бы получить иконку для конкретного языка, можно было вызвать get_icon_by_name (перегрузка с указанием языка)
 				main_icon = res.get_icon_by_name(icon_name_list[0]);
 			}
-			else if(!icon_id_list.empty()) //Если нет именованных групп иконок, но есть группы с ID
+			else if(!icon_id_list.empty()) //Если нет именованных групп иконок, но есть группы с ID
 			{
-				//Получим самую первую иконку для самого первого языка (по индексу 0)
-				//Если надо было бы перечислить языки для заданной иконки, можно было вызвать list_resource_languages
-				//Если надо было бы получить иконку для конкретного языка, можно было вызвать get_icon_by_id_lang
+				//Получим самую первую иконку для самого первого языка (по индексу 0)
+				//Если надо было бы перечислить языки для заданной иконки, можно было вызвать list_resource_languages
+				//Если надо было бы получить иконку для конкретного языка, можно было вызвать get_icon_by_id_lang
 				main_icon = res.get_icon_by_id(icon_id_list[0]);
 			}
 
-			//Если есть иконка...
+			//Если есть иконка...
 			if(!main_icon.empty())
 			{
-				//Сохраним полученную иконку в файл
+				//Сохраним полученную иконку в файл
 				std::ofstream app_icon("main_icon.ico", std::ios::out | std::ios::trunc | std::ios::binary);
 				if(!app_icon)
 				{
@@ -164,38 +164,38 @@ int main(int argc, char* argv[])
 		}
 
 		{
-			//Сдампим строковые таблицы
-			//Перечислим идентификаторы существующих строковых таблиц
+			//Сдампим строковые таблицы
+			//Перечислим идентификаторы существующих строковых таблиц
 			pe_resource_viewer::resource_id_list strings_id_list(res.list_resource_ids(pe_resource_viewer::resource_string));
 
-			//Дампить будем в юникодный поток
+			//Дампить будем в юникодный поток
 			std::wstringstream string_data;
 
-			if(!strings_id_list.empty()) //Если у нас есть именованные строковые таблицы, сдампим их
+			if(!strings_id_list.empty()) //Если у нас есть именованные строковые таблицы, сдампим их
 			{
-				//Все имена строковых таблиц
+				//Все имена строковых таблиц
 				for(pe_resource_viewer::resource_id_list::const_iterator it = strings_id_list.begin(); it != strings_id_list.end(); ++it)
 				{
 					string_data << L"String table [" << (*it) << L"]" << std::endl;
 
-					//Перечислим языки таблицы
+					//Перечислим языки таблицы
 					pe_resource_viewer::resource_language_list langs(res.list_resource_languages(pe_resource_viewer::resource_string, *it));
-					//Для каждого языка получим таблицу строк
+					//Для каждого языка получим таблицу строк
 					for(pe_resource_viewer::resource_language_list::const_iterator lang_it = langs.begin(); lang_it != langs.end(); ++lang_it)
 					{
-						string_data << L" -> Language = " << *lang_it << std::endl; //Запишем язык
-						//Таблица строк
+						string_data << L" -> Language = " << *lang_it << std::endl; //Запишем язык
+						//Таблица строк
 						pe_resource_viewer::string_list strings(res.get_string_table_by_id_lang(*lang_it, *it));
 
-						//Наконец, запишем все строки в поток
+						//Наконец, запишем все строки в поток
 						for(pe_resource_viewer::string_list::const_iterator str_it = strings.begin(); str_it != strings.end(); ++str_it)
-							string_data << L" --> #" << (*str_it).first << L": " << (*str_it).second << std::endl; //ID строки: ее значение
+							string_data << L" --> #" << (*str_it).first << L": " << (*str_it).second << std::endl; //ID строки: ее значение
 					}
 
 					string_data << std::endl;
 				}
 				
-				//Запишем полученные строки в файл
+				//Запишем полученные строки в файл
 				std::ofstream strings_file("strings.txt", std::ios::out | std::ios::trunc | std::ios::binary);
 				if(!strings_file)
 				{
@@ -204,7 +204,7 @@ int main(int argc, char* argv[])
 				}
 
 				std::wstring strings_str(string_data.str());
-				//Запишем буфер, чтобы не париться с локалями и записью юникода в файл
+				//Запишем буфер, чтобы не париться с локалями и записью юникода в файл
 				strings_file.write(reinterpret_cast<const char*>(strings_str.data()), strings_str.length() * sizeof(wchar_t));
 
 				std::cout << "strings.txt created" << std::endl;
@@ -213,7 +213,7 @@ int main(int argc, char* argv[])
 	}
 	catch(const pe_exception& e)
 	{
-		//Если возникла ошибка
+		//Если возникла ошибка
 		std::cout << "Error: " << e.what() << std::endl;
 		return -1;
 	}
diff --git a/samples/rich_overlay_stub_reader/main.cpp b/samples/rich_overlay_stub_reader/main.cpp
index 35cabb8..fcfe0ff 100644
--- a/samples/rich_overlay_stub_reader/main.cpp
+++ b/samples/rich_overlay_stub_reader/main.cpp
@@ -1,9 +1,9 @@
-#include <iostream>
+п»ї#include <iostream>
 #include <fstream>
 #include <pe_factory.h>
 #include "lib.h"
 
-//Пример, показывающий, как получить информацию о стабе PE-файла и rich overlay, который добавляет при компиляции MS Visual Studio
+//Пример, показывающий, как получить информацию о стабе PE-файла и rich overlay, который добавляет при компиляции MS Visual Studio
 int main(int argc, char* argv[])
 {
 	if(argc != 2)
@@ -12,7 +12,7 @@ int main(int argc, char* argv[])
 		return 0;
 	}
 
-	//Открываем файл
+	//Открываем файл
 	std::ifstream pe_file(argv[1], std::ios::in | std::ios::binary);
 	if(!pe_file)
 	{
@@ -22,29 +22,29 @@ int main(int argc, char* argv[])
 
 	try
 	{
-		//Создаем экземпляр PE или PE+ класса с помощью фабрики
+		//Создаем экземпляр PE или PE+ класса с помощью фабрики
 		std::auto_ptr<pe_base> image = pe_factory::create_pe(pe_file);
 
-		//Выведем длину DOS stub'а
+		//Выведем длину DOS stub'а
 		std::cout << "Image stub length: " << image->get_stub_overlay().length() << std::endl << std::endl;
 
-		//Перечисляем все RICH-записи
+		//Перечисляем все RICH-записи
 		pe_base::rich_data_list data = image->get_rich_data();
 		for(pe_base::rich_data_list::const_iterator it = data.begin(); it != data.end(); ++it)
 		{
-			//Выводим информацию о записи
+			//Выводим информацию о записи
 			std::cout << "Number: " << (*it).get_number() << std::endl
 				<< "Times: " << (*it).get_times() << std::endl
 				<< "Version: " << (*it).get_version() << std::endl
 				<< std::endl;
 		}
 
-		//Отобразим информацию о том, есть ли у файла оверлей в конце (у некоторых инсталляторов, например, есть)
+		//Отобразим информацию о том, есть ли у файла оверлей в конце (у некоторых инсталляторов, например, есть)
 		std::cout << "Has overlay in the end: " << (image->has_overlay() ? "YES" : "NO") << std::endl;
 	}
 	catch(const pe_exception& e)
 	{
-		//Если возникла ошибка
+		//Если возникла ошибка
 		std::cout << "Error: " << e.what() << std::endl;
 		return -1;
 	}
diff --git a/samples/section_adder/main.cpp b/samples/section_adder/main.cpp
index 8eeaf21..edd44f1 100644
--- a/samples/section_adder/main.cpp
+++ b/samples/section_adder/main.cpp
@@ -1,9 +1,9 @@
-#include <iostream>
+п»ї#include <iostream>
 #include <fstream>
 #include <pe_factory.h>
 #include "lib.h"
 
-//Пример, показывающий, как добавить секцию в PE-файл и записать в нее какие-нибудь данные
+//Пример, показывающий, как добавить секцию в PE-файл и записать в нее какие-нибудь данные
 int main(int argc, char* argv[])
 {
 	if(argc != 2)
@@ -12,7 +12,7 @@ int main(int argc, char* argv[])
 		return 0;
 	}
 
-	//Открываем файл
+	//Открываем файл
 	std::ifstream pe_file(argv[1], std::ios::in | std::ios::binary);
 	if(!pe_file)
 	{
@@ -22,25 +22,25 @@ int main(int argc, char* argv[])
 
 	try
 	{
-		//Создаем экземпляр PE или PE+ класса с помощью фабрики
+		//Создаем экземпляр PE или PE+ класса с помощью фабрики
 		std::auto_ptr<pe_base> image = pe_factory::create_pe(pe_file);
 		
-		//Секцию можно добавить только после всех существующих, чтобы PE-файл не испортился
-		//Создаем новую секцию
+		//Секцию можно добавить только после всех существующих, чтобы PE-файл не испортился
+		//Создаем новую секцию
 		pe_base::section new_section;
-		new_section.readable(true).writeable(true); //Делаем секцию доступной для чтения и записи
-		new_section.set_name("kaimi.ru"); //Ставим имя секции - максимум 8 символов
-		new_section.set_raw_data("Tralala"); //Устанавливаем данные секции
+		new_section.readable(true).writeable(true); //Делаем секцию доступной для чтения и записи
+		new_section.set_name("kaimi.ru"); //Ставим имя секции - максимум 8 символов
+		new_section.set_raw_data("Tralala"); //Устанавливаем данные секции
 
-		//Добавляем секцию. Все адреса пересчитаются автоматически
-		//Вызов вернет ссылку на уже добавленную секцию с пересчитанными адресами
-		//Совсем пустую секцию к образу добавить нельзя, у нее должен быть ненулевой размер данных или виртуальный размер
+		//Добавляем секцию. Все адреса пересчитаются автоматически
+		//Вызов вернет ссылку на уже добавленную секцию с пересчитанными адресами
+		//Совсем пустую секцию к образу добавить нельзя, у нее должен быть ненулевой размер данных или виртуальный размер
 		pe_base::section& added_section = image->add_section(new_section);
 
-		//Если нужно изменить виртуальный размер секции, то делается это так:
+		//Если нужно изменить виртуальный размер секции, то делается это так:
 		image->set_section_virtual_size(added_section, 0x1000);
 		
-		//Создаем новый PE-файл
+		//Создаем новый PE-файл
 		std::string base_file_name(argv[1]);
 		std::string::size_type slash_pos;
 		if((slash_pos = base_file_name.find_last_of("/\\")) != std::string::npos)
@@ -54,14 +54,14 @@ int main(int argc, char* argv[])
 			return -1;
 		}
 
-		//Пересобираем PE-файл
+		//Пересобираем PE-файл
 		image->rebuild_pe(new_pe_file);
 
 		std::cout << "PE was rebuilt and saved to " << base_file_name << std::endl;
 	}
 	catch(const pe_exception& e)
 	{
-		//Если возникла ошибка
+		//Если возникла ошибка
 		std::cout << "Error: " << e.what() << std::endl;
 		return -1;
 	}
diff --git a/samples/sections_and_addresses/main.cpp b/samples/sections_and_addresses/main.cpp
index cda14dc..43e2bd2 100644
--- a/samples/sections_and_addresses/main.cpp
+++ b/samples/sections_and_addresses/main.cpp
@@ -1,9 +1,9 @@
-#include <iostream>
+п»ї#include <iostream>
 #include <fstream>
 #include <pe_factory.h>
 #include "lib.h"
 
-//Пример, показывающий, как работать с секциями в PE-файле
+//Пример, показывающий, как работать с секциями в PE-файле
 int main(int argc, char* argv[])
 {
 	if(argc != 2)
@@ -12,7 +12,7 @@ int main(int argc, char* argv[])
 		return 0;
 	}
 
-	//Открываем файл
+	//Открываем файл
 	std::ifstream pe_file(argv[1], std::ios::in | std::ios::binary);
 	if(!pe_file)
 	{
@@ -22,22 +22,22 @@ int main(int argc, char* argv[])
 
 	try
 	{
-		//Создаем экземпляр PE или PE+ класса с помощью фабрики
+		//Создаем экземпляр PE или PE+ класса с помощью фабрики
 		std::auto_ptr<pe_base> image = pe_factory::create_pe(pe_file);
 
-		//Выведем имя секции, в которой находится точка входа PE-файла
-		//В хитрых PE-файлах точка входа может находиться в заголовке, тогда section_from_rva бросит исключение
+		//Выведем имя секции, в которой находится точка входа PE-файла
+		//В хитрых PE-файлах точка входа может находиться в заголовке, тогда section_from_rva бросит исключение
 		std::cout << "EP section name: " << image->section_from_rva(image->get_ep()).get_name() << std::endl;
-		//Длина "сырых" (raw) данных секции
+		//Длина "сырых" (raw) данных секции
 		std::cout << "EP section data length: " << image->section_data_length_from_rva(image->get_ep()) << std::endl;
 
-		//Если у PE-файла есть импорты, выведем имя секции, в которой они находятся
+		//Если у PE-файла есть импорты, выведем имя секции, в которой они находятся
 		if(image->has_imports())
 			std::cout << "Import section name: " << image->section_from_directory(IMAGE_DIRECTORY_ENTRY_IMPORT).get_name() << std::endl;
 	}
 	catch(const pe_exception& e)
 	{
-		//Если возникла ошибка
+		//Если возникла ошибка
 		std::cout << "Error: " << e.what() << std::endl;
 		return -1;
 	}
diff --git a/samples/tls_editor/main.cpp b/samples/tls_editor/main.cpp
index e85a6ce..f122e81 100644
--- a/samples/tls_editor/main.cpp
+++ b/samples/tls_editor/main.cpp
@@ -1,21 +1,18 @@
-#include <iostream>
+п»ї#include <iostream>
 #include <fstream>
 #include <pe_factory.h>
 #include "lib.h"
 
-//Пример, показывающий, как редактировать TLS (Thread Local Storage) у PE-файлов
+//Пример, показывающий, как редактировать TLS (Thread Local Storage) у PE-файлов
 int main(int argc, char* argv[])
 {
-	/*
 	if(argc != 2)
 	{
 		std::cout << "Usage: tls_editor.exe PE_FILE" << std::endl;
 		return 0;
 	}
-	*/
 
-	//Открываем файл
-	argv[1] = "../../../mimimi/tests/Project1orig.exe";
+	//Открываем файл
 	std::ifstream pe_file(argv[1], std::ios::in | std::ios::binary);
 	if(!pe_file)
 	{
@@ -25,39 +22,39 @@ int main(int argc, char* argv[])
 
 	try
 	{
-		//Создаем экземпляр PE или PE+ класса с помощью фабрики
+		//Создаем экземпляр PE или PE+ класса с помощью фабрики
 		std::auto_ptr<pe_base> image = pe_factory::create_pe(pe_file);
 
-		//Получим информацию о TLS PE-файла
-		//Если TLS нет, этот вызов выбросит исключение
+		//Получим информацию о TLS PE-файла
+		//Если TLS нет, этот вызов выбросит исключение
 		pe_base::tls_info info = image->get_tls_info();
 		
-		//Пересоберем TLS
-		//Он, вероятно, будет иметь больший размер, чем до нашего редактирования,
-		//поэтому запишем его в новую секцию, чтобы все поместилось
-		//(мы не можем расширять существующие секции, если только секция не в самом конце файла)
+		//Пересоберем TLS
+		//Он, вероятно, будет иметь больший размер, чем до нашего редактирования,
+		//поэтому запишем его в новую секцию, чтобы все поместилось
+		//(мы не можем расширять существующие секции, если только секция не в самом конце файла)
 		pe_base::section new_tls;
-		new_tls.get_raw_data().resize(1); //Мы не можем добавлять пустые секции, поэтому пусть у нее будет начальный размер данных 1
-		new_tls.set_name("new_tls"); //Имя секции
-		new_tls.readable(true); //Доступна на чтение
-		pe_base::section& attached_section = image->add_section(new_tls); //Добавим секцию и получим ссылку на добавленную секцию с просчитанными размерами
+		new_tls.get_raw_data().resize(1); //Мы не можем добавлять пустые секции, поэтому пусть у нее будет начальный размер данных 1
+		new_tls.set_name("new_tls"); //Имя секции
+		new_tls.readable(true); //Доступна на чтение
+		pe_base::section& attached_section = image->add_section(new_tls); //Добавим секцию и получим ссылку на добавленную секцию с просчитанными размерами
 
-		if(info.get_callbacks_rva() != 0) //Если у TLS есть хотя бы один коллбек
-			info.add_tls_callback(0x100); //Добавим новый коллбек в TLS - относительный адрес, скорее всего, некорректен, поэтому программа не запустится (просто для примера)
+		if(info.get_callbacks_rva() != 0) //Если у TLS есть хотя бы один коллбек
+			info.add_tls_callback(0x100); //Добавим новый коллбек в TLS - относительный адрес, скорее всего, некорректен, поэтому программа не запустится (просто для примера)
 
-		info.set_raw_data("Hello, world!"); //Установим или заменим "сырые" данные TLS
-		info.set_raw_data_start_rva(image->rva_from_section_offset(attached_section, 0)); //Расположим их с начала добавленной секции
-		info.recalc_raw_data_end_rva(); //Просчитаем новый конечный адрес "сырых" данных
+		info.set_raw_data("Hello, world!"); //Установим или заменим "сырые" данные TLS
+		info.set_raw_data_start_rva(image->rva_from_section_offset(attached_section, 0)); //Расположим их с начала добавленной секции
+		info.recalc_raw_data_end_rva(); //Просчитаем новый конечный адрес "сырых" данных
 
-		//Пересобираем TLS, расположив их с 50-го байта (будет выровнено, секция будет автоматически расширена) новой секции и записав новые данные TLS в PE-заголовок
-		//По умолчанию функция пересобирает также TLS-коллбеки и "сырые" данные TLS, располагая их по указанным в структуре info адресам
-		//Опция expand позволяет задать, как должны распологаться "сырые" данные
-		//tls_data_expand_raw позволяет увеличить "сырой" размер секции, то есть размер в файле
-		//tls_data_expand_virtual позволяет увеличить виртуальный размер секции с данными TLS
-		//Если не хватит места под данные TLS, будет записана только их часть, или вообще ничего записано не будет
+		//Пересобираем TLS, расположив их с 50-го байта (будет выровнено, секция будет автоматически расширена) новой секции и записав новые данные TLS в PE-заголовок
+		//По умолчанию функция пересобирает также TLS-коллбеки и "сырые" данные TLS, располагая их по указанным в структуре info адресам
+		//Опция expand позволяет задать, как должны распологаться "сырые" данные
+		//tls_data_expand_raw позволяет увеличить "сырой" размер секции, то есть размер в файле
+		//tls_data_expand_virtual позволяет увеличить виртуальный размер секции с данными TLS
+		//Если не хватит места под данные TLS, будет записана только их часть, или вообще ничего записано не будет
 		image->rebuild_tls(info, attached_section, 50); 
 
-		//Создаем новый PE-файл
+		//Создаем новый PE-файл
 		std::string base_file_name(argv[1]);
 		std::string::size_type slash_pos;
 		if((slash_pos = base_file_name.find_last_of("/\\")) != std::string::npos)
@@ -71,14 +68,14 @@ int main(int argc, char* argv[])
 			return -1;
 		}
 
-		//Пересобираем PE-файл
+		//Пересобираем PE-файл
 		image->rebuild_pe(new_pe_file);
 
 		std::cout << "PE was rebuilt and saved to " << base_file_name << std::endl;
 	}
 	catch(const pe_exception& e)
 	{
-		//Если возникла ошибка
+		//Если возникла ошибка
 		std::cout << "Error: " << e.what() << std::endl;
 		return -1;
 	}
diff --git a/samples/tls_reader/main.cpp b/samples/tls_reader/main.cpp
index b2bb31e..c2ccc2d 100644
--- a/samples/tls_reader/main.cpp
+++ b/samples/tls_reader/main.cpp
@@ -1,10 +1,10 @@
-#include <iostream>
+п»ї#include <iostream>
 #include <fstream>
 #include <pe_factory.h>
 #include "lib.h"
 
-//Пример, показывающий, как считать и получить информацию о статическом TLS (Thread Local Storage, локальная память потока)
-//PE или PE+ файла
+//Пример, показывающий, как считать и получить информацию о статическом TLS (Thread Local Storage, локальная память потока)
+//PE или PE+ файла
 int main(int argc, char* argv[])
 {
 	if(argc != 2)
@@ -13,7 +13,7 @@ int main(int argc, char* argv[])
 		return 0;
 	}
 
-	//Открываем файл
+	//Открываем файл
 	std::ifstream pe_file(argv[1], std::ios::in | std::ios::binary);
 	if(!pe_file)
 	{
@@ -23,29 +23,29 @@ int main(int argc, char* argv[])
 
 	try
 	{
-		//Создаем экземпляр PE или PE+ класса с помощью фабрики
+		//Создаем экземпляр PE или PE+ класса с помощью фабрики
 		std::auto_ptr<pe_base> image = pe_factory::create_pe(pe_file);
 
 		std::cout << "Reading PE TLS info..." << std::hex << std::showbase << std::endl << std::endl;
 		
-		//Получаем информацию о TLS
+		//Получаем информацию о TLS
 		const pe_base::tls_info info = image->get_tls_info();
 
-		//Выводим информацию о TLS
+		//Выводим информацию о TLS
 		std::cout << "Callbacks RVA: " << info.get_callbacks_rva() << std::endl
 			<< "Index RVA: " << info.get_index_rva() << std::endl
 			<< "Raw data start RVA: " << info.get_raw_data_start_rva() << std::endl
 			<< "Raw data end RVA: " << info.get_raw_data_end_rva() << std::endl
 			<< "Size of zero fill: " << info.get_size_of_zero_fill() << std::endl;
 
-		//Выведем TLS-коллбеки:
+		//Выведем TLS-коллбеки:
 		const pe_base::tls_info::tls_callback_list& tls_callbacks = info.get_tls_callbacks();
 		for(pe_base::tls_info::tls_callback_list::const_iterator it = tls_callbacks.begin(); it != tls_callbacks.end(); ++it)
 			std::cout << "Callback: " << (*it) << std::endl;
 	}
 	catch(const pe_exception& e)
 	{
-		//Если возникла ошибка
+		//Если возникла ошибка
 		std::cout << "Error: " << e.what() << std::endl;
 		return -1;
 	}
-- 
GitLab