Merged PR 4205675: Add option to execute eBPF program via JIT or interpreter
Add option to execute eBPF program via JIT or interpreter
This commit is contained in:
Родитель
741d04401d
Коммит
125c183bee
|
@ -73,8 +73,8 @@ Global
|
|||
{BD587773-916F-365F-82C0-2E8DB12F40A0}.MinSizeRel|x86.ActiveCfg = MinSizeRel|x64
|
||||
{BD587773-916F-365F-82C0-2E8DB12F40A0}.Release|ARM.ActiveCfg = Release|x64
|
||||
{BD587773-916F-365F-82C0-2E8DB12F40A0}.Release|ARM64.ActiveCfg = Release|x64
|
||||
{BD587773-916F-365F-82C0-2E8DB12F40A0}.Release|x64.ActiveCfg = Release|x64
|
||||
{BD587773-916F-365F-82C0-2E8DB12F40A0}.Release|x64.Build.0 = Release|x64
|
||||
{BD587773-916F-365F-82C0-2E8DB12F40A0}.Release|x64.ActiveCfg = MinSizeRel|x64
|
||||
{BD587773-916F-365F-82C0-2E8DB12F40A0}.Release|x64.Build.0 = MinSizeRel|x64
|
||||
{BD587773-916F-365F-82C0-2E8DB12F40A0}.Release|x86.ActiveCfg = Release|x64
|
||||
{BD587773-916F-365F-82C0-2E8DB12F40A0}.RelWithDebInfo|ARM.ActiveCfg = RelWithDebInfo|x64
|
||||
{BD587773-916F-365F-82C0-2E8DB12F40A0}.RelWithDebInfo|ARM64.ActiveCfg = RelWithDebInfo|x64
|
||||
|
|
|
@ -27,19 +27,6 @@
|
|||
<ProjectName>EbpfApi</ProjectName>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
|
@ -58,12 +45,6 @@
|
|||
</ImportGroup>
|
||||
<ImportGroup Label="Shared">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
|
@ -71,12 +52,6 @@
|
|||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
<TargetName>EbpfApi</TargetName>
|
||||
|
@ -85,44 +60,8 @@
|
|||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<TargetName>EbpfApi</TargetName>
|
||||
<OutDir>$(SolutionDir)..\bin\$(Platform)\$(Configuration)\</OutDir>
|
||||
<OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;EBPFAPI_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableUAC>false</EnableUAC>
|
||||
<ModuleDefinitionFile>Source.def</ModuleDefinitionFile>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;EBPFAPI_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableUAC>false</EnableUAC>
|
||||
<ModuleDefinitionFile>Source.def</ModuleDefinitionFile>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
|
@ -132,6 +71,7 @@
|
|||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)src\ebpf\include</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
|
@ -152,7 +92,7 @@
|
|||
<ConformanceMode>true</ConformanceMode>
|
||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<AdditionalIncludeDirectories>..\libs\api;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)src\ebpf\include</AdditionalIncludeDirectories>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
|
@ -162,6 +102,7 @@
|
|||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableUAC>false</EnableUAC>
|
||||
<ModuleDefinitionFile>Source.def</ModuleDefinitionFile>
|
||||
<AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
|
|
|
@ -4,11 +4,12 @@
|
|||
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
|
||||
#include "pch.h"
|
||||
#include <stdint.h>
|
||||
#include "api.h"
|
||||
|
||||
namespace Platform {
|
||||
BOOL
|
||||
DeviceIoControl(
|
||||
_In_ HANDLE device_handle,
|
||||
_In_ ebpf_handle_t device_handle,
|
||||
uint32_t io_control_code,
|
||||
_In_reads_bytes_opt_(input_buffer_size) void* input_buffer,
|
||||
uint32_t input_buffer_size,
|
||||
|
@ -24,11 +25,11 @@ namespace Platform {
|
|||
input_buffer_size,
|
||||
output_buffer,
|
||||
output_buffer_size,
|
||||
(LPDWORD)count_of_bytes_returned,
|
||||
(DWORD*)count_of_bytes_returned,
|
||||
overlapped);
|
||||
}
|
||||
|
||||
HANDLE
|
||||
ebpf_handle_t
|
||||
CreateFileW(
|
||||
_In_z_ PCWSTR file_name,
|
||||
uint32_t desired_access,
|
||||
|
@ -36,7 +37,7 @@ namespace Platform {
|
|||
_In_opt_ SECURITY_ATTRIBUTES* security_attributed,
|
||||
uint32_t creation_disposition,
|
||||
uint32_t flags_and_attributed,
|
||||
_In_opt_ HANDLE template_file)
|
||||
_In_opt_ ebpf_handle_t template_file)
|
||||
{
|
||||
return ::CreateFileW(
|
||||
file_name,
|
||||
|
@ -49,7 +50,7 @@ namespace Platform {
|
|||
}
|
||||
BOOL
|
||||
CloseHandle(
|
||||
_In_ _Post_ptr_invalid_ HANDLE handle)
|
||||
_In_ _Post_ptr_invalid_ ebpf_handle_t handle)
|
||||
{
|
||||
return ::CloseHandle(handle);
|
||||
}
|
||||
|
|
|
@ -12,11 +12,17 @@ extern "C" {
|
|||
|
||||
typedef void* ebpf_handle_t;
|
||||
|
||||
typedef enum _ebpf_execution_type
|
||||
{
|
||||
EBPF_EXECUTION_JIT,
|
||||
EBPF_EXECUTION_INTERPRET
|
||||
} ebpf_execution_type_t;
|
||||
|
||||
uint32_t ebpf_api_initiate();
|
||||
|
||||
void ebpf_api_terminate();
|
||||
|
||||
uint32_t ebpf_api_load_program(const char* file, const char* section_name, ebpf_handle_t* handle, const char** error_message);
|
||||
uint32_t ebpf_api_load_program(const char* file, const char* section_name, ebpf_execution_type_t execution_type, ebpf_handle_t* handle, const char** error_message);
|
||||
void ebpf_api_free_error_message(const char* error_message);
|
||||
void ebpf_api_unload_program(ebpf_handle_t handle);
|
||||
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
*/
|
||||
|
||||
#include "pch.h"
|
||||
#include "platform.h"
|
||||
#include "tlv.h"
|
||||
|
||||
extern "C"
|
||||
|
@ -12,6 +11,7 @@ extern "C"
|
|||
#include "api.h"
|
||||
#include "ubpf.h"
|
||||
}
|
||||
#include "platform.h"
|
||||
|
||||
#include "protocol.h"
|
||||
#include "unwind_helper.h"
|
||||
|
@ -78,7 +78,7 @@ static uint32_t invoke_ioctl(ebpf_handle_t handle, request_t & request, reply_t
|
|||
|
||||
auto result = Platform::DeviceIoControl(
|
||||
handle,
|
||||
(uint32_t)IOCTL_EBPFCTL_METHOD_BUFFERED,
|
||||
IOCTL_EBPFCTL_METHOD_BUFFERED,
|
||||
request_ptr,
|
||||
request_size,
|
||||
reply_ptr,
|
||||
|
@ -224,7 +224,47 @@ static uint64_t helper_resolver(void* context, uint32_t helper)
|
|||
return reply.address[0];
|
||||
}
|
||||
|
||||
uint32_t ebpf_api_load_program(const char* file_name, const char* section_name, ebpf_handle_t* handle, const char** error_message)
|
||||
static uint32_t resolve_maps_in_byte_code(std::vector<uint8_t>& byte_code)
|
||||
{
|
||||
ebpf_inst* instructions = reinterpret_cast<ebpf_inst*>(byte_code.data());
|
||||
ebpf_inst* instruction_end = reinterpret_cast<ebpf_inst*>(byte_code.data() + byte_code.size());
|
||||
for (size_t index = 0; index < byte_code.size() / sizeof(ebpf_inst); index++)
|
||||
{
|
||||
ebpf_inst& first_instruction = instructions[index];
|
||||
ebpf_inst& second_instruction = instructions[index + 1];
|
||||
if (first_instruction.opcode != INST_OP_LDDW_IMM)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (&instructions[index + 1] >= instruction_end)
|
||||
{
|
||||
return ERROR_INVALID_PARAMETER;
|
||||
}
|
||||
index++;
|
||||
|
||||
// Check for LD_MAP flag
|
||||
if (first_instruction.src != 1)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// Clear LD_MAP flag
|
||||
first_instruction.src = 0;
|
||||
|
||||
// Resolve FD -> map address.
|
||||
uint64_t imm = static_cast<uint64_t>(first_instruction.imm) | (static_cast<uint64_t>(second_instruction.imm) << 32);
|
||||
uint64_t new_imm = map_resolver(device_handle, imm);
|
||||
if (new_imm == 0)
|
||||
{
|
||||
return ERROR_INVALID_PARAMETER;
|
||||
}
|
||||
first_instruction.imm = static_cast<uint32_t>(new_imm);
|
||||
second_instruction.imm = static_cast<uint32_t>(new_imm >> 32);
|
||||
}
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
uint32_t ebpf_api_load_program(const char* file_name, const char* section_name, ebpf_execution_type_t execution_type, ebpf_handle_t* handle, const char** error_message)
|
||||
{
|
||||
std::vector<uint8_t> byte_code(MAX_CODE_SIZE);
|
||||
size_t byte_code_size = byte_code.size();
|
||||
|
@ -265,42 +305,55 @@ uint32_t ebpf_api_load_program(const char* file_name, const char* section_name,
|
|||
return ERROR_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
// JIT code.
|
||||
vm = ubpf_create();
|
||||
if (vm == nullptr)
|
||||
{
|
||||
return ERROR_OUTOFMEMORY;
|
||||
}
|
||||
byte_code.resize(byte_code_size);
|
||||
|
||||
if (ubpf_register_map_resolver(vm, device_handle, map_resolver) < 0)
|
||||
result = resolve_maps_in_byte_code(byte_code);
|
||||
if (result != ERROR_SUCCESS)
|
||||
{
|
||||
return ERROR_INVALID_PARAMETER;
|
||||
return result;
|
||||
}
|
||||
|
||||
if (ubpf_register_helper_resolver(vm, device_handle, helper_resolver) < 0)
|
||||
if (execution_type == EBPF_EXECUTION_JIT)
|
||||
{
|
||||
return ERROR_INVALID_PARAMETER;
|
||||
}
|
||||
// JIT code.
|
||||
vm = ubpf_create();
|
||||
if (vm == nullptr)
|
||||
{
|
||||
return ERROR_OUTOFMEMORY;
|
||||
}
|
||||
|
||||
if (ubpf_load(vm, byte_code.data(), static_cast<uint32_t>(byte_code.size()), const_cast<char**>(error_message)) < 0)
|
||||
if (ubpf_register_helper_resolver(vm, device_handle, helper_resolver) < 0)
|
||||
{
|
||||
return ERROR_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
if (ubpf_load(vm, byte_code.data(), static_cast<uint32_t>(byte_code.size()), const_cast<char**>(error_message)) < 0)
|
||||
{
|
||||
return ERROR_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
if (ubpf_translate(vm, machine_code.data(), &machine_code_size, const_cast<char**>(error_message)))
|
||||
{
|
||||
return ERROR_INVALID_PARAMETER;
|
||||
}
|
||||
machine_code.resize(machine_code_size);
|
||||
|
||||
request_buffer.resize(machine_code.size() + offsetof(ebpf_operation_load_code_request_t, code));
|
||||
auto request = reinterpret_cast<ebpf_operation_load_code_request_t*>(request_buffer.data());
|
||||
request->header.id = ebpf_operation_id_t::EBPF_OPERATION_LOAD_CODE;
|
||||
request->header.length = static_cast<uint16_t>(request_buffer.size());
|
||||
request->code_type = EBPF_CODE_NATIVE;
|
||||
std::copy(machine_code.begin(), machine_code.end(), request_buffer.begin() + offsetof(ebpf_operation_load_code_request_t, code));
|
||||
}
|
||||
else
|
||||
{
|
||||
return ERROR_INVALID_PARAMETER;
|
||||
request_buffer.resize(byte_code.size() + offsetof(ebpf_operation_load_code_request_t, code));
|
||||
auto request = reinterpret_cast<ebpf_operation_load_code_request_t*>(request_buffer.data());
|
||||
request->header.id = ebpf_operation_id_t::EBPF_OPERATION_LOAD_CODE;
|
||||
request->header.length = static_cast<uint16_t>(request_buffer.size());
|
||||
request->code_type = EBPF_CODE_EBPF;
|
||||
std::copy(byte_code.begin(), byte_code.end(), request_buffer.begin() + offsetof(ebpf_operation_load_code_request_t, code));
|
||||
}
|
||||
|
||||
if (ubpf_translate(vm, machine_code.data(), &machine_code_size, const_cast<char**>(error_message)))
|
||||
{
|
||||
return ERROR_INVALID_PARAMETER;
|
||||
}
|
||||
machine_code.resize(machine_code_size);
|
||||
|
||||
request_buffer.resize(machine_code.size() + offsetof(ebpf_operation_load_code_request_t, code));
|
||||
auto request = reinterpret_cast<ebpf_operation_load_code_request_t*>(request_buffer.data());
|
||||
request->header.id = ebpf_operation_id_t::EBPF_OPERATION_LOAD_CODE;
|
||||
request->header.length = static_cast<uint16_t>(request_buffer.size());
|
||||
request->code_type = EBPF_CODE_NATIVE;
|
||||
std::copy(machine_code.begin(), machine_code.end(), request_buffer.begin() + offsetof(ebpf_operation_load_code_request_t, code));
|
||||
|
||||
result = invoke_ioctl(device_handle, request_buffer, reply);
|
||||
|
||||
if (result != ERROR_SUCCESS)
|
||||
|
|
|
@ -123,7 +123,7 @@
|
|||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>_DEBUG;EBPFAPI_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
|
@ -143,11 +143,11 @@
|
|||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>NDEBUG;EBPFAPI_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<AdditionalIncludeDirectories>$(PrevailDir)src;..\..\..\..\external\ubpf\vm\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)src\ebpf\include;$(SolutionDir)external\ubpf\vm;$(SolutionDir)external\ubpf\vm\inc;$(SolutionDir)external\ebpf-verifier\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<LanguageStandard>stdcpplatest</LanguageStandard>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
|
@ -163,13 +163,13 @@
|
|||
<ClInclude Include="..\..\include\protocol.h" />
|
||||
<ClInclude Include="..\..\include\tlv.h" />
|
||||
<ClInclude Include="..\..\include\types.h" />
|
||||
<ClInclude Include="..\..\include\unwind_helper.h" />
|
||||
<ClInclude Include="..\..\include\windows_platform.hpp" />
|
||||
<ClInclude Include="framework.h" />
|
||||
<ClInclude Include="platform.h">
|
||||
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
|
||||
</ClInclude>
|
||||
<ClInclude Include="pch.h" />
|
||||
<ClInclude Include="unwind_helper.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="api.cpp" />
|
||||
|
|
|
@ -8,7 +8,7 @@ namespace Platform
|
|||
{
|
||||
BOOL
|
||||
DeviceIoControl(
|
||||
_In_ HANDLE device_handle,
|
||||
_In_ ebpf_handle_t device_handle,
|
||||
uint32_t io_control_code,
|
||||
_In_reads_bytes_opt_(input_buffer_size) void* input_buffer,
|
||||
uint32_t input_buffer_size,
|
||||
|
@ -18,7 +18,7 @@ namespace Platform
|
|||
_Inout_opt_ OVERLAPPED* overlapped
|
||||
);
|
||||
|
||||
HANDLE
|
||||
ebpf_handle_t
|
||||
CreateFileW(
|
||||
_In_ PCWSTR file_name,
|
||||
uint32_t desired_access,
|
||||
|
@ -26,11 +26,11 @@ namespace Platform
|
|||
_In_opt_ SECURITY_ATTRIBUTES* security_attributed,
|
||||
uint32_t creation_disposition,
|
||||
uint32_t flags_and_attributed,
|
||||
_In_opt_ HANDLE template_file
|
||||
_In_opt_ ebpf_handle_t template_file
|
||||
);
|
||||
|
||||
BOOL
|
||||
CloseHandle(
|
||||
_In_ _Post_ptr_invalid_ HANDLE handle
|
||||
_In_ _Post_ptr_invalid_ ebpf_handle_t handle
|
||||
);
|
||||
}
|
||||
|
|
|
@ -14,6 +14,11 @@
|
|||
#define RTL_COUNT_OF(arr) (sizeof(arr) / sizeof(arr[0]))
|
||||
#define RTL_OFFSET_OF(s, m) (((size_t)&((s*)0)->m))
|
||||
|
||||
#if defined(NTDDI_VERSION)
|
||||
#define false FALSE
|
||||
#define true TRUE
|
||||
#endif
|
||||
|
||||
typedef struct _ebpf_core_code_entry {
|
||||
// pointer to code buffer
|
||||
ebpf_code_type_t code_type;
|
||||
|
@ -86,7 +91,7 @@ static uint64_t _ebpf_core_insert_code_entry(ebpf_core_code_entry_t* code)
|
|||
break;
|
||||
}
|
||||
}
|
||||
ebpf_lock_unlock(&_ebpf_core_map_entry_table_lock, &state);
|
||||
ebpf_lock_unlock(&_ebpf_core_code_entry_table_lock, &state);
|
||||
return handle;
|
||||
}
|
||||
|
||||
|
@ -199,6 +204,7 @@ ebpf_core_initialize()
|
|||
{
|
||||
ebpf_lock_create(&_ebpf_core_code_entry_table_lock);
|
||||
ebpf_lock_create(&_ebpf_core_map_entry_table_lock);
|
||||
ebpf_lock_create(&_ebpf_core_hook_table_lock);
|
||||
return EBPF_ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -284,13 +290,23 @@ ebpf_core_protocol_load_code(
|
|||
size_t code_size = request->header.length - RTL_OFFSET_OF(ebpf_operation_load_code_request_t, code);
|
||||
size_t allocation_size = 0;
|
||||
ebpf_core_code_entry_t* code = NULL;
|
||||
ebpf_memory_type_t memory_type;
|
||||
retval = ebpf_safe_size_t_add(code_size, sizeof(ebpf_core_code_entry_t), &allocation_size);
|
||||
if (retval != EBPF_ERROR_SUCCESS)
|
||||
{
|
||||
goto Done;
|
||||
}
|
||||
|
||||
code = ebpf_allocate(allocation_size, EBPF_MEMORY_EXECUTE);
|
||||
if (request->code_type == EBPF_CODE_NATIVE)
|
||||
{
|
||||
memory_type = EBPF_MEMORY_EXECUTE;
|
||||
}
|
||||
else
|
||||
{
|
||||
memory_type = EBPF_MEMORY_NO_EXECUTE;
|
||||
}
|
||||
|
||||
code = ebpf_allocate(allocation_size, memory_type);
|
||||
if (!code)
|
||||
{
|
||||
retval = EBPF_ERROR_OUT_OF_RESOURCES;
|
||||
|
@ -305,7 +321,7 @@ ebpf_core_protocol_load_code(
|
|||
}
|
||||
else
|
||||
{
|
||||
char* error_message;
|
||||
char* error_message = NULL;
|
||||
code->code_type = EBPF_CODE_EBPF;
|
||||
code->vm = ubpf_create();
|
||||
if (!code->vm)
|
||||
|
@ -313,9 +329,15 @@ ebpf_core_protocol_load_code(
|
|||
retval = EBPF_ERROR_OUT_OF_RESOURCES;
|
||||
goto Done;
|
||||
}
|
||||
|
||||
// BUG - ubpf implements bounds checking to detect interpreted code accesing memory out of bounds.
|
||||
// Currently this is flagging valid access checks and failing.
|
||||
toggle_bounds_check(code->vm, false);
|
||||
|
||||
ubpf_register_helper_resolver(code->vm, code, ebpf_core_interpreter_helper_resolver);
|
||||
if (ubpf_load(code->vm, &request->code[0], (uint32_t)code_size, &error_message) != 0)
|
||||
{
|
||||
ebpf_free(error_message);
|
||||
retval = EBPF_ERROR_INVALID_PARAMETER;
|
||||
goto Done;
|
||||
}
|
||||
|
@ -375,7 +397,7 @@ ebpf_error_code_t ebpf_core_invoke_hook(
|
|||
{
|
||||
ebpf_core_code_entry_t* code = NULL;
|
||||
ebpf_hook_function function_pointer;
|
||||
char* error_message;
|
||||
char* error_message = NULL;
|
||||
|
||||
code = _ebpf_core_get_hook_entry(hook_point);
|
||||
if (code)
|
||||
|
|
|
@ -58,22 +58,6 @@
|
|||
<DriverType>KMDF</DriverType>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<DriverTargetPlatform>Universal</DriverTargetPlatform>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<DriverTargetPlatform>Universal</DriverTargetPlatform>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
|
@ -91,37 +75,6 @@
|
|||
<DriverTargetPlatform>Universal</DriverTargetPlatform>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'" Label="Configuration">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="Configuration">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<DriverTargetPlatform>Universal</DriverTargetPlatform>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<DriverTargetPlatform>Universal</DriverTargetPlatform>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<DriverTargetPlatform>Universal</DriverTargetPlatform>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
|
@ -129,17 +82,6 @@
|
|||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>_DEBUG;WINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP;WINAPI_PARTITION_DESKTOP=1;WINAPI_PARTITION_SYSTEM=1;WINAPI_PARTITION_APP=1;WINAPI_PARTITION_PC_APP=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>WINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP;WINAPI_PARTITION_DESKTOP=1;WINAPI_PARTITION_SYSTEM=1;WINAPI_PARTITION_APP=1;WINAPI_PARTITION_PC_APP=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>_DEBUG;WINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP;WINAPI_PARTITION_DESKTOP=1;WINAPI_PARTITION_SYSTEM=1;WINAPI_PARTITION_APP=1;WINAPI_PARTITION_PC_APP=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
|
@ -151,28 +93,8 @@
|
|||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>WINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP;WINAPI_PARTITION_DESKTOP=1;WINAPI_PARTITION_SYSTEM=1;WINAPI_PARTITION_APP=1;WINAPI_PARTITION_PC_APP=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>_DEBUG;WINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP;WINAPI_PARTITION_DESKTOP=1;WINAPI_PARTITION_SYSTEM=1;WINAPI_PARTITION_APP=1;WINAPI_PARTITION_PC_APP=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>WINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP;WINAPI_PARTITION_DESKTOP=1;WINAPI_PARTITION_SYSTEM=1;WINAPI_PARTITION_APP=1;WINAPI_PARTITION_PC_APP=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>_DEBUG;WINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP;WINAPI_PARTITION_DESKTOP=1;WINAPI_PARTITION_SYSTEM=1;WINAPI_PARTITION_APP=1;WINAPI_PARTITION_PC_APP=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>WINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP;WINAPI_PARTITION_DESKTOP=1;WINAPI_PARTITION_SYSTEM=1;WINAPI_PARTITION_APP=1;WINAPI_PARTITION_PC_APP=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)\src\ebpf\include;$(SolutionDir)\external\ubpf\vm\inc;$(SolutionDir)\external\ubpf\vm;$(SolutionDir)\src\ebpf\libs\execution_context\kernel;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<DisableSpecificWarnings>4201;4100;%(DisableSpecificWarnings)</DisableSpecificWarnings>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
#include "ebpf_core.h"
|
||||
#include "ebpf_platform.h"
|
||||
#include <Windows.h>
|
||||
#include <mutex>
|
||||
|
||||
std::set<uint64_t> _executable_segments;
|
||||
|
||||
|
@ -58,18 +59,26 @@ ebpf_error_code_t ebpf_safe_size_t_add(size_t augend, size_t addend, size_t* res
|
|||
|
||||
void ebpf_lock_create(ebpf_lock_t* lock)
|
||||
{
|
||||
auto mutex = new std::mutex();
|
||||
*reinterpret_cast<std::mutex**>(lock) = mutex;
|
||||
}
|
||||
|
||||
void ebpf_lock_destroy(ebpf_lock_t* lock)
|
||||
{
|
||||
auto mutex = *reinterpret_cast<std::mutex**>(lock);
|
||||
delete mutex;
|
||||
}
|
||||
|
||||
void ebpf_lock_lock(ebpf_lock_t* lock, ebpf_lock_state_t* state)
|
||||
{
|
||||
auto mutex = *reinterpret_cast<std::mutex**>(lock);
|
||||
mutex->lock();
|
||||
}
|
||||
|
||||
void ebpf_lock_unlock(ebpf_lock_t* lock, ebpf_lock_state_t* state)
|
||||
{
|
||||
auto mutex = *reinterpret_cast<std::mutex**>(lock);
|
||||
mutex->unlock();
|
||||
}
|
||||
|
||||
typedef struct _hash_table {
|
||||
|
|
|
@ -26,19 +26,6 @@
|
|||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
|
@ -82,40 +69,6 @@
|
|||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>
|
||||
</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>
|
||||
</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
|
@ -143,8 +96,10 @@
|
|||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)\src\ebpf\include;$(SolutionDir)\external\ubpf\vm\inc;$(SolutionDir)\external\ubpf\vm;$(SolutionDir)\src\ebpf\libs\execution_context\user;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>
|
||||
|
|
|
@ -11,7 +11,12 @@
|
|||
|
||||
void* ubpf_alloc(size_t size, size_t count)
|
||||
{
|
||||
return ExAllocatePool(POOL_FLAG_NON_PAGED, size * count);
|
||||
void * memory = ExAllocatePool(POOL_FLAG_NON_PAGED, size * count);
|
||||
if (memory)
|
||||
{
|
||||
memset(memory, 0, size * count);
|
||||
}
|
||||
return memory;
|
||||
}
|
||||
|
||||
void ubpf_free(void* memory)
|
||||
|
|
|
@ -1,14 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
|
@ -17,22 +9,6 @@
|
|||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|ARM">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>ARM</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|ARM">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>ARM</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|ARM64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>ARM64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|ARM64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>ARM64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\..\..\..\external\ubpf\vm\ebpf.h" />
|
||||
|
@ -57,22 +33,6 @@
|
|||
<WindowsTargetPlatformVersion>$(LatestTargetPlatformVersion)</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<DriverTargetPlatform>Universal</DriverTargetPlatform>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<DriverTargetPlatform>Universal</DriverTargetPlatform>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
|
@ -90,37 +50,6 @@
|
|||
<DriverTargetPlatform>Universal</DriverTargetPlatform>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'" Label="Configuration">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="Configuration">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<DriverTargetPlatform>Universal</DriverTargetPlatform>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<DriverTargetPlatform>Universal</DriverTargetPlatform>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<DriverTargetPlatform>Universal</DriverTargetPlatform>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
|
@ -131,17 +60,6 @@
|
|||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>_DEBUG;WINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP;WINAPI_PARTITION_DESKTOP=1;WINAPI_PARTITION_SYSTEM=1;WINAPI_PARTITION_APP=1;WINAPI_PARTITION_PC_APP=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>WINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP;WINAPI_PARTITION_DESKTOP=1;WINAPI_PARTITION_SYSTEM=1;WINAPI_PARTITION_APP=1;WINAPI_PARTITION_PC_APP=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>_DEBUG;WINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP;WINAPI_PARTITION_DESKTOP=1;WINAPI_PARTITION_SYSTEM=1;WINAPI_PARTITION_APP=1;WINAPI_PARTITION_PC_APP=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
|
@ -154,28 +72,9 @@
|
|||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>WINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP;WINAPI_PARTITION_DESKTOP=1;WINAPI_PARTITION_SYSTEM=1;WINAPI_PARTITION_APP=1;WINAPI_PARTITION_PC_APP=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>_DEBUG;WINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP;WINAPI_PARTITION_DESKTOP=1;WINAPI_PARTITION_SYSTEM=1;WINAPI_PARTITION_APP=1;WINAPI_PARTITION_PC_APP=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>WINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP;WINAPI_PARTITION_DESKTOP=1;WINAPI_PARTITION_SYSTEM=1;WINAPI_PARTITION_APP=1;WINAPI_PARTITION_PC_APP=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>_DEBUG;WINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP;WINAPI_PARTITION_DESKTOP=1;WINAPI_PARTITION_SYSTEM=1;WINAPI_PARTITION_APP=1;WINAPI_PARTITION_PC_APP=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>WINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP;WINAPI_PARTITION_DESKTOP=1;WINAPI_PARTITION_SYSTEM=1;WINAPI_PARTITION_APP=1;WINAPI_PARTITION_PC_APP=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)\external\ubpf\vm;$(SolutionDir)\external\ubpf\vm\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<DisableSpecificWarnings>%(DisableSpecificWarnings)</DisableSpecificWarnings>
|
||||
<TreatWarningAsError>false</TreatWarningAsError>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
|
|
|
@ -38,19 +38,6 @@
|
|||
<UbpfDir>$(ProjectDir)../../../../external/ubpf/vm</UbpfDir>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
|
@ -69,12 +56,6 @@
|
|||
</ImportGroup>
|
||||
<ImportGroup Label="Shared">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
|
@ -94,39 +75,6 @@
|
|||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<AdditionalIncludeDirectories>$(UbpfDir);$(UbpfDir)/inc</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>
|
||||
</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>
|
||||
</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
|
@ -154,7 +102,7 @@
|
|||
<ConformanceMode>true</ConformanceMode>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<AdditionalIncludeDirectories>$(UbpfDir)/inc;$(UbpfDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)\external\ubpf\vm;$(SolutionDir)\external\ubpf\vm\inc;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>
|
||||
|
|
|
@ -45,23 +45,6 @@
|
|||
<ProjectName>EbpfCore</ProjectName>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||
<ConfigurationType>Driver</ConfigurationType>
|
||||
<DriverType>KMDF</DriverType>
|
||||
<DriverTargetPlatform>Universal</DriverTargetPlatform>
|
||||
<Driver_SpectreMitigation>false</Driver_SpectreMitigation>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||
<ConfigurationType>Driver</ConfigurationType>
|
||||
<DriverType>KMDF</DriverType>
|
||||
<DriverTargetPlatform>Universal</DriverTargetPlatform>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
|
@ -80,38 +63,6 @@
|
|||
<DriverTargetPlatform>Universal</DriverTargetPlatform>
|
||||
<Driver_SpectreMitigation>false</Driver_SpectreMitigation>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'" Label="Configuration">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||
<ConfigurationType>Driver</ConfigurationType>
|
||||
<DriverType>KMDF</DriverType>
|
||||
<DriverTargetPlatform>Universal</DriverTargetPlatform>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="Configuration">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||
<ConfigurationType>Driver</ConfigurationType>
|
||||
<DriverType>KMDF</DriverType>
|
||||
<DriverTargetPlatform>Universal</DriverTargetPlatform>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||
<ConfigurationType>Driver</ConfigurationType>
|
||||
<DriverType>KMDF</DriverType>
|
||||
<DriverTargetPlatform>Universal</DriverTargetPlatform>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
|
||||
<TargetVersion>Windows10</TargetVersion>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>WindowsKernelModeDriver10.0</PlatformToolset>
|
||||
<ConfigurationType>Driver</ConfigurationType>
|
||||
<DriverType>KMDF</DriverType>
|
||||
<DriverTargetPlatform>Universal</DriverTargetPlatform>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
|
@ -120,37 +71,19 @@
|
|||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
|
||||
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
|
||||
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
|
||||
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
|
||||
<DebuggerFlavor>DbgengKernelDebugger</DebuggerFlavor>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ResourceCompile>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>%(PreprocessorDefinitions);BINARY_COMPATIBLE=0;NT;UNICODE;_UNICODE;NDIS60;POOL_NX_OPTIN_AUTO</PreprocessorDefinitions>
|
||||
</ResourceCompile>
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH);$(SolutionDir)..\api\;$(SolutionDir)EbpfCore\;$(SolutionDir)src\ebpf\libs\api</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH);$(SolutionDir)src\ebpf\include</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>%(PreprocessorDefinitions);BINARY_COMPATIBLE=0;NT;UNICODE;_UNICODE;NDIS60;POOL_NX_OPTIN_AUTO</PreprocessorDefinitions>
|
||||
<ExceptionHandling>
|
||||
</ExceptionHandling>
|
||||
|
@ -169,7 +102,7 @@
|
|||
<PreprocessorDefinitions>%(PreprocessorDefinitions);BINARY_COMPATIBLE=0;NT;UNICODE;_UNICODE;NDIS60;POOL_NX_OPTIN_AUTO</PreprocessorDefinitions>
|
||||
</ResourceCompile>
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH);$(SolutionDir)..\api\;$(SolutionDir)..\libs\api\;$(SolutionDir)EbpfCore\;$(SolutionDir)src\ebpf\libs\api;$(SolutionDir)src\ebpf\include</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH);$(SolutionDir)src\ebpf\include</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>%(PreprocessorDefinitions);BINARY_COMPATIBLE=0;NT;UNICODE;_UNICODE;NDIS60;POOL_NX_OPTIN_AUTO</PreprocessorDefinitions>
|
||||
<ExceptionHandling>
|
||||
</ExceptionHandling>
|
||||
|
@ -184,44 +117,6 @@
|
|||
<AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ResourceCompile>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>%(PreprocessorDefinitions);BINARY_COMPATIBLE=0;NT;UNICODE;_UNICODE;NDIS60;POOL_NX_OPTIN_AUTO</PreprocessorDefinitions>
|
||||
</ResourceCompile>
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>%(PreprocessorDefinitions);BINARY_COMPATIBLE=0;NT;UNICODE;_UNICODE;NDIS60;POOL_NX_OPTIN_AUTO</PreprocessorDefinitions>
|
||||
<ExceptionHandling>
|
||||
</ExceptionHandling>
|
||||
</ClCompile>
|
||||
<Midl>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>%(PreprocessorDefinitions);BINARY_COMPATIBLE=0;NT;UNICODE;_UNICODE;NDIS60;POOL_NX_OPTIN_AUTO</PreprocessorDefinitions>
|
||||
</Midl>
|
||||
<Link>
|
||||
<AdditionalDependencies>%(AdditionalDependencies);$(DDK_LIB_PATH)\ntoskrnl.lib;$(DDK_LIB_PATH)\ndis.lib;$(DDK_LIB_PATH)\wdmsec.lib;$(DDK_LIB_PATH)\fwpkclnt.lib;$(SDK_LIB_PATH)\uuid.lib</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ResourceCompile>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>%(PreprocessorDefinitions);BINARY_COMPATIBLE=0;NT;UNICODE;_UNICODE;NDIS60;POOL_NX_OPTIN_AUTO</PreprocessorDefinitions>
|
||||
</ResourceCompile>
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>%(PreprocessorDefinitions);BINARY_COMPATIBLE=0;NT;UNICODE;_UNICODE;NDIS60;POOL_NX_OPTIN_AUTO</PreprocessorDefinitions>
|
||||
<ExceptionHandling>
|
||||
</ExceptionHandling>
|
||||
</ClCompile>
|
||||
<Midl>
|
||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(DDK_INC_PATH)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>%(PreprocessorDefinitions);BINARY_COMPATIBLE=0;NT;UNICODE;_UNICODE;NDIS60;POOL_NX_OPTIN_AUTO</PreprocessorDefinitions>
|
||||
</Midl>
|
||||
<Link>
|
||||
<AdditionalDependencies>%(AdditionalDependencies);$(DDK_LIB_PATH)\ntoskrnl.lib;$(DDK_LIB_PATH)\ndis.lib;$(DDK_LIB_PATH)\wdmsec.lib;$(DDK_LIB_PATH)\fwpkclnt.lib;$(SDK_LIB_PATH)\uuid.lib</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="ebpf_drv.c" />
|
||||
<ClCompile Include="ebpf_l2_hook.c" />
|
||||
|
@ -239,6 +134,9 @@
|
|||
<ProjectReference Include="..\libs\execution_context\kernel\execution_context_kernel.vcxproj">
|
||||
<Project>{26e7ed0b-c128-4d7c-a90e-c246def40ad3}</Project>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\libs\ubpf\kernel\ubpf_kernel.vcxproj">
|
||||
<Project>{675b59f8-089e-40b5-8388-56254447cfa3}</Project>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
|
|
|
@ -16,8 +16,10 @@ namespace ebpf
|
|||
#include "../sample/ebpf.h"
|
||||
};
|
||||
|
||||
#include "unwind_helper.h"
|
||||
|
||||
static const struct {
|
||||
ebpf_error_code_t (*protocol_handler)(_In_ const void* input_buffer, void* output_buffer);
|
||||
ebpf_error_code_t(*protocol_handler)(_In_ const void* input_buffer, void* output_buffer);
|
||||
size_t minimum_request_size;
|
||||
size_t minimum_reply_size;
|
||||
} EbpfProtocolHandlers[] = {
|
||||
|
@ -36,7 +38,7 @@ static const struct {
|
|||
{ reinterpret_cast<ebpf_error_code_t(*)(_In_ const void* input_buffer, void* output_buffer)>(ebpf_core_protocol_query_map_definition), sizeof(struct _ebpf_operation_query_map_definition_request), sizeof(struct _ebpf_operation_query_map_definition_reply) },
|
||||
};
|
||||
|
||||
HANDLE
|
||||
ebpf_handle_t
|
||||
GlueCreateFileW(
|
||||
PCWSTR lpFileName,
|
||||
DWORD dwDesiredAccess,
|
||||
|
@ -44,15 +46,15 @@ GlueCreateFileW(
|
|||
PSECURITY_ATTRIBUTES lpSecurityAttributes,
|
||||
DWORD dwCreationDisposition,
|
||||
DWORD dwFlagsAndAttributes,
|
||||
HANDLE hTemplateFile
|
||||
)
|
||||
ebpf_handle_t hTemplateFile
|
||||
)
|
||||
{
|
||||
return (HANDLE)0x12345678;
|
||||
return (ebpf_handle_t)0x12345678;
|
||||
}
|
||||
|
||||
BOOL
|
||||
GlueCloseHandle(
|
||||
HANDLE hObject
|
||||
ebpf_handle_t hObject
|
||||
)
|
||||
{
|
||||
return TRUE;
|
||||
|
@ -60,7 +62,7 @@ GlueCloseHandle(
|
|||
|
||||
BOOL
|
||||
GlueDeviceIoControl(
|
||||
HANDLE hDevice,
|
||||
ebpf_handle_t hDevice,
|
||||
DWORD dwIoControlCode,
|
||||
PVOID lpInBuffer,
|
||||
DWORD nInBufferSize,
|
||||
|
@ -78,7 +80,7 @@ GlueDeviceIoControl(
|
|||
{
|
||||
goto Fail;
|
||||
}
|
||||
|
||||
|
||||
if (user_request->length < EbpfProtocolHandlers[request_id].minimum_request_size)
|
||||
{
|
||||
goto Fail;
|
||||
|
@ -119,11 +121,11 @@ GlueDeviceIoControl(
|
|||
}
|
||||
goto Fail;
|
||||
}
|
||||
|
||||
|
||||
return TRUE;
|
||||
|
||||
Fail:
|
||||
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
@ -142,41 +144,53 @@ std::vector<uint8_t> prepare_udp_packet(uint16_t udp_length)
|
|||
}
|
||||
|
||||
#define SAMPLE_PATH "..\\sample\\"
|
||||
TEST_CASE("droppacket", "[droppacket]")
|
||||
|
||||
TEST_CASE("droppacket-jit", "[droppacket_jit]")
|
||||
{
|
||||
device_io_control_handler = GlueDeviceIoControl;
|
||||
create_file_handler = GlueCreateFileW;
|
||||
close_handle_handler = GlueCloseHandle;
|
||||
|
||||
HANDLE program_handle;
|
||||
const char* error_message;
|
||||
ebpf_handle_t program_handle;
|
||||
uint32_t result = 0;
|
||||
const char* error_message = NULL;
|
||||
bool ec_initialized = false;
|
||||
bool api_initialized = false;
|
||||
_unwind_helper on_exit([&] {
|
||||
ebpf_api_free_error_message(error_message);
|
||||
if (api_initialized)
|
||||
ebpf_api_terminate();
|
||||
if (ec_initialized)
|
||||
ebpf_core_terminate();
|
||||
});
|
||||
|
||||
REQUIRE(ebpf_core_initialize() == EBPF_ERROR_SUCCESS);
|
||||
ec_initialized = true;
|
||||
|
||||
REQUIRE(ebpf_api_initiate() == ERROR_SUCCESS);
|
||||
api_initialized = true;
|
||||
|
||||
REQUIRE(ebpf_api_load_program(SAMPLE_PATH "droppacket.o", "xdp", EBPF_EXECUTION_JIT, &program_handle, &error_message) == ERROR_SUCCESS);
|
||||
|
||||
REQUIRE(ebpf_api_load_program(SAMPLE_PATH "droppacket.o", "xdp", &program_handle, &error_message) == ERROR_SUCCESS);
|
||||
|
||||
REQUIRE(ebpf_api_attach_program(program_handle, EBPF_PROGRAM_TYPE_XDP) == ERROR_SUCCESS);
|
||||
|
||||
auto packet = prepare_udp_packet(0);
|
||||
|
||||
uint32_t key = 0;
|
||||
uint64_t value = 1000;
|
||||
REQUIRE(ebpf_api_map_update_element((HANDLE)1, sizeof(key), (uint8_t*)&key, sizeof(value), (uint8_t*)&value) == ERROR_SUCCESS);
|
||||
REQUIRE(ebpf_api_map_update_element((ebpf_handle_t)1, sizeof(key), (uint8_t*)&key, sizeof(value), (uint8_t*)&value) == ERROR_SUCCESS);
|
||||
|
||||
// Test that we drop the packet and increment the map
|
||||
ebpf::xdp_md_t ctx{ packet.data(), packet.data() + packet.size() };
|
||||
REQUIRE(ebpf_core_invoke_hook(EBPF_PROGRAM_TYPE_XDP, &ctx, &result) == EBPF_ERROR_SUCCESS);
|
||||
REQUIRE(result == 2);
|
||||
|
||||
REQUIRE(ebpf_api_map_lookup_element((HANDLE)1, sizeof(key), (uint8_t*)&key, sizeof(value), (uint8_t*)&value) == ERROR_SUCCESS);
|
||||
REQUIRE(ebpf_api_map_lookup_element((ebpf_handle_t)1, sizeof(key), (uint8_t*)&key, sizeof(value), (uint8_t*)&value) == ERROR_SUCCESS);
|
||||
REQUIRE(value == 1001);
|
||||
|
||||
REQUIRE(ebpf_api_map_delete_element((HANDLE)1, sizeof(key), (uint8_t*)&key) == ERROR_SUCCESS);
|
||||
REQUIRE(ebpf_api_map_delete_element((ebpf_handle_t)1, sizeof(key), (uint8_t*)&key) == ERROR_SUCCESS);
|
||||
|
||||
REQUIRE(ebpf_api_map_lookup_element((HANDLE)1, sizeof(key), (uint8_t*)&key, sizeof(value), (uint8_t*)&value) == ERROR_SUCCESS);
|
||||
REQUIRE(ebpf_api_map_lookup_element((ebpf_handle_t)1, sizeof(key), (uint8_t*)&key, sizeof(value), (uint8_t*)&value) == ERROR_SUCCESS);
|
||||
REQUIRE(value == 0);
|
||||
|
||||
|
||||
|
@ -186,14 +200,90 @@ TEST_CASE("droppacket", "[droppacket]")
|
|||
REQUIRE(ebpf_core_invoke_hook(EBPF_PROGRAM_TYPE_XDP, &ctx2, &result) == EBPF_ERROR_SUCCESS);
|
||||
REQUIRE(result == 1);
|
||||
|
||||
REQUIRE(ebpf_api_map_lookup_element((HANDLE)1, sizeof(key), (uint8_t*)&key, sizeof(value), (uint8_t*)&value) == ERROR_SUCCESS);
|
||||
REQUIRE(ebpf_api_map_lookup_element((ebpf_handle_t)1, sizeof(key), (uint8_t*)&key, sizeof(value), (uint8_t*)&value) == ERROR_SUCCESS);
|
||||
REQUIRE(value == 0);
|
||||
}
|
||||
|
||||
TEST_CASE("droppacket-interpret", "[droppacket_interpret]")
|
||||
{
|
||||
device_io_control_handler = GlueDeviceIoControl;
|
||||
create_file_handler = GlueCreateFileW;
|
||||
close_handle_handler = GlueCloseHandle;
|
||||
|
||||
ebpf_handle_t program_handle;
|
||||
const char* error_message = NULL;
|
||||
bool ec_initialized = false;
|
||||
bool api_initialized = false;
|
||||
_unwind_helper on_exit([&]
|
||||
{
|
||||
ebpf_api_free_error_message(error_message);
|
||||
if (api_initialized)
|
||||
ebpf_api_terminate();
|
||||
if (ec_initialized)
|
||||
ebpf_core_terminate();
|
||||
});
|
||||
uint32_t result = 0;
|
||||
|
||||
REQUIRE(ebpf_core_initialize() == EBPF_ERROR_SUCCESS);
|
||||
ec_initialized = true;
|
||||
|
||||
REQUIRE(ebpf_api_initiate() == ERROR_SUCCESS);
|
||||
api_initialized = true;
|
||||
|
||||
REQUIRE(ebpf_api_load_program(SAMPLE_PATH "droppacket.o", "xdp", EBPF_EXECUTION_INTERPRET, &program_handle, &error_message) == ERROR_SUCCESS);
|
||||
|
||||
REQUIRE(ebpf_api_attach_program(program_handle, EBPF_PROGRAM_TYPE_XDP) == ERROR_SUCCESS);
|
||||
|
||||
auto packet = prepare_udp_packet(0);
|
||||
|
||||
uint32_t key = 0;
|
||||
uint64_t value = 1000;
|
||||
REQUIRE(ebpf_api_map_update_element((ebpf_handle_t)1, sizeof(key), (uint8_t*)&key, sizeof(value), (uint8_t*)&value) == ERROR_SUCCESS);
|
||||
|
||||
// Test that we drop the packet and increment the map
|
||||
ebpf::xdp_md_t ctx{ packet.data(), packet.data() + packet.size() };
|
||||
REQUIRE(ebpf_core_invoke_hook(EBPF_PROGRAM_TYPE_XDP, &ctx, &result) == EBPF_ERROR_SUCCESS);
|
||||
REQUIRE(result == 2);
|
||||
|
||||
REQUIRE(ebpf_api_map_lookup_element((ebpf_handle_t)1, sizeof(key), (uint8_t*)&key, sizeof(value), (uint8_t*)&value) == ERROR_SUCCESS);
|
||||
REQUIRE(value == 1001);
|
||||
|
||||
REQUIRE(ebpf_api_map_delete_element((ebpf_handle_t)1, sizeof(key), (uint8_t*)&key) == ERROR_SUCCESS);
|
||||
|
||||
REQUIRE(ebpf_api_map_lookup_element((ebpf_handle_t)1, sizeof(key), (uint8_t*)&key, sizeof(value), (uint8_t*)&value) == ERROR_SUCCESS);
|
||||
REQUIRE(value == 0);
|
||||
|
||||
|
||||
packet = prepare_udp_packet(10);
|
||||
ebpf::xdp_md_t ctx2{ packet.data(), packet.data() + packet.size() };
|
||||
|
||||
REQUIRE(ebpf_core_invoke_hook(EBPF_PROGRAM_TYPE_XDP, &ctx2, &result) == EBPF_ERROR_SUCCESS);
|
||||
REQUIRE(result == 1);
|
||||
|
||||
REQUIRE(ebpf_api_map_lookup_element((ebpf_handle_t)1, sizeof(key), (uint8_t*)&key, sizeof(value), (uint8_t*)&value) == ERROR_SUCCESS);
|
||||
REQUIRE(value == 0);
|
||||
}
|
||||
|
||||
TEST_CASE("enum section", "[enum sections]") {
|
||||
const char* error_message = nullptr;
|
||||
const tlv_type_length_value_t* section_data = nullptr;
|
||||
bool ec_initialized = false;
|
||||
bool api_initialized = false;
|
||||
_unwind_helper on_exit([&]
|
||||
{
|
||||
ebpf_api_free_error_message(error_message);
|
||||
ebpf_api_elf_free(section_data);
|
||||
if (api_initialized)
|
||||
ebpf_api_terminate();
|
||||
if (ec_initialized)
|
||||
ebpf_core_terminate();
|
||||
});
|
||||
|
||||
REQUIRE(ebpf_core_initialize() == EBPF_ERROR_SUCCESS);
|
||||
ec_initialized = true;
|
||||
REQUIRE(ebpf_api_initiate() == ERROR_SUCCESS);
|
||||
api_initialized = true;
|
||||
|
||||
REQUIRE(ebpf_api_elf_enumerate_sections(SAMPLE_PATH "droppacket.o", nullptr, true, §ion_data, &error_message) == 0);
|
||||
for (auto current_section = tlv_child(section_data); current_section != tlv_next(section_data); current_section = tlv_next(current_section))
|
||||
{
|
||||
|
@ -217,18 +307,30 @@ TEST_CASE("enum section", "[enum sections]") {
|
|||
REQUIRE(static_cast<tlv_type_t>(value->type) == tlv_type_t::UINT);
|
||||
}
|
||||
}
|
||||
ebpf_api_elf_free(section_data);
|
||||
ebpf_api_free_error_message(error_message);
|
||||
|
||||
}
|
||||
|
||||
TEST_CASE("verify section", "[verify section]") {
|
||||
|
||||
const char* error_message = nullptr;
|
||||
const char* report = nullptr;
|
||||
bool ec_initialized = false;
|
||||
bool api_initialized = false;
|
||||
_unwind_helper on_exit([&] {
|
||||
ebpf_api_free_error_message(error_message);
|
||||
ebpf_api_free_error_message(report);
|
||||
if (api_initialized)
|
||||
ebpf_api_terminate();
|
||||
if (ec_initialized)
|
||||
ebpf_core_terminate();
|
||||
});
|
||||
|
||||
REQUIRE(ebpf_core_initialize() == EBPF_ERROR_SUCCESS);
|
||||
api_initialized = true;
|
||||
REQUIRE(ebpf_api_initiate() == ERROR_SUCCESS);
|
||||
ec_initialized = true;
|
||||
|
||||
REQUIRE(ebpf_api_elf_verify_section(SAMPLE_PATH "droppacket.o", "xdp", &report, &error_message) == 0);
|
||||
REQUIRE(report != nullptr);
|
||||
REQUIRE(error_message == nullptr);
|
||||
ebpf_api_free_error_message(report);
|
||||
ebpf_api_free_error_message(error_message);
|
||||
}
|
||||
|
||||
|
|
|
@ -2,14 +2,6 @@
|
|||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="..\..\..\packages\CatchOrg.Catch.2.2.0\build\native\CatchOrg.Catch.props" Condition="Exists('..\..\..\packages\CatchOrg.Catch.2.2.0\build\native\CatchOrg.Catch.props')" />
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
|
@ -27,19 +19,6 @@
|
|||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
|
@ -83,34 +62,6 @@
|
|||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
|
@ -133,6 +84,8 @@
|
|||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)src\ebpf\include;$(SolutionDir)external\ubpf\vm;$(SolutionDir)external\ubpf\vm\inc;$(SolutionDir)external\ebpf-verifier\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
*/
|
||||
|
||||
#include "mock.h"
|
||||
#include "api.h"
|
||||
std::function<decltype(CreateFileW)> create_file_handler;
|
||||
std::function<decltype(DeviceIoControl)> device_io_control_handler;
|
||||
std::function<decltype(CloseHandle)> close_handle_handler;
|
||||
|
@ -11,7 +12,7 @@ std::function<decltype(CloseHandle)> close_handle_handler;
|
|||
namespace Platform {
|
||||
BOOL
|
||||
DeviceIoControl(
|
||||
_In_ HANDLE device_handle,
|
||||
_In_ ebpf_handle_t device_handle,
|
||||
uint32_t io_control_code,
|
||||
_In_reads_bytes_opt_(input_buffer_size) void* input_buffer,
|
||||
uint32_t input_buffer_size,
|
||||
|
@ -32,7 +33,7 @@ namespace Platform {
|
|||
overlapped);
|
||||
}
|
||||
|
||||
HANDLE
|
||||
ebpf_handle_t
|
||||
CreateFileW(
|
||||
_In_ PCWSTR file_name,
|
||||
uint32_t desired_access,
|
||||
|
@ -40,7 +41,7 @@ namespace Platform {
|
|||
_In_opt_ SECURITY_ATTRIBUTES* security_attributed,
|
||||
uint32_t creation_disposition,
|
||||
uint32_t flags_and_attributed,
|
||||
_In_opt_ HANDLE template_file
|
||||
_In_opt_ ebpf_handle_t template_file
|
||||
)
|
||||
{
|
||||
return create_file_handler(
|
||||
|
@ -54,7 +55,7 @@ namespace Platform {
|
|||
}
|
||||
BOOL
|
||||
CloseHandle(
|
||||
_In_ _Post_ptr_invalid_ HANDLE handle
|
||||
_In_ _Post_ptr_invalid_ ebpf_handle_t handle
|
||||
)
|
||||
{
|
||||
return close_handle_handler(handle);
|
||||
|
|
|
@ -26,19 +26,6 @@
|
|||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
|
@ -57,12 +44,6 @@
|
|||
</ImportGroup>
|
||||
<ImportGroup Label="Shared">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
|
@ -70,46 +51,12 @@
|
|||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
|
@ -140,31 +87,27 @@
|
|||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<CustomBuild Include="bindmonitor.c">
|
||||
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
|
||||
<FileType>CppCode</FileType>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">clang -target bpf -O2 -Wall -c %(Filename).c -o %(Filename).o</Command>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(Filename).o;%(Outputs)</Outputs>
|
||||
<Command>clang -target bpf -O2 -Wall -c %(Filename).c -o %(Filename).o</Command>
|
||||
<Outputs>%(Filename).o;%(Outputs)</Outputs>
|
||||
</CustomBuild>
|
||||
<CustomBuild Include="bpf.c">
|
||||
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
|
||||
<FileType>CppCode</FileType>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">clang -target bpf -O2 -Wall -c %(Filename).c -o %(Filename).o</Command>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(Filename).o;%(Outputs)</Outputs>
|
||||
<TreatOutputAsContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</TreatOutputAsContent>
|
||||
<Command>clang -target bpf -O2 -Wall -c %(Filename).c -o %(Filename).o</Command>
|
||||
<Outputs>%(Filename).o;%(Outputs)</Outputs>
|
||||
<TreatOutputAsContent>true</TreatOutputAsContent>
|
||||
</CustomBuild>
|
||||
<CustomBuild Include="bpf_call.c">
|
||||
<FileType>CppCode</FileType>
|
||||
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">clang -target bpf -O2 -Wall -c %(Filename).c -o %(Filename).o</Command>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(Filename).o;%(Outputs)</Outputs>
|
||||
<TreatOutputAsContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</TreatOutputAsContent>
|
||||
<Command>clang -target bpf -O2 -Wall -c %(Filename).c -o %(Filename).o</Command>
|
||||
<Outputs>%(Filename).o;%(Outputs)</Outputs>
|
||||
<TreatOutputAsContent>true</TreatOutputAsContent>
|
||||
</CustomBuild>
|
||||
<CustomBuild Include="droppacket.c">
|
||||
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
|
||||
<FileType>CppCode</FileType>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">clang -target bpf -O2 -Wall -c %(Filename).c -o %(Filename).o</Command>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(Filename).o;%(Outputs)</Outputs>
|
||||
<TreatOutputAsContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</TreatOutputAsContent>
|
||||
<Command>clang -target bpf -O2 -Wall -c %(Filename).c -o %(Filename).o</Command>
|
||||
<Outputs>%(Filename).o;%(Outputs)</Outputs>
|
||||
<TreatOutputAsContent>true</TreatOutputAsContent>
|
||||
</CustomBuild>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
|
|
@ -58,6 +58,7 @@ BEGIN
|
|||
\n [[section=]<string>]\
|
||||
\n [[type=]xdp]\
|
||||
\n [[pinned=]yes|no]\
|
||||
\n [[execution=]jit|interpret]\
|
||||
\n\
|
||||
\nParameters:\
|
||||
\n\
|
||||
|
@ -74,6 +75,9 @@ BEGIN
|
|||
\n yes: Pin the program.\
|
||||
\n This is the default value.\
|
||||
\n no: Do not pin the program.\
|
||||
\n execution - One of the following values:\
|
||||
\n jit: Convert the program to machine code.\
|
||||
\n interpret: Run the program as byte code.\
|
||||
\n\
|
||||
\nRemarks: Loads a program (if not already loaded) and pins it if\
|
||||
\n requested.\
|
||||
|
|
|
@ -1,14 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
|
@ -26,19 +18,6 @@
|
|||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
|
@ -57,12 +36,6 @@
|
|||
</ImportGroup>
|
||||
<ImportGroup Label="Shared">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
|
@ -70,60 +43,12 @@
|
|||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;EBPFNETSH_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)..\..\..\external\ebpf-verifier\src;C:\git\dthaler\ebpf-verifier\packages\boost.1.72.0.0\lib\native\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<LanguageStandard>stdcpplatest</LanguageStandard>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableUAC>false</EnableUAC>
|
||||
<AdditionalDependencies>ebpfverifier.lib;netsh.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<ModuleDefinitionFile>
|
||||
</ModuleDefinitionFile>
|
||||
<AdditionalLibraryDirectories>$(SolutionDir)..\..\..\external\ebpf-verifier\build\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;EBPFNETSH_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)..\..\..\external\ebpf-verifier\src;C:\git\dthaler\ebpf-verifier\packages\boost.1.72.0.0\lib\native\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<LanguageStandard>stdcpplatest</LanguageStandard>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableUAC>false</EnableUAC>
|
||||
<AdditionalDependencies>ebpfverifier.lib;netsh.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<ModuleDefinitionFile>
|
||||
</ModuleDefinitionFile>
|
||||
<AdditionalLibraryDirectories>$(SolutionDir)..\..\..\external\ebpf-verifier\build\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
|
@ -152,7 +77,7 @@
|
|||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>NDEBUG;EBPFNETSH_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)..\..\..\external\ebpf-verifier\src;$(SolutionDir)src\ebpf\libs\api;$(SolutionDir)external\ebpf-verifier\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>$(SolutionDir)src\ebpf\include;$(SolutionDir)external\ubpf\vm;$(SolutionDir)external\ubpf\vm\inc;$(SolutionDir)external\ebpf-verifier\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<LanguageStandard>stdcpplatest</LanguageStandard>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
|
@ -161,10 +86,10 @@
|
|||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<EnableUAC>false</EnableUAC>
|
||||
<AdditionalDependencies>ebpfverifier.lib;netsh.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<AdditionalDependencies>netsh.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<ModuleDefinitionFile>
|
||||
</ModuleDefinitionFile>
|
||||
<AdditionalLibraryDirectories>$(SolutionDir)..\..\..\external\ebpf-verifier\build\$(Configuration);$(SolutionDir)..\..\..\src\ebpf\bin\$(Platform)\$(Configuration);$(SolutionDir)src\ebpf\bin\$(Platform)\$(Configuration);$(SolutionDir)external\ebpf-verifier\build\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||
<AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
|
|
|
@ -76,6 +76,7 @@ DWORD handle_ebpf_show_disassembly(
|
|||
else
|
||||
{
|
||||
std::cout << disassembly << std::endl;
|
||||
ebpf_api_free_error_message(disassembly);
|
||||
return NO_ERROR;
|
||||
}
|
||||
}
|
||||
|
@ -156,50 +157,46 @@ DWORD handle_ebpf_show_sections(
|
|||
{
|
||||
std::cerr << error_message << std::endl;
|
||||
ebpf_api_free_error_message(error_message);
|
||||
ebpf_api_elf_free(section_data);
|
||||
return ERROR_SUPPRESS_OUTPUT;
|
||||
}
|
||||
|
||||
try {
|
||||
if (level == VL_NORMAL) {
|
||||
std::cout << "\n";
|
||||
std::cout << " Section Type # Maps Size\n";
|
||||
std::cout << "==================== ====== ====== ======\n";
|
||||
}
|
||||
for (auto current_section = tlv_child(section_data); current_section != tlv_next(section_data); current_section = tlv_next(current_section))
|
||||
{
|
||||
auto section_name = tlv_child(current_section);
|
||||
auto type = tlv_next(section_name);
|
||||
auto map_count = tlv_next(type);
|
||||
auto program_bytes = tlv_next(map_count);
|
||||
auto stats_secton = tlv_next(program_bytes);
|
||||
if (level == VL_NORMAL) {
|
||||
std::cout << "\n";
|
||||
std::cout << " Section Type # Maps Size\n";
|
||||
std::cout << "==================== ====== ====== ======\n";
|
||||
std::cout << std::setw(20) << std::right << tlv_value<std::string>(section_name) << " " <<
|
||||
std::setw(6) << tlv_value<uint64_t>(type) << " " <<
|
||||
std::setw(6) << tlv_value<size_t>(map_count) << " " <<
|
||||
std::setw(6) << (program_bytes->length - offsetof(tlv_type_length_value_t, value)) / 8 << "\n";
|
||||
}
|
||||
for (auto current_section = tlv_child(section_data); current_section != tlv_next(section_data); current_section = tlv_next(current_section))
|
||||
else
|
||||
{
|
||||
auto section_name = tlv_child(current_section);
|
||||
auto type = tlv_next(section_name);
|
||||
auto map_count = tlv_next(type);
|
||||
auto program_bytes = tlv_next(map_count);
|
||||
auto stats_secton = tlv_next(program_bytes);
|
||||
if (level == VL_NORMAL) {
|
||||
std::cout << std::setw(20) << std::right << tlv_value<std::string>(section_name) << " " <<
|
||||
std::setw(6) << tlv_value<uint64_t>(type) << " " <<
|
||||
std::setw(6) << tlv_value<size_t>(map_count) << " " <<
|
||||
std::setw(6) << (program_bytes->length - offsetof(tlv_type_length_value_t, value)) / 8 << "\n";
|
||||
}
|
||||
else
|
||||
std::cout << "\n";
|
||||
std::cout << "Section : " << tlv_value<std::string>(section_name) << "\n";
|
||||
std::cout << "Type : " << tlv_value<uint64_t>(type) << "\n";
|
||||
std::cout << "# Maps : " << tlv_value<size_t>(map_count) << "\n";
|
||||
std::cout << "Size : " << program_bytes->length - offsetof(tlv_type_length_value_t, value) / 8 << " instructions\n";
|
||||
for (auto stat = tlv_child(stats_secton); stat != tlv_next(current_section); stat = tlv_next(stat))
|
||||
{
|
||||
std::cout << "\n";
|
||||
std::cout << "Section : " << tlv_value<std::string>(section_name) << "\n";
|
||||
std::cout << "Type : " << tlv_value<uint64_t>(type) << "\n";
|
||||
std::cout << "# Maps : " << tlv_value<size_t>(map_count) << "\n";
|
||||
std::cout << "Size : " << program_bytes->length - offsetof(tlv_type_length_value_t, value) / 8 << " instructions\n";
|
||||
for (auto stat = tlv_child(stats_secton); stat != tlv_next(current_section); stat = tlv_next(stat))
|
||||
{
|
||||
auto key = tlv_child(stat);
|
||||
auto value = tlv_next(key);
|
||||
std::cout << std::setw(13) << std::left << tlv_value<std::string>(key) << ": " << tlv_value<int>(value) << "\n";
|
||||
}
|
||||
auto key = tlv_child(stat);
|
||||
auto value = tlv_next(key);
|
||||
std::cout << std::setw(13) << std::left << tlv_value<std::string>(key) << ": " << tlv_value<int>(value) << "\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return NO_ERROR;
|
||||
}
|
||||
catch (std::runtime_error e) {
|
||||
std::cerr << "error: " << e.what() << std::endl;
|
||||
return ERROR_SUPPRESS_OUTPUT;
|
||||
}
|
||||
ebpf_api_elf_free(section_data);
|
||||
return NO_ERROR;
|
||||
}
|
||||
|
||||
DWORD handle_ebpf_show_verification(
|
||||
|
@ -271,5 +268,8 @@ DWORD handle_ebpf_show_verification(
|
|||
{
|
||||
std::cerr << "\nVerification report:\n" << report << std::endl;
|
||||
}
|
||||
ebpf_api_free_error_message(error_message);
|
||||
ebpf_api_free_error_message(report);
|
||||
return ERROR_SUPPRESS_OUTPUT;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,6 +32,12 @@ static TOKEN_VALUE _ebpf_program_type_enum[] = {
|
|||
|
||||
};
|
||||
|
||||
static TOKEN_VALUE _ebpf_execution_type_enum[] = {
|
||||
{ L"jit", EBPF_EXECUTION_JIT },
|
||||
{ L"interpret", EBPF_EXECUTION_INTERPRET },
|
||||
|
||||
};
|
||||
|
||||
unsigned long handle_ebpf_add_program(
|
||||
LPCWSTR machine,
|
||||
LPWSTR* argv,
|
||||
|
@ -46,6 +52,7 @@ unsigned long handle_ebpf_add_program(
|
|||
{TOKEN_SECTION, NS_REQ_ZERO, FALSE},
|
||||
{TOKEN_TYPE, NS_REQ_ZERO, FALSE},
|
||||
{TOKEN_PINNED, NS_REQ_ZERO, FALSE},
|
||||
{TOKEN_EXECUTION, NS_REQ_ZERO, FALSE }
|
||||
};
|
||||
ULONG tag_type[_countof(tags)] = { 0 };
|
||||
|
||||
|
@ -63,6 +70,7 @@ unsigned long handle_ebpf_add_program(
|
|||
std::string section = ""; // Use the first code section by default.
|
||||
ebpf_program_type_t type = EBPF_PROGRAM_TYPE_XDP;
|
||||
PINNED_CONSTRAINT pinned = PINNED_ANY;
|
||||
ebpf_execution_type_t execution = EBPF_EXECUTION_JIT;
|
||||
for (int i = 0; (status == NO_ERROR) && ((i + current_index) < argc); i++) {
|
||||
switch (tag_type[i]) {
|
||||
case 0: // FILENAME
|
||||
|
@ -97,6 +105,13 @@ unsigned long handle_ebpf_add_program(
|
|||
status = ERROR_INVALID_PARAMETER;
|
||||
}
|
||||
break;
|
||||
case 4: // EXECUTION
|
||||
status = MatchEnumTag(NULL,
|
||||
argv[current_index + i],
|
||||
_countof(_ebpf_execution_type_enum),
|
||||
_ebpf_execution_type_enum,
|
||||
(PULONG)&execution);
|
||||
break;
|
||||
default:
|
||||
status = ERROR_INVALID_SYNTAX;
|
||||
break;
|
||||
|
@ -115,7 +130,7 @@ unsigned long handle_ebpf_add_program(
|
|||
|
||||
const char* error_message = nullptr;
|
||||
|
||||
status = ebpf_api_load_program(filename.c_str(), section.c_str(), &_program_handle, &error_message);
|
||||
status = ebpf_api_load_program(filename.c_str(), section.c_str(), execution, &_program_handle, &error_message);
|
||||
if (status != ERROR_SUCCESS)
|
||||
{
|
||||
if (error_message != nullptr) {
|
||||
|
@ -123,6 +138,7 @@ unsigned long handle_ebpf_add_program(
|
|||
} else {
|
||||
std::cerr << "error " << status << ": could not load program" << std::endl;
|
||||
}
|
||||
ebpf_api_free_error_message(error_message);
|
||||
return ERROR_SUPPRESS_OUTPUT;
|
||||
}
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
#define TOKEN_SECTION L"section"
|
||||
#define TOKEN_PINNED L"pinned"
|
||||
#define TOKEN_TYPE L"type"
|
||||
#define TOKEN_EXECUTION L"execution"
|
||||
|
||||
typedef enum {
|
||||
VL_NORMAL = 0,
|
||||
|
|
Загрузка…
Ссылка в новой задаче