标签: virtual-machine

Python虚拟机需要CPU来执行字节码吗?

Python虚拟机需要CPU来执行字节码吗?字节码是否转换为机器码,然后CPU参与该过程?

python cpu bytecode virtual-machine

5
推荐指数
1
解决办法
1315
查看次数

在KVM中拦截RDTSC指令

我正在尝试在虚拟环境中调试 rootkit。从逆向我知道它使用超级简单的CPU计时检查,看起来像这样(来源pafish):

static inline unsigned long long rdtsc_diff_vmexit() {
    unsigned long long ret, ret2;
    unsigned eax, edx;
    __asm__ volatile("rdtsc" : "=a" (eax), "=d" (edx));
    ret  = ((unsigned long long)eax) | (((unsigned long long)edx) << 32);
    /* vm exit forced here. it uses: eax = 0; cpuid; */
    __asm__ volatile("cpuid" : /* no output */ : "a"(0x00));
    /**/
    __asm__ volatile("rdtsc" : "=a" (eax), "=d" (edx));
    ret2  = ((unsigned long long)eax) | (((unsigned long long)edx) << 32);
    return ret2 - …
Run Code Online (Sandbox Code Playgroud)

c linux kvm virtual-machine linux-kernel

5
推荐指数
1
解决办法
4632
查看次数

ModuleNotFoundError:没有名为“mininet”的模块

我已经在我的计算机上安装了 mininet,现在我想用 mininet 运行 python 脚本。我应该怎样做呢?

如果我只使用python3 star.py,我会收到一个错误:

Traceback (most recent call last):
  File "star.py", line 2, in <module>
    from mininet.cli import CLI
ModuleNotFoundError: No module named 'mininet'
Run Code Online (Sandbox Code Playgroud)

如果我尝试sudo mn python3 star.py,那么我会得到

Usage: mn [options]
(type mn -h for details)

The mn utility creates Mininet network from the command line. It can create
parametrized topologies, invoke the Mininet CLI, and run tests.

Options:
  -h, --help            show this help message and exit
Run Code Online (Sandbox Code Playgroud)

如果我尝试sudo mn然后python …

python linux networking virtual-machine mininet

5
推荐指数
1
解决办法
1万
查看次数

Qemu 如何模拟 PCIe 设备?

我正在写一个关于 qemu 内部结构的开源文档,所以如果你帮助我,你就是在帮助 Qemu 项目的发展

我找到的最接近的答案是:在哪些条件下 ioctl KVM_RUN 返回?

这是在 KVM 上运行的单个 CPU 的线程循环:

static void *qemu_kvm_cpu_thread_fn(void *arg)
{
    CPUState *cpu = arg;
    int r;

    rcu_register_thread();

    qemu_mutex_lock_iothread();
    qemu_thread_get_self(cpu->thread);
    cpu->thread_id = qemu_get_thread_id();
    cpu->can_do_io = 1;
    current_cpu = cpu;

    r = kvm_init_vcpu(cpu);
    if (r < 0) {
        error_report("kvm_init_vcpu failed: %s", strerror(-r));
        exit(1);
    }

    kvm_init_cpu_signals(cpu);

    /* signal CPU creation */
    cpu->created = true;
    qemu_cond_signal(&qemu_cpu_cond);
    qemu_guest_random_seed_thread_part2(cpu->random_seed);

    do {
        if (cpu_can_run(cpu)) {
            r = kvm_cpu_exec(cpu);
            if (r == EXCP_DEBUG) {
                cpu_handle_guest_debug(cpu);
            }
        }
        qemu_wait_io_event(cpu); …
Run Code Online (Sandbox Code Playgroud)

c virtualization kvm qemu virtual-machine

5
推荐指数
1
解决办法
4089
查看次数

无法从 WSL2 Ubuntu 对 Ubuntu 虚拟机执行 Ping 操作

我正在尝试从 WSL2 Ubuntu ping 我的 Ubuntu 虚拟机。反之亦然,也会发生同样的 ping 问题。两个ubuntu版本都是20.04.1。但我可以从本地 Windows ping Ubuntu VM。

从 Windows 到 Ubuntu 虚拟机

WUVM

从 WSL2 Ubuntu 到 Ubuntu VM

WSLUVM

virtual-machine wsl-2 ubuntu-20.04

5
推荐指数
1
解决办法
3412
查看次数

在 GitHub Actions 上使用 Vagrant(最好包括 VirtualBox)

从这个答案中知道,可以使用 TravisCIlibvirt而不是 VirtualBox 在 TravisCI 上启动并运行 Vagrant Boxes。

GitHub Actions 也可以实现这一点吗?由于新的定价模型,我们将把所有内容从 TravisCI 上移走,因此我们还需要切换基于 Vagrant 的测试用例。

continuous-integration virtualbox virtual-machine vagrant github-actions

5
推荐指数
1
解决办法
3090
查看次数

如何检索 NodeJS VM 状态的字节码?JavaScript 智能合约实验 ** 更新 **

我正在尝试使用 NodeJS 和 VM 重现以太坊的智能合约流程。

我解决了一些问题,但也提出了一个新问题。

我的目标是在 NodeJS VM 实例执行后检索我加载并执行的字节码;

初始状态是我在虚拟机中作为字节码加载的智能合约代码。

我还进行了两个字节码调用。并被处决。

如何从该虚拟机实例中检索字节码中的新状态?

const vm = require('vm');
const v8 = require('v8');

v8.setFlagsFromString('--no-lazy');

if (Number.parseInt(process.versions.node.split('.')[0], 10) >= 12) {
    v8.setFlagsFromString('--no-flush-bytecode'); // Thanks to A-Parser (@a-parser)
  }
  
  /**
 * Generates v8 bytecode buffer.
 * could be the compile for smart contract to compile the bytecode
 * the bytecode will go on the blockchain so it can never change.
 * The input could be a file with all the JavaScript
 * @param   {string} …
Run Code Online (Sandbox Code Playgroud)

javascript virtual-machine node.js smartcontracts

5
推荐指数
0
解决办法
1180
查看次数

如何理解LXD与VM、Docker的区别?

当我使用 Travis-CI 时,我需要在 LXD 和完整 VM 之间进行选择: https: //docs.travis-ci.com/user/reference/overview/。虽然链接页面描述了它们在具体用法中的功能,但我想问一下LXD在概念上与所谓的完整VM有何不同,以及它们与Docker相比如何?我假设 CI 测试应该在预装了 Linux 或其他操作系统的服务器上运行,并且我们不需要在服务器端运行 LXD 或 VM。所以我对在服务器上运行的 LXD 或 VM 的基本概念感到非常困惑。有任何澄清吗?

continuous-integration virtual-machine travis-ci docker lxd

5
推荐指数
0
解决办法
1125
查看次数

我们如何将端口转发到端口上已运行服务器的 QEMU?

我有一个在端口运行的Python服务器28009

python3 -m http.server 28009
Run Code Online (Sandbox Code Playgroud)

现在,在运行服务器后,我调用 QEMU 来转发端口28009

qemu-system-aarch64 -nographic -machine virt,gic-version=max -m 512M -cpu max -smp 4 \
-netdev user,id=vnet,hostfwd=tcp::28009-:28009 -device virtio-net-pci,netdev=vnet \
-drive file=ubuntu-image.img,if=none,id=drive0,cache=writeback -device virtio-blk,drive=drive0,bootindex=0 \
-drive file=flash0.img,format=raw,if=pflash -drive file=flash1.img,format=raw,if=pflash 

Run Code Online (Sandbox Code Playgroud)

它会产生一个错误:

qemu-system-aarch64: Could not set up host forwarding rule 'tcp::28009-:28009'
Run Code Online (Sandbox Code Playgroud)

同样,如果我首先运行上面的 QEMU 脚本,它会正常启动。然而,Python 服务器现在抛出一个错误:

Traceback (most recent call last):
  File "/usr/lib/python3.6/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/usr/lib/python3.6/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/usr/lib/python3.6/http/server.py", line 1211, in <module>
    test(HandlerClass=handler_class, port=args.port, …
Run Code Online (Sandbox Code Playgroud)

qemu virtual-machine portforwarding

5
推荐指数
1
解决办法
1万
查看次数

为什么 Android 模拟器的嵌套虚拟化速度非常慢?

嵌套 KVM 虚拟化的开销应该很小,但 VM 内的 Android 模拟器应该可用。

当我在 ubuntu 20.04 guest 虚拟机(在 ubuntu 20.04 主机上)内启动 Android 模拟器时,它警告我,我处于嵌套虚拟化中,因此速度会很慢。但它的速度低得令人痛苦,而不仅仅是缓慢。启动进入 Android 需要 10 分钟,是的,所有系统都是 x86_64,甚至是 android 映像。

我认为这与 OpenGL 有关,所以我在我的 virt-manager 上启用了 OpenGL 虚拟化,但速度仍然很慢。

我在有 16 个核心的 Ryzen 7 2700x 上尝试了同样的操作,我将所有核心都给了虚拟机,并将 AMD GPU 传递给了它,Android 模拟器也慢得令人痛苦。

为什么?

virtualization android kvm virtual-machine

5
推荐指数
1
解决办法
1800
查看次数