尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

2024最新C++开发环境搭建全攻略

2024最新C++开发环境搭建全攻略 1. C开发环境搭建全景指南作为一门历经40年演进依然活跃在系统编程前沿的语言C环境配置远不只是安装编译器那么简单。从新手第一次配置PATH变量到老手优化多版本共存方案每个阶段都有需要特别注意的技术细节。本文将基于最新工具链2024年系统梳理从零开始构建C开发环境的完整路径。实测环境Windows 11 23H2 Visual Studio 2022 GCC 13.2 Clang 171.1 现代C开发工具链组成当代C开发环境已形成标准化的工具矩阵编译器三巨头MSVCWindows原生、GCC跨平台标准、ClangLLVM系构建系统CMake现代项目标配、Makefile传统项目、Ninja高效构建包管理vcpkg微软生态、Conan跨平台、SpackHPC领域IDE选择Visual Studio全功能、VS Code轻量级、CLion专业级调试工具GDB/LLDB命令行、Visual Studio Debugger图形化以VS Code为例完整的工具链依赖包括C扩展包 → CMake工具链 → 编译器路径配置 → 调试器适配 → 代码分析插件1.2 编译器安装的版本陷阱微软系编译器安装需特别注意Visual Studio Build Tools独立安装时必须勾选使用C的桌面开发和Windows 10 SDK最新MSVC工具集版本如v143可能需要单独安装Windows 11 SDK多版本并存时建议通过VCVARSALL.bat切换环境变量Linux环境下GCC版本管理更复杂# Ubuntu示例 sudo apt install gcc-13 g-13 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-13 100 sudo update-alternatives --config gcc # 交互式选择常见版本冲突症状头文件找不到如format在GCC13不可用ABI不兼容导致链接错误C20模块支持差异1.3 构建系统的现代实践CMake已成为事实标准但3.0后的语法演进带来学习曲线# 现代CMake示例3.21 cmake_minimum_required(VERSION 3.21) project(ModernCpp LANGUAGES CXX) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) add_library(MyLib STATIC src/lib.cpp) target_include_directories(MyLib PUBLIC include) add_executable(Demo apps/demo.cpp) target_link_libraries(Demo PRIVATE MyLib)关键进步面向目标的依赖管理PUBLIC/PRIVATE/INTERFACE生成器表达式$CONFIG:Debug预设文件CMakePresets.json1.4 依赖管理的工程化方案vcpkg的manifest模式革新了C依赖管理// vcpkg.json { name: my-project, version: 1.0, dependencies: [ fmt, { name: spdlog, features: [fmt_external] } ] }集成到CMake时需注意# CMakeLists.txt find_package(fmt CONFIG REQUIRED) target_link_libraries(MyApp PRIVATE fmt::fmt)1.5 调试环境的深度配置VS Code的launch.json需要精细调整{ version: 0.2.0, configurations: [ { name: C Debug, type: cppdbg, request: launch, program: ${workspaceFolder}/build/Demo, args: [], stopAtEntry: false, cwd: ${workspaceFolder}, environment: [], externalConsole: false, MIMode: gdb, setupCommands: [ { description: 启用整齐打印, text: -enable-pretty-printing, ignoreFailures: true } ] } ] }高级调试技巧条件断点i 100内存断点watchpoint反向调试rr工具2. 多平台环境配置详解2.1 Windows平台最佳实践MSVC环境变量管理是关键# 查询已安装工具链 vswhere -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 # 设置特定版本环境 Invoke-BatchFile C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat x64常见问题处理MSB8036缺少Windows SDK时需通过Visual Studio Installer添加对应版本LNK2005多版本运行时库冲突检查/MD与/MT选项C3615constexpr函数编译错误更新编译器至最新补丁2.2 Linux环境配置要点Ubuntu下推荐使用Clanglibc组合sudo apt install clang-17 libc-17-dev libcabi-17-dev export CXXclang-17 export CCclang-17系统级配置建议# 提升编译效率 echo export CMAKE_BUILD_PARALLEL_LEVEL$(nproc) ~/.bashrc echo export MAKEFLAGS-j$(nproc) ~/.bashrc # 内存不足时使用交换文件 sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile2.3 macOS跨平台开发配置Homebrew结合Xcode工具链brew install llvm echo export PATH/opt/homebrew/opt/llvm/bin:$PATH ~/.zshrc # 使用brew的clang替代系统版本 export CC/opt/homebrew/opt/llvm/bin/clang export CXX/opt/homebrew/opt/llvm/bin/clang处理macOS特有问题代码签名问题xcrun --find codesign系统头文件路径xcrun --show-sdk-path弱链接库处理-Wl,-weak_library3. 工程化环境管理方案3.1 多版本编译器管理使用Docker容器化开发环境FROM ubuntu:22.04 RUN apt update apt install -y \ clang-15 lldb-15 lld-15 \ g-12 \ cmake ninja-build ENV CCclang-15 \ CXXclang-15VS Code的devcontainer.json配置{ name: C Dev, image: my-cpp-env:latest, remoteUser: vscode, customizations: { vscode: { extensions: [ ms-vscode.cpptools, ms-vscode.cmake-tools ] } } }3.2 预编译头优化技术现代CMake中的PCH配置target_precompile_headers(MyLib PUBLIC vector string memory )实测数据i9-13900K编译模式无PCH有PCH提升完整构建142s89s37%增量构建28s6s78%3.3 分布式构建加速使用clangd cache的配置# .clangd CompileFlags: Add: [-Wall, -Wextra] Cache: Directory: .cache/clangd分布式编译工具对比工具协议缓存支持容错性distccTCP无低icecream自定义有中sccacheHTTP有高4. 高级调试与性能分析4.1 内存问题诊断工具链AddressSanitizer配置CMaketarget_compile_options(MyApp PRIVATE -fsanitizeaddress -fno-omit-frame-pointer) target_link_options(MyApp PRIVATE -fsanitizeaddress)常用工具组合ASan内存错误UBSan未定义行为TSan线程问题MSan未初始化内存4.2 性能分析实战perf工具基础工作流perf record -g ./MyApp # 记录性能数据 perf report -n --stdio # 文本分析 perf annotate -s MyFunc # 函数级分析火焰图生成perf script | stackcollapse-perf.pl | flamegraph.pl profile.svg4.3 并发问题调试技巧ThreadSanitizer典型输出解析WARNING: ThreadSanitizer: data race Write of size 4 at 0x7b040000eff0 by thread T1: #0 MyClass::update() /path/to/file.cpp:42 Previous read of size 4 at 0x7b040000eff0 by thread T2: #0 MyClass::getValue() /path/to/file.cpp:38死锁检测工具gdb的thread apply all bt命令Clang的-fsanitizethreadWindows的!analyze -v5. 现代C特性支持配置5.1 模块化编译配置CMake中启用C20模块target_compile_features(MyApp PRIVATE cxx_std_20) set(CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API 2182bf5c-ef0d-489a-91da-49dbc3090d2a)模块接口单元示例// math.ixx export module math; export { int add(int a, int b) { return a b; } double sqrt(double d); }5.2 协程支持配置编译器标志差异编译器协程标志标准库要求MSVC/awaitGCC-fcoroutines需最新libstdcClang-fcoroutines-ts需libcabi典型CMake配置if(MSVC) target_compile_options(MyApp PRIVATE /await) else() target_compile_options(MyApp PRIVATE -fcoroutines) endif()5.3 静态分析集成clang-tidy的CMake集成set(CMAKE_CXX_CLANG_TIDY clang-tidy; -checks*; -warnings-as-errors*; --extra-arg-stdc20 )CI流水线示例jobs: static-analysis: runs-on: ubuntu-latest steps: - uses: actions/checkoutv3 - run: | sudo apt install clang-tidy cmake -B build -DCMAKE_CXX_CLANG_TIDYclang-tidy . cmake --build build6. 跨平台开发特殊处理6.1 文件系统路径处理使用C17的filesystemnamespace fs std::filesystem; void processPath(const fs::path p) { if (fs::is_regular_file(p)) { auto size fs::file_size(p); // 跨平台文件大小 } }路径转换注意事项Windows的wchar_t路径需要UTF-8转换macOS的/private前缀处理Linux的符号链接解析6.2 终端编码问题跨平台控制台输出方案#ifdef _WIN32 #include windows.h #endif void initConsole() { #ifdef _WIN32 SetConsoleOutputCP(65001); // UTF-8 HANDLE hOut GetStdHandle(STD_OUTPUT_HANDLE); DWORD dwMode 0; GetConsoleMode(hOut, dwMode); dwMode | ENABLE_VIRTUAL_TERMINAL_PROCESSING; SetConsoleMode(hOut, dwMode); #endif }6.3 系统API抽象设计典型平台抽象层设计class PlatformTimer { public: virtual void start() 0; virtual double elapsedMs() 0; }; #ifdef _WIN32 class WindowsTimer : public PlatformTimer { LARGE_INTEGER freq, start; public: WindowsTimer() { QueryPerformanceFrequency(freq); } void start() override { QueryPerformanceCounter(start); } double elapsedMs() override { LARGE_INTEGER end; QueryPerformanceCounter(end); return (end.QuadPart - start.QuadPart) * 1000.0 / freq.QuadPart; } }; #else class PosixTimer : public PlatformTimer { timespec start; public: void start() override { clock_gettime(CLOCK_MONOTONIC, start); } double elapsedMs() override { timespec end; clock_gettime(CLOCK_MONOTONIC, end); return (end.tv_sec - start.tv_sec) * 1000.0 (end.tv_nsec - start.tv_nsec) / 1000000.0; } }; #endif7. 性能优化编译选项7.1 编译器优化级别对比GCC/Clang优化级别实测优化级别编译时间运行时间代码大小-O01.0x1.0x1.0x-O11.2x0.65x0.9x-O21.5x0.55x0.85x-O32.1x0.52x0.95x-Os1.8x0.6x0.7x7.2 LTO链接时优化CMake中启用LTOinclude(CheckIPOSupported) check_ipo_supported(RESULT result OUTPUT output) if(result) set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE) endif()LTO效果对比x86_64代码体积减少15-20%运行时性能提升5-10%链接时间增加2-3倍7.3 PGO性能导向优化GCC的PGO工作流# 第一阶段生成profile数据 g -fprofile-generate -O2 -o myapp myapp.cpp ./myapp training_inputs # 第二阶段使用profile优化 g -fprofile-use -O3 -o myapp myapp.cpp实测效果HPC场景数值计算性能提升8-15%分支预测准确率提高缓存利用率优化8. 持续集成环境配置8.1 GitHub Actions工作流完整的多平台CI示例name: C CI on: [push, pull_request] jobs: build: strategy: matrix: os: [ubuntu-latest, windows-latest, macos-latest] compiler: [gcc, clang] exclude: - os: windows-latest compiler: clang - os: macos-latest compiler: gcc runs-on: ${{ matrix.os }} steps: - uses: actions/checkoutv3 - name: Install deps run: | if [ ${{ matrix.os }} ubuntu-latest ]; then sudo apt update sudo apt install ${{ matrix.compiler }}-12 fi - name: Build run: | CXX${{ matrix.compiler }}-12 cmake -B build cmake --build build8.2 代码覆盖率集成GCOVLCov配置target_compile_options(MyApp PRIVATE --coverage) target_link_libraries(MyApp PRIVATE --coverage)CI中生成报告lcov --capture --directory . --output-file coverage.info genhtml coverage.info --output-directory coverage_report8.3 包管理集成Conan与CMake集成# conanfile.py class MyApp(ConanFile): settings os, compiler, build_type, arch requires fmt/9.1.0, spdlog/1.11.0 generators cmake_find_packageCMakeLists.txt对应配置find_package(fmt REQUIRED) find_package(spdlog REQUIRED) target_link_libraries(MyApp PRIVATE fmt::fmt spdlog::spdlog)9. 嵌入式开发特殊配置9.1 交叉编译工具链典型ARM工具链文件set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR arm) set(TOOLCHAIN_PREFIX arm-linux-gnueabihf-) set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}gcc) set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}g) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)9.2 内存受限优化嵌入式关键编译选项target_compile_options(MyFirmware PRIVATE -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti ) target_link_options(MyFirmware PRIVATE -Wl,--gc-sections -Wl,-Mapoutput.map )9.3 实时系统支持FreeRTOS集成要点正确设置configMINIMAL_STACK_SIZE重载_sbrk等系统调用使用-nostartfiles选项实现vApplicationStackOverflowHook10. 安全加固配置方案10.1 编译器安全选项现代防护技术组合target_compile_options(SecureApp PRIVATE -fstack-protector-strong -D_FORTIFY_SOURCE2 -fPIE -Wformat -Wformat-security ) target_link_options(SecureApp PRIVATE -Wl,-z,now -Wl,-z,relro -pie )10.2 静态分析加固Clang静态分析进阶配置Checks: -*,clang-analyzer-*, security.*, cert-*, misc-* WarningsAsErrors: true HeaderFilterRegex: .*/include/.* AnalyzeTemporaryDtors: true10.3 动态防护技术ASan强化配置export ASAN_OPTIONSdetect_stack_use_after_return1:check_initialization_order1内存消毒完整方案ASan地址错误检测UBSan未定义行为MSan未初始化内存TSan线程竞争11. 现代C项目模板11.1 标准项目结构行业推荐布局project/ ├── cmake/ │ ├── FindDependencies.cmake │ └── CompilerOptions.cmake ├── include/ │ └── project/ │ └── public_header.h ├── src/ │ ├── private_impl.cpp │ └── CMakeLists.txt ├── tests/ │ ├── unit/ │ └── integration/ ├── third_party/ ├── CMakeLists.txt └── README.md11.2 自动化文档集成DoxygenCMake集成find_package(Doxygen REQUIRED) doxygen_add_docs( doc ${PROJECT_SOURCE_DIR}/include COMMENT Generate API documentation )11.3 单元测试框架Catch2 v3集成示例// tests/unit/test_sample.cpp #include catch2/catch_test_macros.hpp #include project/library.h TEST_CASE(Factorial calculation, [math]) { REQUIRE(factorial(0) 1); REQUIRE(factorial(5) 120); }CMake配置FetchContent_Declare( catch2 GIT_REPOSITORY https://github.com/catchorg/Catch2.git GIT_TAG v3.3.2 ) FetchContent_MakeAvailable(catch2) add_executable(tests test_sample.cpp) target_link_libraries(tests PRIVATE project_library Catch2::Catch2WithMain)12. 性能关键型项目优化12.1 SIMD指令优化CMake中检测CPU特性include(CheckCXXCompilerFlag) check_cxx_compiler_flag(-mavx2 COMPILER_SUPPORTS_AVX2) if(COMPILER_SUPPORTS_AVX2) target_compile_options(MyApp PRIVATE -mavx2) endif()现代C SIMD用法#include immintrin.h void simdAdd(float* a, float* b, float* c, size_t n) { for(size_t i0; in; i8) { __m256 va _mm256_load_ps(ai); __m256 vb _mm256_load_ps(bi); __m256 vc _mm256_add_ps(va, vb); _mm256_store_ps(ci, vc); } }12.2 内存布局优化结构体对齐控制struct alignas(64) CriticalData { int key; double values[8]; // 保证占用整个缓存行 };缓存友好设计原则结构体大小对齐到2^N字节热数据集中存放避免false sharing预取关键数据12.3 无锁编程支持C20原子操作示例#include atomic class LockFreeQueue { std::atomicsize_t head{0}, tail{0}; std::vectorint buffer; public: bool push(int value) { size_t t tail.load(std::memory_order_relaxed); if((t 1) % buffer.size() head.load(std::memory_order_acquire)) return false; buffer[t] value; tail.store((t 1) % buffer.size(), std::memory_order_release); return true; } };内存序选择指南场景推荐内存序单一原子变量relaxed生产者消费者模式release/acquire多变量原子性保证seq_cst13. 图形与游戏开发配置13.1 OpenGL现代配置GLAD加载器配置// 初始化OpenGL上下文 if(!gladLoadGL()) { throw std::runtime_error(Failed to initialize OpenGL); } // 检查版本 std::cout OpenGL GLVersion.major . GLVersion.minor \n;现代GLFW窗口创建glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 6); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); GLFWwindow* window glfwCreateWindow(800, 600, OpenGL, NULL, NULL);13.2 Vulkan环境配置Vulkan SDK安装检查# Linux export VULKAN_SDK/path/to/sdk export LD_LIBRARY_PATH$VULKAN_SDK/lib:$LD_LIBRARY_PATH export VK_LAYER_PATH$VULKAN_SDK/etc/vulkan/explicit_layer.d # Windows set VULKAN_SDKC:\VulkanSDK\1.3.250.1 set PATH%VULKAN_SDK%\bin;%PATH%验证层启用const std::vectorconst char* validationLayers { VK_LAYER_KHRONOS_validation }; if (enableValidationLayers) { createInfo.enabledLayerCount static_castuint32_t(validationLayers.size()); createInfo.ppEnabledLayerNames validationLayers.data(); }13.3 游戏引擎集成Unreal Engine的C项目配置安装匹配版本的Visual Studio工具链设置UnrealBuildTool编译系统配置*.Build.cs模块依赖处理引擎模块的PCH文件Godot的C模块开发# SConstruct env Environment(tools[default, text]) env.Append(CPPPATH[godot_headers]) env.SharedLibrary(targetdemo, source[demo.cpp])14. 机器学习与科学计算14.1 BLAS/LAPACK集成OpenBLAS编译选项make USE_OPENMP1 DYNAMIC_ARCH1 NUM_THREADS64CMake中链接优化find_package(BLAS REQUIRED) find_package(LAPACK REQUIRED) target_link_libraries(MyMath PRIVATE ${BLAS_LIBRARIES} ${LAPACK_LIBRARIES})14.2 TensorFlow C APIBazel构建配置cc_binary( name model_runner, srcs [model_runner.cc], deps [ org_tensorflow//tensorflow/core:tensorflow, org_tensorflow//tensorflow/cc:cc_ops, ], )模型加载典型流程tensorflow::Session* session; tensorflow::GraphDef graph_def; TF_CHECK_OK(ReadBinaryProto(tensorflow::Env::Default(), model.pb, graph_def)); TF_CHECK_OK(NewSession(tensorflow::SessionOptions(), session)); TF_CHECK_OK(session-Create(graph_def));14.3 高性能数学库Eigen3的SIMD优化Eigen::Matrix4f a, b; Eigen::setNbThreads(4); // 启用多线程 Eigen::Matrix4f c a * b; // 自动向量化Intel MKL配置find_package(MKL REQUIRED) target_include_directories(MyApp PRIVATE ${MKL_INCLUDE_DIRS}) target_link_libraries(MyApp PRIVATE ${MKL_LIBRARIES})15. 音视频处理专项配置15.1 FFmpeg集成开发CMake中查找FFmpegfind_package(PkgConfig REQUIRED) pkg_check_modules(FFMPEG REQUIRED libavcodec libavformat libavutil) target_include_directories(MyApp PRIVATE ${FFMPEG_INCLUDE_DIRS}) target_link_libraries(MyApp PRIVATE ${FFMPEG_LIBRARIES})解码器初始化示例AVCodec* codec avcodec_find_decoder(AV_CODEC_ID_H264); AVCodecContext* codec_ctx avcodec_alloc_context3(codec); avcodec_open2(codec_ctx, codec, NULL);15.2 实时音频处理PortAudio配置示例Pa_Initialize(); PaStream* stream; Pa_OpenDefaultStream(stream, 0, 1, paFloat32, 44100, 256, audioCallback, nullptr); Pa_StartStream(stream);JACK音频服务器集成export JACK_NO_AUDIO_RESERVATION1 jackd -d alsa -r 48000 -p 102415.3 硬件加速编解码VAAPI硬件解码配置AVBufferRef* hw_ctx nullptr; av_hwdevice_ctx_create(hw_ctx, AV_HWDEVICE_TYPE_VAAPI, NULL, NULL, 0); AVCodecContext* codec_ctx avcodec_alloc_context3(codec); codec_ctx-hw_device_ctx av_buffer_ref(hw_ctx);NVIDIA NVENC设置ffmpeg -hwaccel cuda -i input.mp4 -c:v h264_nvenc -preset slow output.mp416. 网络与分布式系统16.1 异步IO配置Boost.Asio多线程模式io_context io; thread_pool pool(4); // 4个IO线程 post(pool, []{ tcp::socket socket(io); // 异步操作 }); io.run(); // 主线程运行事件循环16.2 协议缓冲区集成protobuf的CMake集成find_package(Protobuf REQUIRED) protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS message.proto) add_executable(proto_example main.cpp ${PROTO_SRCS} ${PROTO_HDRS}) target_link_libraries(proto_example PRIVATE protobuf::libprotobuf)16.3 高性能RPC框架gRPC编译选项find_package(gRPC REQUIRED) target_link_libraries(MyService PRIVATE gRPC::grpc gRPC::grpc_reflection )服务端启动示例ServerBuilder builder; builder.AddListeningPort(0.0.0.0:50051, InsecureServerCredentials()); builder.RegisterService(my_service); std::unique_ptrServer server(builder.BuildAndStart()); server-Wait();17. GUI应用程序开发17.1 Qt6现代配置CMake集成Qt6find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets) qt_add_executable(MyApp main.cpp) target_link_libraries(MyApp PRIVATE Qt6::Core Qt6::Gui Qt6::Widgets)QML热重载配置qml --watch ./main.qml17.2 ImGui集成方案GLFWOpenGL3后端IMGUI_CHECKVERSION(); ImGui::CreateContext(); ImGui_ImplGlfw_InitForOpenGL(window, true); ImGui_ImplOpenGL3_Init(#version 330);渲染循环ImGui_ImplOpenGL3_NewFrame(); ImGui_ImplGlfw_NewFrame(); ImGui::NewFrame(); // 绘制UI ImGui::Begin(Demo); ImGui::Text(Hello World); ImGui::End(); ImGui::Render(); ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData());17.3 跨平台GUI框架wxWidgets编译选项wx-config --cxxflags wx-config --libs现代CMake集成find_package(wxWidgets REQUIRED) include(${wxWidgets_USE_FILE}) target_link_libraries(MyApp PRIVATE ${wxWidgets_LIBRARIES})18. 移动端开发配置18.1 Android NDK集成CMake工具链文件set(CMAKE_SYSTEM_NAME Android) set(CMAKE_ANDROID_NDK /path/to/ndk) set(CMAKE_ANDROID_ARCH_ABI arm64-v8a) set(CMAKE_ANDROID_STL_TYPE c_shared)JNI接口处理extern C JNIEXPORT jstring JNICALL Java_com_example_MainActivity_stringFromJNI(JNIEnv* env, jobject) { return env-NewStringUTF(Hello from C); }18.2 iOS跨平台构建Xcode工具链配置set(CMAKE_SYSTEM_NAME iOS) set(CMAKE_OSX_ARCHITECTURES arm64) set(CMAKE_OSX_DEPLOYMENT_TARGET 15.0)Metal着色器编译xcrun -sdk iphoneos metal -c shader.metal -o shader.air xcrun -sdk iphoneos metallib shader.air -o shader.metallib19. 逆向工程与二进制分析19.1 调试符号处理分离调试符号Linuxobjcopy --only-keep-debug myapp myapp.debug strip --strip-debug --strip-unneeded myapp objcopy --add-gnu-debuglinkmyapp.debug myappPDB文件管理Windowssymstore add /f MyApp.pdb /s C:\Symbols /t MyApp /v 1.0.019.2 反汇编工具链Capstone引擎集成csh handle; cs_insn* insn; size_t count; if(cs_open(CS_ARCH_X86, CS_MODE_64, handle) CS_ERR_OK) { count cs_disasm(handle, code, sizeof(code)-1, 0x1000, 0, insn); for(size_t i0; i
返回列表