在 Kali VM 内的 docker 容器中运行 valgrind 时遇到问题

问题描述 投票:0回答:1

我正在尝试测试一个 C 程序,该程序打印字符并将转义字符处理到 docker 中的标准输出。我在 kali Linux 虚拟机中运行 docker。这是我的 dockerfile:

FROM archlinux:latest

WORKDIR /Lab3

COPY . .

RUN pacman -Syu --noconfirm && pacman -S --noconfirm base-devel

RUN pacman -S --noconfirm valgrind

RUN chmod +x testscr.sh

CMD ["./testscr.sh"]

当我在 kali 中运行代码时,我最终得到了正常的结果。当我在 docker 中运行它时,valgrind 给了我这个错误:

valgrind:  Fatal error at startup: a function redirection
valgrind:  which is mandatory for this platform-tool combination
valgrind:  cannot be set up.  Details of the redirection are:
valgrind:  
valgrind:  A must-be-redirected function
valgrind:  whose name matches the pattern:      strlen
valgrind:  in an object with soname matching:   ld-linux-x86-64.so.2
valgrind:  was not found whilst processing
valgrind:  symbols from the object with soname: ld-linux-x86-64.so.2

整个项目只是为了试验/学习 docker,我已经知道代码可以工作并且没有内存泄漏。为什么 valgrind 失败?

我尝试重建并确保启用了嵌套虚拟化。没有 valgrind 的程序的输出符合预期。

c linux docker valgrind
1个回答
0
投票

您提到您正在 Kali Linux 系统上运行 Docker。您的

Dockerfile
使用的是 Arch Linux 基础映像,但您没有提到您特别需要此发行版。使用 Ubuntu 基础镜像尝试一下。

🗎

Dockerfile

FROM ubuntu:22.04

WORKDIR /Lab3

RUN apt-get update -qq && \
    apt-get install -y -qq g++ valgrind

# Copy files AFTER pacman install, otherwise cached install not used.
#
COPY . .

RUN chmod +x testscr.sh

CMD ["./testscr.sh"]

🗎

testscr.sh
(我不知道这是什么样子,请在这里猜猜...)

#!/bin/bash

g++ -g -o leaky leaky.cpp
valgrind --leak-check=full ./leaky

🗎

leaky.cpp
(一个存在内存泄漏的简单 C++ 文件。)

#include <iostream>
#include <cstdlib>

// This has a memory leak!

int main() {
    int *ptr = new int; // Allocate memory without deallocating it.
    *ptr = 10;
    std::cout << "Value: " << *ptr << std::endl;
    // delete ptr; // Uncomment this line to fix the memory leak
    return 0;
}

© www.soinside.com 2019 - 2024. All rights reserved.