Set empty program name to hash of instructions (#3493)

* Move C++ hashing lib from tests/libs/util/ to libs/shared/

This puts hash.cpp/hash.h in a more central location for use by other project files.

* Set empty program name to hash of instructions

ebpf_program_load_bytes now hashes the instructions and uses that for the name
instead of generating a random number.

Closes #3443

* fix signed/unsigned warning (and ensure windows helper id >= 0)

* add bcrypt.dll dependency for ebpfapi.dll

* WIP new test case for ebpf_program_load_bytes with nullptr program name

* WIP ebpf_program_load_bytes testing

* truncate SHA256 hash to 63 bytes to stay under BPF_OBJ_NAME_LEN

* remove bcrypt from release dependencies and suppress analyze warning

* PR feedback - fix comment and bpf2c include paths

---------

Co-authored-by: Michael Agun <danielagun@microsoft.com>
Co-authored-by: Alan Jowett <alanjo@microsoft.com>
This commit is contained in:
D. Michael Agun 2024-07-02 07:47:03 -07:00 коммит произвёл GitHub
Родитель 6c7c8a8890
Коммит 2efce152dc
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: B5690EEEBB952194
15 изменённых файлов: 111 добавлений и 30 удалений

Просмотреть файл

@ -217,9 +217,11 @@
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="resource.h" />
<ClInclude Include="..\libs\shared\hash.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\libs\thunk\windows\platform.cpp" />
<ClCompile Include="..\libs\shared\hash.cpp" />
<ClCompile Include="dllmain.cpp" />
<ClCompile Include="rpc_client.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='NativeOnlyDebug|x64'">true</ExcludedFromBuild>

Просмотреть файл

@ -15,6 +15,7 @@
#include "ebpf_serialize.h"
#include "ebpf_shared_framework.h"
#include "ebpf_tracelog.h"
#include "hash.h"
#pragma warning(push)
#pragma warning(disable : 4200) // Zero-sized array in struct/union
#include "libbpf.h"
@ -3158,12 +3159,22 @@ ebpf_program_load_bytes(
EBPF_RETURN_RESULT(EBPF_INVALID_ARGUMENT);
}
char unique_name[80];
std::string program_hash_string;
if (program_name == nullptr) {
// Create a unique object/section/program name.
srand(static_cast<unsigned int>(time(nullptr)));
sprintf_s(unique_name, sizeof(unique_name), "raw#%u", rand());
program_name = unique_name;
// If the program name isn't set, use the SHA256 hash of the instructions.
// This is also used as the object and section name.
// NOTE: we only keep the first 63 bytes of the hash to stay under BPF_OBJ_NAME_LEN
hash_t hash("SHA256");
auto sha256_hash = hash.hash_byte_ranges({{(uint8_t*)instructions, instruction_count * sizeof(ebpf_inst)}});
// Convert the hash to a string.
std::stringstream program_hash;
program_hash << std::hex << std::setfill('0');
for (auto byte : sha256_hash) {
program_hash << std::setw(2) << (int)byte;
}
program_hash_string = program_hash.str().substr(0, 63);
program_name = program_hash_string.c_str();
}
ebpf_handle_t program_handle;
@ -3250,6 +3261,11 @@ ebpf_program_load_bytes(
EBPF_RETURN_RESULT(result);
}
catch (const std::runtime_error& ex)
{
EBPF_LOG_MESSAGE_STRING(EBPF_TRACELOG_LEVEL_ERROR, EBPF_TRACELOG_KEYWORD_ERROR, "*** ERROR *** ", ex.what());
EBPF_RETURN_RESULT(EBPF_INVALID_ARGUMENT);
}
CATCH_NO_MEMORY_EBPF_RESULT
_Requires_lock_not_held_(_ebpf_state_mutex) static ebpf_result_t

Просмотреть файл

@ -52,6 +52,11 @@ get_helper_prototype_windows(int32_t n)
}
verifier_prototype.context_descriptor = info->program_type_descriptor->context_descriptor;
// Helper ID needs to be non-negative for Windows.
if (n < 0) {
throw std::runtime_error(std::string("helper ID is negative: ") + std::to_string(n));
}
const ebpf_helper_function_prototype_t* raw_prototype = _get_helper_function_prototype(info, n);
if (raw_prototype == nullptr) {
throw std::runtime_error(std::string("helper prototype not found: ") + std::to_string(n));

Просмотреть файл

Просмотреть файл

Просмотреть файл

@ -29,4 +29,5 @@ api-ms-win-core-interlocked-l1-1-0.dll
api-ms-win-core-heap-l1-1-0.dll
KERNEL32.dll
ADVAPI32.dll
dbghelp.dll
dbghelp.dll
bcrypt.dll

Просмотреть файл

@ -108,7 +108,7 @@
<ClCompile>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>$(SolutionDir)include;$(SolutionDir)resource;$(SolutionDir)tests\libs\util;$(SolutionDir)tests\libs\common;$(SolutionDir)external\ebpf-verifier\external\libbtf;$(OutDir);$(SolutionDir)tools\bpf2c;$(SolutionDir)external\ubpf\vm;$(SolutionDir)external\ebpf-verifier\external\bpf_conformance\external\elfio;$(SolutionDir)external\catch2\src;$(SolutionDir)external\catch2\build\generated-includes;$(SolutionDir)external\ebpf-verifier\src;$(SolutionDir)external\ubpf\vm\inc;$(SolutionDir)\external\ubpf\build\vm;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>$(SolutionDir)include;$(SolutionDir)resource;$(SolutionDir)tests\libs\util;$(SolutionDir)tests\libs\common;$(SolutionDir)external\ebpf-verifier\external\libbtf;$(OutDir);$(SolutionDir)tools\bpf2c;$(SolutionDir)external\ubpf\vm;$(SolutionDir)libs\shared;$(SolutionDir)external\ebpf-verifier\external\bpf_conformance\external\elfio;$(SolutionDir)external\catch2\src;$(SolutionDir)external\catch2\build\generated-includes;$(SolutionDir)external\ebpf-verifier\src;$(SolutionDir)external\ubpf\vm\inc;$(SolutionDir)\external\ubpf\build\vm;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
@ -124,7 +124,7 @@
<ClCompile>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>$(SolutionDir)include;$(SolutionDir)resource;$(SolutionDir)tests\libs\util;$(SolutionDir)tests\libs\common;$(SolutionDir)external\ebpf-verifier\external\libbtf;$(OutDir);$(OutDir)..\Debug;$(SolutionDir)tools\bpf2c;$(SolutionDir)external\ubpf\vm;$(SolutionDir)external\ebpf-verifier\external\bpf_conformance\external\elfio;$(SolutionDir)external\catch2\src;$(SolutionDir)external\catch2\build\generated-includes;$(SolutionDir)external\ebpf-verifier\src;$(SolutionDir)external\ubpf\vm\inc;$(SolutionDir)\external\ubpf\build\vm;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>$(SolutionDir)include;$(SolutionDir)resource;$(SolutionDir)tests\libs\util;$(SolutionDir)tests\libs\common;$(SolutionDir)external\ebpf-verifier\external\libbtf;$(OutDir);$(OutDir)..\Debug;$(SolutionDir)tools\bpf2c;$(SolutionDir)external\ubpf\vm;$(SolutionDir)libs\shared;$(SolutionDir)external\ebpf-verifier\external\bpf_conformance\external\elfio;$(SolutionDir)external\catch2\src;$(SolutionDir)external\catch2\build\generated-includes;$(SolutionDir)external\ebpf-verifier\src;$(SolutionDir)external\ubpf\vm\inc;$(SolutionDir)\external\ubpf\build\vm;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
@ -140,7 +140,7 @@
<ClCompile>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>$(SolutionDir)include;$(SolutionDir)resource;$(SolutionDir)tests\libs\util;$(SolutionDir)tests\libs\common;$(SolutionDir)external\ebpf-verifier\external\libbtf;$(OutDir);$(SolutionDir)tools\bpf2c;$(SolutionDir)external\ubpf\vm;$(SolutionDir)external\ebpf-verifier\external\bpf_conformance\external\elfio;$(SolutionDir)external\catch2\src;$(SolutionDir)external\catch2\build\generated-includes;$(SolutionDir)external\ebpf-verifier\src;$(SolutionDir)external\ubpf\vm\inc;$(SolutionDir)\external\ubpf\build\vm;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>$(SolutionDir)include;$(SolutionDir)resource;$(SolutionDir)tests\libs\util;$(SolutionDir)tests\libs\common;$(SolutionDir)external\ebpf-verifier\external\libbtf;$(OutDir);$(SolutionDir)tools\bpf2c;$(SolutionDir)external\ubpf\vm;$(SolutionDir)libs\shared;$(SolutionDir)external\ebpf-verifier\external\bpf_conformance\external\elfio;$(SolutionDir)external\catch2\src;$(SolutionDir)external\catch2\build\generated-includes;$(SolutionDir)external\ebpf-verifier\src;$(SolutionDir)external\ubpf\vm\inc;$(SolutionDir)\external\ubpf\build\vm;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
@ -156,7 +156,7 @@
<ClCompile>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;BPF2C_VERBOSE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>$(SolutionDir)include;$(SolutionDir)resource;$(SolutionDir)tests\libs\util;$(SolutionDir)tests\libs\common;$(SolutionDir)external\ebpf-verifier\external\libbtf;$(OutDir);$(SolutionDir)tools\bpf2c;$(SolutionDir)external\ubpf\vm;$(SolutionDir)external\ebpf-verifier\external\bpf_conformance\external\elfio;$(SolutionDir)external\catch2\src;$(SolutionDir)external\catch2\build\generated-includes;$(SolutionDir)external\ebpf-verifier\src;$(SolutionDir)external\ubpf\vm\inc;$(SolutionDir)\external\ubpf\build\vm;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>$(SolutionDir)include;$(SolutionDir)resource;$(SolutionDir)tests\libs\util;$(SolutionDir)tests\libs\common;$(SolutionDir)external\ebpf-verifier\external\libbtf;$(OutDir);$(SolutionDir)tools\bpf2c;$(SolutionDir)external\ubpf\vm;$(SolutionDir)libs\shared;$(SolutionDir)external\ebpf-verifier\external\bpf_conformance\external\elfio;$(SolutionDir)external\catch2\src;$(SolutionDir)external\catch2\build\generated-includes;$(SolutionDir)external\ebpf-verifier\src;$(SolutionDir)external\ubpf\vm\inc;$(SolutionDir)\external\ubpf\build\vm;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
@ -174,7 +174,7 @@
<ClCompile>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;BPF2C_VERBOSE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>$(SolutionDir)include;$(SolutionDir)resource;$(SolutionDir)tests\libs\util;$(SolutionDir)tests\libs\common;$(SolutionDir)external\ebpf-verifier\external\libbtf;$(OutDir);$(OutDir)..\Release;$(SolutionDir)tools\bpf2c;$(SolutionDir)external\ubpf\vm;$(SolutionDir)external\ebpf-verifier\external\bpf_conformance\external\elfio;$(SolutionDir)external\catch2\src;$(SolutionDir)external\catch2\build\generated-includes;$(SolutionDir)external\ebpf-verifier\src;$(SolutionDir)external\ubpf\vm\inc;$(SolutionDir)\external\ubpf\build\vm;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>$(SolutionDir)include;$(SolutionDir)resource;$(SolutionDir)tests\libs\util;$(SolutionDir)tests\libs\common;$(SolutionDir)external\ebpf-verifier\external\libbtf;$(OutDir);$(OutDir)..\Release;$(SolutionDir)tools\bpf2c;$(SolutionDir)external\ubpf\vm;$(SolutionDir)libs\shared;$(SolutionDir)external\ebpf-verifier\external\bpf_conformance\external\elfio;$(SolutionDir)external\catch2\src;$(SolutionDir)external\catch2\build\generated-includes;$(SolutionDir)external\ebpf-verifier\src;$(SolutionDir)external\ubpf\vm\inc;$(SolutionDir)\external\ubpf\build\vm;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>

Просмотреть файл

@ -2449,6 +2449,62 @@ _create_service_helper(
ERROR_SUCCESS);
}
#if !defined(CONFIG_BPF_JIT_DISABLED) || !defined(CONFIG_BPF_INTERPRETER_DISABLED)
TEST_CASE("ebpf_program_load_bytes-name-gen", "[end-to-end]")
{
_test_helper_end_to_end test_helper;
test_helper.initialize();
single_instance_hook_t hook(EBPF_PROGRAM_TYPE_SAMPLE, EBPF_ATTACH_TYPE_SAMPLE);
REQUIRE(hook.initialize() == EBPF_SUCCESS);
program_info_provider_t sample_program_info;
REQUIRE(sample_program_info.initialize(EBPF_PROGRAM_TYPE_SAMPLE) == EBPF_SUCCESS);
// Try with a valid set of instructions.
struct ebpf_inst instructions[] = {
{0xb7, R0_RETURN_VALUE, 0}, // r0 = 0
{INST_OP_EXIT}, // return r0
};
uint32_t insn_cnt = _countof(instructions);
const bpf_prog_type_t prog_type = BPF_PROG_TYPE_SAMPLE;
const ebpf_program_type_t* program_type = ebpf_get_ebpf_program_type(prog_type);
REQUIRE(program_type != nullptr);
REQUIRE(insn_cnt != 0);
fd_t program_fd;
#pragma warning(suppress : 28193) // result is examined
ebpf_result_t result = ebpf_program_load_bytes(
program_type,
nullptr,
EBPF_EXECUTION_ANY,
reinterpret_cast<const ebpf_inst*>(instructions),
insn_cnt,
nullptr,
0,
&program_fd);
REQUIRE(result == EBPF_SUCCESS);
REQUIRE(program_fd >= 0);
// Now query the program info and verify it matches what we set.
bpf_prog_info program_info = {};
uint32_t program_info_size = sizeof(program_info);
REQUIRE(bpf_obj_get_info_by_fd(program_fd, &program_info, &program_info_size) == 0);
REQUIRE(program_info_size == sizeof(program_info));
REQUIRE(program_info.nr_map_ids == 0);
REQUIRE(program_info.map_ids == 0);
REQUIRE(program_info.name != NULL);
// Name should contain SHA256 hash in hex (minus last char to stay under BPF_OBJ_NAME_LEN).
REQUIRE(strlen(program_info.name) == 63);
REQUIRE(program_info.type == prog_type);
Platform::_close(program_fd);
}
#endif
// Load a native module with non-existing driver.
TEST_CASE("load_native_program_negative", "[end-to-end]")
{

Просмотреть файл

@ -152,7 +152,7 @@
<ItemGroup>
<ClCompile Include="..\..\..\libs\thunk\mock\mock.cpp" />
<ClCompile Include="..\..\end_to_end\test_helper.cpp" />
<ClCompile Include="..\..\libs\util\hash.cpp" />
<ClCompile Include="..\..\..\libs\shared\hash.cpp" />
<ClCompile Include="libfuzz_harness.cpp" />
</ItemGroup>
<ItemGroup>
@ -160,7 +160,7 @@
<ClInclude Include="..\..\..\tools\bpf2c\bpf_code_generator.h" />
<ClInclude Include="..\..\end_to_end\test_helper.hpp" />
<ClInclude Include="..\..\libs\thunk\mock\mock.h" />
<ClInclude Include="..\..\libs\util\hash.h" />
<ClInclude Include="..\..\..\libs\shared\hash.h" />
<ClInclude Include="..\end_to_end\test_helper.hpp" />
</ItemGroup>
<ItemGroup>

Просмотреть файл

@ -28,7 +28,7 @@
<ClCompile Include="..\..\end_to_end\test_helper.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\libs\util\hash.cpp">
<ClCompile Include="..\..\..\libs\shared\hash.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
@ -48,7 +48,7 @@
<ClInclude Include="..\..\end_to_end\test_helper.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\libs\util\hash.h">
<ClInclude Include="..\..\..\libs\shared\hash.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>

Просмотреть файл

@ -28,7 +28,7 @@
</ItemGroup>
<ItemGroup>
<ClCompile Include="capture_helper.cpp" />
<ClCompile Include="hash.cpp" />
<ClCompile Include="..\..\..\libs\shared\hash.cpp" />
<ClCompile Include="ioctl_helper.cpp" />
<ClCompile Include="native_helper.cpp" />
<ClCompile Include="netsh_helper.cpp" />
@ -37,7 +37,7 @@
<ClCompile Include="program_helper.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="hash.h" />
<ClInclude Include="..\..\..\libs\shared\hash.h" />
<ClInclude Include="header.h" />
<ClInclude Include="ioctl_helper.h" />
<ClInclude Include="native_helper.hpp" />

Просмотреть файл

@ -11,7 +11,7 @@
<ClCompile Include="service_helper.cpp" />
<ClCompile Include="socket_helper.cpp" />
<ClCompile Include="program_helper.cpp" />
<ClCompile Include="hash.cpp" />
<ClCompile Include="..\..\..\libs\shared\hash.cpp" />
<ClCompile Include="native_helper.cpp" />
</ItemGroup>
<ItemGroup>
@ -20,7 +20,7 @@
<ClInclude Include="socket_helper.h" />
<ClInclude Include="program_helper.h" />
<ClInclude Include="wer_report.hpp" />
<ClInclude Include="hash.h" />
<ClInclude Include="..\..\..\libs\shared\hash.h" />
<ClInclude Include="header.h" />
<ClInclude Include="native_helper.hpp" />
</ItemGroup>

Просмотреть файл

@ -99,7 +99,8 @@ get_program_info_type_hash(const std::vector<int32_t>& actual_helper_ids, const
if (actual_helper_id_count > 0) {
for (size_t index = 0; index < program_info->count_of_program_type_specific_helpers; index++) {
uint32_t helper_id = program_info->program_type_specific_helper_prototype[index].helper_id;
if (std::find(actual_helper_ids.begin(), actual_helper_ids.end(), helper_id) != actual_helper_ids.end()) {
if (std::find(actual_helper_ids.begin(), actual_helper_ids.end(), (int32_t)helper_id) !=
actual_helper_ids.end()) {
helper_id_ordering[helper_id] = index;
}
}

Просмотреть файл

@ -104,7 +104,7 @@
<ClCompile>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;ENABLE_SKIP_VERIFY;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>$(SolutionDir)include;$(SolutionDir)external\ebpf-verifier\external\bpf_conformance\external\elfio;$(SolutionDir)external\ebpf-verifier\external\libbtf;$(SolutionDir)external\ubpf\vm;$(OutDir);$(SolutionDir)external\ebpf-verifier\src;$(SolutionDir)resource;$(SolutionDir)tests\libs\util;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>$(SolutionDir)include;$(SolutionDir)external\ebpf-verifier\external\bpf_conformance\external\elfio;$(SolutionDir)external\ebpf-verifier\external\libbtf;$(SolutionDir)external\ubpf\vm;$(SolutionDir)libs\shared;$(OutDir);$(SolutionDir)external\ebpf-verifier\src;$(SolutionDir)resource;$(SolutionDir)tests\libs\util;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
@ -122,7 +122,7 @@
<ClCompile>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;ENABLE_SKIP_VERIFY;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>$(SolutionDir)include;$(SolutionDir)external\ebpf-verifier\external\bpf_conformance\external\elfio;$(SolutionDir)external\ebpf-verifier\external\libbtf;$(SolutionDir)external\ubpf\vm;$(OutDir);$(OutDir)..\Debug;$(SolutionDir)external\ebpf-verifier\src;$(SolutionDir)resource;$(SolutionDir)tests\libs\util;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>$(SolutionDir)include;$(SolutionDir)external\ebpf-verifier\external\bpf_conformance\external\elfio;$(SolutionDir)external\ebpf-verifier\external\libbtf;$(SolutionDir)external\ubpf\vm;$(SolutionDir)libs\shared;$(OutDir);$(OutDir)..\Debug;$(SolutionDir)external\ebpf-verifier\src;$(SolutionDir)resource;$(SolutionDir)tests\libs\util;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
@ -137,7 +137,7 @@
<ClCompile>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;ENABLE_SKIP_VERIFY;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>$(SolutionDir)include;$(SolutionDir)external\ebpf-verifier\external\bpf_conformance\external\elfio;$(SolutionDir)external\ebpf-verifier\external\libbtf;$(SolutionDir)external\ubpf\vm;$(OutDir);$(SolutionDir)external\ebpf-verifier\src;$(SolutionDir)resource;$(SolutionDir)tests\libs\util;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>$(SolutionDir)include;$(SolutionDir)external\ebpf-verifier\external\bpf_conformance\external\elfio;$(SolutionDir)external\ebpf-verifier\external\libbtf;$(SolutionDir)external\ubpf\vm;$(SolutionDir)libs\shared;$(OutDir);$(SolutionDir)external\ebpf-verifier\src;$(SolutionDir)resource;$(SolutionDir)tests\libs\util;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
@ -153,7 +153,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>$(SolutionDir)include;$(SolutionDir)external\ebpf-verifier\external\bpf_conformance\external\elfio;$(SolutionDir)external\ebpf-verifier\external\libbtf;$(SolutionDir)external\ubpf\vm;$(OutDir);$(SolutionDir)external\ebpf-verifier\src;$(SolutionDir)resource;$(SolutionDir)tests\libs\util;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>$(SolutionDir)include;$(SolutionDir)external\ebpf-verifier\external\bpf_conformance\external\elfio;$(SolutionDir)external\ebpf-verifier\external\libbtf;$(SolutionDir)external\ubpf\vm;$(SolutionDir)libs\shared;$(OutDir);$(SolutionDir)external\ebpf-verifier\src;$(SolutionDir)resource;$(SolutionDir)tests\libs\util;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
@ -171,7 +171,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>$(SolutionDir)include;$(SolutionDir)external\ebpf-verifier\external\bpf_conformance\external\elfio;$(SolutionDir)external\ebpf-verifier\external\libbtf;$(SolutionDir)external\ubpf\vm;$(OutDir);$(OutDir)..\Release;$(SolutionDir)external\ebpf-verifier\src;$(SolutionDir)resource;$(SolutionDir)tests\libs\util;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>$(SolutionDir)include;$(SolutionDir)external\ebpf-verifier\external\bpf_conformance\external\elfio;$(SolutionDir)external\ebpf-verifier\external\libbtf;$(SolutionDir)external\ubpf\vm;$(SolutionDir)libs\shared;$(OutDir);$(OutDir)..\Release;$(SolutionDir)external\ebpf-verifier\src;$(SolutionDir)resource;$(SolutionDir)tests\libs\util;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
@ -185,7 +185,7 @@
</PreBuildEvent>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\..\tests\libs\util\hash.cpp" />
<ClCompile Include="..\..\libs\shared\hash.cpp" />
<ClCompile Include="bpf2c.cpp" />
<CustomBuild Include="bpf2c_dll.c">
<FileType>CppCode</FileType>
@ -247,7 +247,7 @@
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
<DeploymentContent Condition="'$(Configuration)|$(Platform)'=='NativeOnlyRelease|x64'">true</DeploymentContent>
</ClInclude>
<ClInclude Include="..\..\tests\libs\util\hash.h" />
<ClInclude Include="..\..\libs\shared\hash.h" />
<ClInclude Include="bpf_code_generator.h" />
</ItemGroup>
<ItemGroup>
@ -283,4 +283,4 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
</Project>

Просмотреть файл

@ -25,7 +25,7 @@
<ClCompile Include="bpf_code_generator.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\tests\libs\util\hash.cpp">
<ClCompile Include="..\..\libs\shared\hash.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
@ -39,7 +39,7 @@
<ClInclude Include="..\..\external\ebpf-verifier\src\btf_parser.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\tests\libs\util\hash.h">
<ClInclude Include="..\..\libs\shared\hash.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>