RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-478514

RandomDice 779's questions

Martin Hope
RandomDice 779
Asked: 2024-03-31 01:44:53 +0000 UTC

QEMU 中没有网络

  • 6

我正在尝试使用 QEMU 中的虚拟机。我遇到了一个问题,网络在任何虚拟机中都无法工作。完全没有。决不。

首先我用 Alpine Linux 启动机器:

 ~/Virtual/alpine $ qemu-system-x86_64 -k en-gb -m 512M -smp cpus=2 -cdrom alpine.iso -drive if=virtio,file=rootfs.img -boot c

并注意到网络无法从 iso 运行。dhclient eth0手动堵塞 DNS 也/etc/resolv.conf无济于事。

我设置了参数-net user,但出现错误:

qemu-system-x86_64: -net user: network backend 'user' is not compiled into this binary

为了以防万一,我决定重建 QEMU(它最初是从源代码组装的,因为这是必要的)。以下是configure选项:

../configure \
--enable-lto \
--enable-modules \
--enable-module-upgrades \
--enable-strip \
--enable-tcg-interpreter \
--prefix=/usr \
--enable-alsa \
--enable-attr \
--enable-auth-pam \
--enable-avx2 \
--enable-avx512bw \
--enable-avx512f \
--enable-bochs \
--enable-bpf \
--enable-brlapi \
--enable-bzip2 \
--enable-cap-ng \
--enable-capstone \
--enable-cloop \
--enable-colo-proxy \
--enable-crypto-afalg \
--enable-curl \
--enable-curses \
--enable-dbus-display \
--enable-dmg \
--enable-docs \
--enable-fuse \
--enable-fuse-lseek \
--enable-gcrypt \
--enable-gettext \
--enable-gio \
--enable-glusterfs \
--enable-gnutls \
--enable-gtk \
--enable-gtk-clipboard \
--enable-guest-agent \
--enable-hv-balloon \
--enable-iconv \
--enable-jack \
--enable-keyring \
--enable-kvm \
--enable-l2tpv3 \
--enable-libdaxctl \
--enable-libdw \
--enable-libiscsi \
--enable-libkeyutils \
--enable-libnfs \
--enable-libssh \
--enable-libudev \
--enable-libusb \
--enable-libvduse \
--enable-linux-aio \
--enable-linux-io-uring \
--enable-live-block-migration \
--enable-lzo \
--enable-malloc-trim \
--enable-membarrier \
--enable-multiprocess \
--enable-numa \
--enable-opengl \
--enable-oss \
--enable-pa \
--enable-parallels \
--enable-pipewire \
--enable-pixman \
--enable-plugins \
--enable-png \
--enable-pvrdma \
--enable-qcow1 \
--enable-qed \
--enable-rdma \
--enable-replication \
--enable-sdl \
--enable-sdl-image \
--enable-seccomp \
--enable-selinux \
--enable-slirp \
--enable-slirp-smbd \
--enable-smartcard \
--enable-snappy \
--enable-sndio \
--enable-sparse \
--enable-spice \
--enable-spice-protocol \
--enable-stack-protector \
--enable-tcg \
--enable-tools \
--enable-tpm \
--enable-usb-redir \
--enable-vde \
--enable-vdi \
--enable-vduse-blk-export \
--enable-vhdx \
--enable-vhost-crypto \
--enable-vhost-kernel \
--enable-vhost-net \
--enable-vhost-user \
--enable-vhost-user-blk-server \
--enable-vhost-vdpa \
--enable-virglrenderer \
--enable-virtfs \
--enable-virtfs-proxy-helper \
--enable-vmdk \
--enable-vnc \
--enable-vnc-jpeg \
--enable-vnc-sasl \
--enable-vpc \
--enable-vte \
--enable-vvfat \
--enable-zstd \
--enable-system \
--enable-user \
--enable-linux-user \
--enable-pie \
--enable-xkbcommon \
--enable-rbd \
--extra-cflags='-march=native' \
--extra-cxxflags='-march=native' \
--extra-objcflags='-march=native'

没有帮助。我从源代码下载并构建 libslirp,然后用它重建 QEMU,但结果是相同的 - 网络无法工作。即使该选项也不起作用-net nic:

 ~/Virtual/Win10 $ qemu-system-x86_64 -accel kvm -k en-gb -smp cores=1 -m 1400M -drive if=virtio,file=disk_c.img -cpu qemu64 -M pc,vmport=off,usb=false,pic=off -drive if=virtio,file=disk_d.img -net nic,model=rtl8139

所以我该怎么做?到底是什么问题,slirp、qemu 还是其他什么问题?如何解决问题,或者至少在哪里找到问题的根源。也许缺少某些东西(反之亦然,有东西干扰)......

在主机上,网络工作没有问题。

сеть
  • 1 个回答
  • 29 Views
Martin Hope
RandomDice 779
Asked: 2023-09-23 07:06:45 +0000 UTC

为什么 Kali Linux 被认为是一个复杂的发行版?[关闭]

  • 4
关闭。这个问题无法给出客观的答案。目前不接受对此问题的答复。

想要改进这个问题吗? 重新组织问题,以便可以根据事实和引述来回答。

22 小时前关闭。

改进问题

一个问题。为什么 Kali Linux 被认为是一个困难的发行版?为什么会有这样的观点认为 Kali Linux 是一个复杂的发行版,只有经验丰富的用户才能使用它?是的,Kali 开发人员当然自己写了这个,但让我们看看真实情况

这是一种什么样的分布?Debian 测试的稍微稳定的版本,附加了渗透测试实用程序。其余的都是相同的 Debian。或者Ubuntu。喝了 Kali 的渗透测试 - 将会有一个 Ubuntu 级别的发行套件。稳定(相对),经常更新。使用 glibc(而不是 musl,某些软件使用 musl 会出现问题)。Kali Linux安装过程本身非常简单(这不是Arch的控制台安装)。至于用户软件 - 嗯,我个人从未遇到过任何问题。我在 Kali 上安装了游戏(更准确地说是 gnome 游戏集合),安装了编译器、多媒体软件,一切正常。也许这是一个“幸存者的错误”(如果是这样,那么这是现实的,请告诉我们相反的情况,否则我什至无法想象这样的情况,不仅在基于 Debian 的情况下,而且在一般的 glibc 发行版上) ?

事实上,初学者会遇到一些问题,这难道不是初学者在有条件的 Debian 或 Ubuntu 上会遇到的问题吗?例如,Kali 中的一个常见错误是GPG Error: NO PUBKEY key:apt update。难道这个问题在Debian、Ubuntu中就不会存在吗?顺便说一句,在这方面,“你需要渗透测试实用程序 - 将存储库拧入 Debian 或从源代码编译你需要的东西”的建议看起来特别愚蠢。请问,这不是比使用现成的解决方案更困难吗?我不是在谈论打破依赖关系。我在手机(Debian chroot)上做过一次,后悔了很长一段时间:在某个时候我想切换到 NixOS,那里没有依赖关系的混乱(是的,当时我对Linux 世界)(没错,我还在那里安装了 Debian Unstable 存储库,以便使用更新的软件,mmm)。

这样就不会有针对我的毫无根据的指控。当我还是个新手时,我坚持这个观点,“我已经看到了足够多的过度缓冲区,并且还推出了带有metasploit的termux”,而现在,当我在没有Archwiki的情况下安装Arch Linux时,只需要5分钟,当我平静地用C和Python编写、学习Lua时,我平静地使用BSD系统并编译LFS。

我真的不明白,从我还是个初学者的时候起,在我看来,人们对 Kali Linux 及其用户(甚至是那些熟悉 Linux 系统并且能够处理得特别好的经验丰富的人)的偏见态度......

kali-linux
  • 1 个回答
  • 50 Views
Martin Hope
RandomDice 779
Asked: 2023-08-17 21:32:07 +0000 UTC

如何强制系统使用多个passwd文件?

  • 5

看看发生了什么。我收集 Linux From Scratch,但很特别。我想在基本系统和系统的其余部分之间进行硬分离。也就是说,应该有两个部分:只读的根,第二个 - 已经读/写。但问题是我想使用多个 passwd 和 groups 文件。原因很简单:程序需要在系统无法挂载rw分区的情况下仍然了解root用户(而不是发出“我没有名字!”等废话)。一般来说,除了 root 之外,我还想首先将一些系统用户和组写入系统。也就是说,你需要强制系统为第三方用户和组使用该文件/usr/local/etc/passwd(是的,RW分区将被挂载在),并且/usr/local/etc/passwd对于系统。是否有可能 - 无需深入研究 glibc、musl、bionic 源 - 强制系统根据某些规则查找身份验证文件(并写入它们)?如果是这样,这些规则应该如何描述?

linux
  • 1 个回答
  • 26 Views
Martin Hope
RandomDice 779
Asked: 2023-07-01 13:15:28 +0000 UTC

如何在QEMU中将Linux内核日志输出到UART?

  • 5

我这样启动linux内核:

 ~ $ qemu-system-i386 -k en-gb -m 8G -smp cpus=6 -kernel ./bzImage-5.10-184 -initrd ./initrd -accel kvm -append 'boot_delay=100'

如果没有boot_delay参数,我的启动会在 1.6 秒后停止(我使用该参数本身以某种方式看不到内核日志)。但事实是,在某个时刻,内核破坏了帧缓冲区,因此 dmesg 的一个重要部分消失了 - 弹出“Call Trace:”的部分,这是有关驱动程序中错误的信息。我只看到了其中的一小部分,最后。这段代码表明错误出在 AMD 的某些驱动程序中,但具体是哪一个 - 我不知道。所以,我看到这样的事情:

[   3.257577]  ? init_amd+097b/0xa10
[   3.257577]  ? report_bug+0x94/0xd0
...
[   3.257577] ---[ end trace 15543f21cc7c6b0c ] ---
[ 113.810033] kvm-guest: steal time: CPU 1, msr 34a84c40

但我想查看调用跟踪的开头,以便知道问题出在哪个特定驱动程序中,通常是这样写的:

Error at drivers/rtl8192eu/rtl8192eu.c:

问题:如何使用 QEMU 模拟 UART 并将整个内核日志准确地输出到“前额”,而不是输出到损坏的帧缓冲区中?嗯,是的,5.10.184 内核不支持 pstore_blk,并且在 5.15 内核上它对我不起作用,即使它包含在该内核中......

linux
  • 1 个回答
  • 19 Views
Martin Hope
RandomDice 779
Asked: 2023-03-18 14:14:34 +0000 UTC

如何在 Rust 中签署文件?

  • 5

您需要使用 Rust 对文件进行签名。我正在尝试这样做:

extern crate openssl;

use std::env;
use std::string::String;
use std::fs::File;
use std::path::Path;                                                                             use openssl::pkey::PKey;
use openssl::sign::Signer;                                                                       use openssl::hash::MessageDigest;
use std::io::Write;
use std::io::Read;

fn sign(file: String, key: String, sigfile: String) {
    if Path::new(&file).exists() {
        if Path::new(&key).exists() {
            let kd = File::open(key).expect("File not found!");
            let mut strdata = String::new();
            kd.read_to_string(&mut strdata).expect("Error reading of file!");
            let data: &[u8] = strdata.as_bytes();
            let pkd = File::open(key).expect("Private key not found!");
            let mut pkdata = String::new();
            pkd.read_to_string(&mut pkdata).expect("Error reading of private key!");
            let pkb: Vec<u8> = pkdata.as_bytes().to_vec();
            let privk = PKey::private_key_from_pem(&pkb);

            let mut signer = Signer::new(MessageDigest::sha512(), &privk).unwrap();
            signer.update(data).unwrap();

            let signature = signer.sign_to_vec().unwrap();
            let sigdump = signature.as_slice();
            let fd = match File::create(sigfile) {
                    Err(why) => panic!("Cant open signature file {}: {}", sigfile, why),
                    Ok(fd) => fd
            };
            fd.write_all(&sigdump);
        } else {
            eprintln!("Keyfile {} is not found!", key);
            panic!();
        }
    } else {
        eprintln!("File {} is not found!", file);
        panic!();
    }
}

fn main() {
    let args: Vec<String> = env::args().collect();
    if args.len() == 4 {
        sign(args[1].clone(), args[2].clone(), args[3].clone());
    } else {
        println!("Usage: signfile (file) (private.key) (out.sig)");
    }
}

build的时候报错:

 ~/signfile $ cargo build
error[E0308]: mismatched types
   --> src/main.rs:26:61
    |
26  |             let mut signer = Signer::new(MessageDigest::sha512(), &privk).unwrap();
    |                              -----------                          ^^^^^^ expected `&PKeyRef<_>`, found `&Result<PKey<...>, ...>`
    |                              |
    |                              arguments to this function are incorrect
    |
    = note: expected reference `&PKeyRef<_>`
               found reference `&Result<PKey<Private>, ErrorStack>`
note: associated function defined here
   --> /root/.cargo/registry/src/github.com-1ecc6299db9ec823/openssl-0.10.46/src/sign.rs:142:12
    |
142 |     pub fn new<T>(type_: MessageDigest, pkey: &'a PKeyRef<T>) -> Result<Signer<'a>, Erro...
    |            ^^^

For more information about this error, try `rustc --explain E0308`.

Vo1,我对 Rust 仍然知之甚少,v2,在我在 Internet 上找到的所有示例中,密钥都是在一个可执行文件中生成的,并且文件会立即使用它们进行签名。但问题是我从文件中获取了(私钥)密钥,但我不知道如何将Result<PKey<...>>其转换为...PKeyRef<...>

rust
  • 1 个回答
  • 19 Views
Martin Hope
RandomDice 779
Asked: 2023-03-05 19:25:45 +0000 UTC

在哪里可以找到实体和运算符(命名空间、新建/删除、<< / >>)的 C++ 实现的源代码?

  • 5

C++ 中有一些 C 没有的东西——名称空间、几个独特的运算符(<<、>>、新建/删除)。我想知道:它们是如何以及在何处“在引擎盖下”实现的,因为 C++ 只是一个略微完成的 C(包括处理功能)。好吧,我认为:是的,可能命名空间、这些运算符等在 stdc++ 中有描述。但我在那里只找到了新的运算符(它的实现)。命名空间是如何实现的?我对源代码不感兴趣namespace std,但对命名空间本身的实现感兴趣。

c++
  • 1 个回答
  • 38 Views
Martin Hope
RandomDice 779
Asked: 2022-08-30 19:26:46 +0000 UTC

如何防止 GRUB 选项被动态编辑?

  • 0

有一个想法是通过设置密码完全禁用命令行选项(或至少是编辑菜单)来删除在 GRUB 中编辑 cmdline 的能力。我看到了这样的选项(添加到 00_header 的内容):

set superusers="root"
password_pbkdf2 root grub.pbkdf2.sha512.password
export superusers

像这样:

set superusers="root"
password root rootpassword
export superusers

两者都不起作用:

root@linuxlite6:/ # update-grub
/etc/grub.d/00_header: 451: password: command not found
root@linuxlite6:/ # update-grub
/etc/grub.d/00_header: 451: password_pbkdf2: command not found

是的,不要谈论 GRUB_TIMEOUT="0" 和 GRUB_HIDDEN=true。他们只是删除了选择菜单,但这不是我需要的。我只需要禁用/限制对 GRUB 命令行的访问(包括编辑引导选项)

linux
  • 1 个回答
  • 20 Views
Martin Hope
RandomDice 779
Asked: 2022-08-26 00:59:39 +0000 UTC

如何在安装过程中加密 /boot 分区?

  • 0

我安装了 Ubuntu 22.04,Legacy/MBR Boot(这很重要)。我想加密系统分区(甚至 /boot!)。如果您完全创建一个单独的 /boot 分区,那么它也必须是加密的,或者在只读文件系统中 - 即 squashfs、EROFS 或带有 EXT4_DEDUP_BLOCK 的 ext (2/3/4)(谁知道超级最新的 Android 中的分区——啊,他会明白我的意思)。网上的指南很少,尤其是 Ubuntu,更糟糕的是,/boot 那里没有加密,从纯粹的安全角度来看,这是非常糟糕的。我将 rootkit 放在那里并更改了 grub.cfg 中的选项 - 系统被破坏了。我使用加密作为安全启动的替代方案,它仅在 UEFI 中可用(根据 Habr 关于 UEFI 的文章,甚至由于 Microsoft 的密钥而存在问题)。

linux
  • 1 个回答
  • 54 Views
Martin Hope
RandomDice 779
Asked: 2022-08-13 05:01:17 +0000 UTC

如何从控制台拍照?

  • 2

其实,这是个问题。如何从安卓相机拍照?

即使是在 Linux 下,我也只发现了一个带有 ffmpeg 的命令:

 ~ # ffmpeg -f video4linux2 -r 1 -i /dev/video0 -f image2 image.png -t 1

但就我而言,即使在 Kali Nethunter 下也无法正常工作。原则上我不想要 Java,我正在编写一个控制台 Linux 二进制文件。

我找到了 /system/lib/android.hardware.camera.common.so 库和更多类似名称的库。但我不清楚如何正确链接到它们,如何在代码中使用它们。

如何在 Android 中使用 Linux 二进制文件从控制台拍照?

linux android
  • 1 个回答
  • 143 Views
Martin Hope
RandomDice 779
Asked: 2022-08-05 21:02:58 +0000 UTC

文件管理器无权访问 /sdcard!

  • 0

我的文件管理器无法访问 /sdcard,即使它有权这样做。当我需要从第三方应用程序中选择文件时(例如,选择将文件保存在 MacroDroid 中的路径),就会出现此问题。文件管理器是“库存”,原始的,在固件中。这是我将其作为独立应用程序打开时的管理器屏幕截图: 在此处输入图像描述

在浏览器和社交网络的情况下,它们不会向整个 /sdcard 发出请求,而是向“最近”发出请求,所以我能够在此处附上这张照片。

我尝试重新安装文件管理器,闪烁/系统 - 无济于事。

我附上了logcat:https ://pastebin.com/74Jtv06B (它只插入一行,因此我把它扔进pastebin,至少可以读取)(我删除了MiXplorer,但问题仍然存在)

UPD:我决定通过 Termux 来“调查”这个问题。发现这个:

# Обратите внимание, что я
# использую строго Termux user,
# в т ч без использования global
# mount namespace

termux@termux: ~ $ mount | grep "/data/media" | column -t | grep "rw,nosuid,nodev,noexec,noatime,fsuid=1023,fsgid=1023,gid=1015,multiuser,mask=6,derive_gid,default_normal,unshared_obb"
/data/media  on  /mnt/runtime/default/emulated           type  sdcardfs  (rw,nosuid,nodev,noexec,noatime,fsuid=1023,fsgid=1023,gid=1015,multiuser,mask=6,derive_gid,default_normal,unshared_obb)
/data/media  on  /data/local/nhsystem/kali-arm64/sdcard  type  sdcardfs  (rw,nosuid,nodev,noexec,noatime,fsuid=1023,fsgid=1023,gid=1015,multiuser,mask=6,derive_gid,default_normal,unshared_obb)
/data/media  on  /storage/emulated                       type  sdcardfs  (rw,nosuid,nodev,noexec,noatime,fsuid=1023,fsgid=1023,gid=1015,multiuser,mask=6,derive_gid,default_normal,unshared_obb)
termux@termux: ~ $ ls /sdcard -l
/sdcard -> /storage/self/primary
termux@termux: ~ $ ls /storage/self/primary -l
/storage/self/primary -> /storage/emulated/0
termux@termux: ~ $ ls /storage/emulated/0
...
termux@termux: ~ $ ls /data/local/nhsystem/kali-arm64/sdcard
...
termux@termux: ~ $ ls /mnt/runtime/default/emulated/0
ls: Permission denied

据我了解,在默认路径上,我无法访问 sdcard,但为什么?SELinux 允许的。

我查看了文件夹的权限——是的,一切似乎都很好:

termux@termux: ~ $ /sbin/su
root@android: ~ # ls /storage/emulated -l
drwxrwx--x 35 root sdcard_rw 4096 2022-08-10 15:48 0
root@android: ~ # ls /data/local/nhsystem/kali-arm64 -l
...
drwxrwx--x  35 root    sdcard_rw  4096 2022-08-10 15:48 sdcard
...
root@android: ~ # ls /mnt/runtime/default/emulated -l
drwxrwx--x 35 root sdcard_rw 4096 2022-08-10 15:48 0
root@android: ~ # getenforce
Permissive

UPD2:Android 10、Lineage OS 17.1

UPD3:我通过 APK 编辑器重建了默认管理器的 apk(因为仍然通过它进行内存请求)。我将这些行添加到 Manifest.xml(它们最初不存在,我pm grant写道那里没有提供此类权限):

    <uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE" />
    <uses-permission android:name="android.permission.STORAGE_INTERNAL" />

设置中没有出现任何内容,但现在pm grant它给出了无法更改此分辨率的错误:

root@android: ~ # pm grant com.android.documentsui android.permission.WRITE_MEDIA_STORAGE
Security exception: Permission android.permission.WRITE_MEDIA_STORAGE requested by com.android.documentsui is not a changeable permission type

java.lang.SecurityException: Permission android.permission.WRITE_MEDIA_STORAGE requested by com.android.documentsui is not a changeable permission type
    at com.android.server.pm.permission.BasePermission.enforceDeclaredUsedAndRuntimeOrDevelopment(BasePermission.java:448)
    at com.android.server.pm.permission.PermissionManagerService.grantRuntimePermission(PermissionManagerService.java:2181)
    at com.android.server.pm.permission.PermissionManagerService.access$1000(PermissionManagerService.java:122)
    at com.android.server.pm.permission.PermissionManagerService$PermissionManagerServiceInternalImpl.grantRuntimePermission(PermissionManagerService.java:3167)
    at com.android.server.pm.PackageManagerService.grantRuntimePermission(PackageManagerService.java:5846)
    at com.android.server.pm.PackageManagerShellCommand.runGrantRevokePermission(PackageManagerShellCommand.java:1955)
    at com.android.server.pm.PackageManagerShellCommand.onCommand(PackageManagerShellCommand.java:230)
    at android.os.ShellCommand.exec(ShellCommand.java:104)
    at com.android.server.pm.PackageManagerService.onShellCommand(PackageManagerService.java:22020)
    at android.os.Binder.shellCommand(Binder.java:881)
    at android.os.Binder.onTransact(Binder.java:765)
    at android.content.pm.IPackageManager$Stub.onTransact(IPackageManager.java:4876)
    at com.android.server.pm.PackageManagerService.onTransact(PackageManagerService.java:4110)
    at android.os.Binder.execTransactInternal(Binder.java:1021)
    at android.os.Binder.execTransact(Binder.java:994)

我尝试重新安装 - 无济于事

root@android: / # mount -o remount /mnt/runtime/default/emulated
Error: /mnt/runtime/default/emulated not in /proc/mounts

restorecon不起作用:

root@android: /mnt/runtime/default # restorecon -F -R default
SELinux: Loaded file_contexts
SELinux: Could not set context for /mnt/runtime/default/emulated:  Operation not supported on transport endpoint
restorecon: restorecon failed: default

UPD:logcat 中的错误:“默认根 URI 不是有效的根 URI”。问题:如何设置您的默认根 URI

UPD:我的默认文件管理器根本没有权限,但系统将其添加到 sdcard_rw 组,正如它所说/data/system/packages.list

root@termux: ~ # cat /data/system/packages.list | grep com.android.documentsui
com.android.documentsui 10074 0 /data/user/0/com.android.documentsui platform:privapp:targetSdkVersion=28 1028,1015,1023 0 29
android память
  • 1 个回答
  • 129 Views
Martin Hope
RandomDice 779
Asked: 2022-07-28 12:41:42 +0000 UTC

如何更改 QEMU 屏幕分辨率?[关闭]

  • 0
关闭 这个问题是题外话。目前不接受回复。

该问题是由不再复制的问题或错字引起的。虽然类似的问题可能与本网站相关,但该问题的解决方案不太可能帮助未来的访问者。通常可以通过在发布问题之前编写和研究一个最小程序来重现问题来避免此类问题。

1 个月前关闭。

改进问题

我想改变 QEMU 的屏幕分辨率。一切都会好的,但是我不能从正在运行的系统配置它(至少我不知道怎么做),我从主机上取内核和ramdisk,即我没有GRUB。我只能通过 QEMU 配置屏幕。如何更改分辨率?是的,我可以Ctrl+Alt+F,但是控制台中的字母太大了...

QEMU 选项:

 ~/linux # qemu-system-x86_64 -m 1G -k en -kernel linux-5.15.56/arch/x86_64/boot/bzImage -smp cpus=2 -initrd initrd.gz -drive if=virtio,file=ext4.img -vga virtio
linux экран
  • 1 个回答
  • 30 Views
Martin Hope
RandomDice 779
Asked: 2022-07-27 00:53:16 +0000 UTC

为什么内核检测不到磁盘?

  • 1

编译 Linux 5.15 内核。我在 QEMU 中运行它,我传输原始 img 图像:

qemu-system-x86_64 -m 1G -k en -kernel linux-5.15.56/arch/x86_64/boot/bzImage -smp cpus=2 -initrd initrd.gz -hda ext4.img

磁盘没有在内核中定义,虽然 SATA、PCI 和 SCSI 似乎在内核中。

(initramfs) # insmod /modules/drivers/scsi/scsi_debug.ko
(initramfs) # ls /dev/sd*
sda
(initramfs) # /sbin/fdisk -l /dev/sda
Disk: /dev/sda: 8M, 8388608 bytes, 16384 sectors
1024 cylinders, 1 heads, 16 sectors/track
Units: sectors of 1 * 512 = 512 bytes

Disk /dev/sda doesn`t contain a valid partition table

尽管即使在主机中,所有内容都已正确定义和安装:

root@kali: ~ # fdisk -l ext4.img
Disk ext4.img: 512 MiB, 536870912 bytes, 1048576 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xc621c9d0

Device     Boot Start     End Sectors  Size Id Type
ext4.img1        2048 1048575 1046528  511M 83 Linux

我在我的主题上搜索的唯一一件事(它帮助我解决了这个问题只是因为根本没有检测到磁盘(是的,当它/dev/sda甚至不可见时))在这里:https ://superuser.com/ questions/269742/ drive-not-recognized-by-linux-when-launched-from-qemu我个人发现的所有问题都是由于 BIOS / 分区表曲线而导致磁盘看不到的问题 / 我们正在谈论新设备 /磁盘分区(NVMe、RAID 阵列),我们谈论的是已经配置好的操作系统。然后从字面上看,在谷歌的第一页上,无关紧要的话题就...(我为这么详细的介绍道歉,只是在我最后一个问题之后,当我被建议去谷歌时,我被烧毁了,在找到我的问题的答案(它在 Orange Pi Lite 上)之后,我去谷歌并没有找到一个接近我的问题的答案。因此,我也会抛出我谷歌的链接甚至截图,这样就没有聪明的人发送给谷歌/文档)。

在此处输入图像描述

我正在附加内核配置:

root@kali: ~ # cat config | grep -e SATA -e PCI -e SCSI
CONFIG_ACPI_PCI_SLOT=y
CONFIG_ACPI_APEI_PCIEAER=y
# Bus options (PCI etc.)
CONFIG_PCI_DIRECT=y
CONFIG_PCI_MMCONFIG=y
CONFIG_PCI_XEN=y
# CONFIG_PCI_CNB20LE_QUIRK is not set
# end of Bus options (PCI etc.)
CONFIG_BLK_MQ_PCI=y
# CONFIG_CAN_KVASER_PCIEFD is not set
CONFIG_CAN_PEAK_PCIEFD=m
CONFIG_CAN_EMS_PCI=m
CONFIG_CAN_KVASER_PCI=m
CONFIG_CAN_PEAK_PCI=m
CONFIG_CAN_PEAK_PCIEC=y
CONFIG_CAN_PLX_PCI=m
CONFIG_HAVE_PCI=y
CONFIG_PCI=y
CONFIG_PCI_DOMAINS=y
CONFIG_PCIEPORTBUS=y
CONFIG_HOTPLUG_PCI_PCIE=y
CONFIG_PCIEAER=y
CONFIG_PCIEAER_INJECT=m
# CONFIG_PCIE_ECRC is not set
CONFIG_PCIEASPM=y
CONFIG_PCIEASPM_DEFAULT=y
# CONFIG_PCIEASPM_POWERSAVE is not set
# CONFIG_PCIEASPM_POWER_SUPERSAVE is not set
# CONFIG_PCIEASPM_PERFORMANCE is not set
CONFIG_PCIE_PME=y
CONFIG_PCIE_DPC=y
CONFIG_PCIE_PTM=y
# CONFIG_PCIE_EDR is not set
CONFIG_PCI_MSI=y
CONFIG_PCI_MSI_IRQ_DOMAIN=y
CONFIG_PCI_QUIRKS=y
CONFIG_PCI_DEBUG=y
CONFIG_PCI_REALLOC_ENABLE_AUTO=y
CONFIG_PCI_STUB=y
CONFIG_PCI_PF_STUB=y
CONFIG_XEN_PCIDEV_FRONTEND=y
CONFIG_PCI_ATS=y
CONFIG_PCI_LOCKLESS_CONFIG=y
CONFIG_PCI_IOV=y
CONFIG_PCI_PRI=y
CONFIG_PCI_PASID=y
# CONFIG_PCI_P2PDMA is not set
CONFIG_PCI_LABEL=y
# CONFIG_PCI_HYPERV is not set
# CONFIG_PCIE_BUS_TUNE_OFF is not set
CONFIG_PCIE_BUS_DEFAULT=y
# CONFIG_PCIE_BUS_SAFE is not set
# CONFIG_PCIE_BUS_PERFORMANCE is not set
# CONFIG_PCIE_BUS_PEER2PEER is not set
CONFIG_HOTPLUG_PCI=y
CONFIG_HOTPLUG_PCI_ACPI=y
CONFIG_HOTPLUG_PCI_ACPI_IBM=m
CONFIG_HOTPLUG_PCI_CPCI=y
CONFIG_HOTPLUG_PCI_CPCI_ZT5550=m
CONFIG_HOTPLUG_PCI_CPCI_GENERIC=m
CONFIG_HOTPLUG_PCI_SHPC=y
# PCI controller drivers
CONFIG_PCI_HYPERV_INTERFACE=m
# DesignWare PCI Core Support
# CONFIG_PCIE_DW_PLAT_HOST is not set
# CONFIG_PCI_MESON is not set
# end of DesignWare PCI Core Support
# Mobiveil PCIe Core Support
# end of Mobiveil PCIe Core Support
# Cadence PCIe controllers support
# end of Cadence PCIe controllers support
# end of PCI controller drivers
# PCI Endpoint
# CONFIG_PCI_ENDPOINT is not set
# end of PCI Endpoint
# PCI switch controller drivers
# CONFIG_PCI_SW_SWITCHTEC is not set
# end of PCI switch controller drivers
CONFIG_MHI_BUS_PCI_GENERIC=m
CONFIG_ISCSI_IBFT_FIND=y
CONFIG_ISCSI_IBFT=m
# CONFIG_EFI_DISABLE_PCI_DMA is not set
CONFIG_MTD_PCI=m
# CONFIG_MTD_NAND_DENALI_PCI is not set
# CONFIG_SPI_INTEL_SPI_PCI is not set
CONFIG_BLK_DEV_PCIESSD_MTIP32XX=m
# CONFIG_DW_XDATA_PCIE is not set
# CONFIG_PCI_ENDPOINT_TEST is not set
# CONFIG_MISC_ALCOR_PCI is not set
CONFIG_MISC_RTSX_PCI=m
CONFIG_PVPANIC_PCI=m
# SCSI device support
CONFIG_SCSI_MOD=y
CONFIG_SCSI_COMMON=y
CONFIG_SCSI=y
CONFIG_SCSI_DMA=y
CONFIG_SCSI_NETLINK=y
# CONFIG_SCSI_PROC_FS is not set
# SCSI support type (disk, tape, CD-ROM)
# CONFIG_SCSI_ENCLOSURE is not set
CONFIG_SCSI_CONSTANTS=y
CONFIG_SCSI_LOGGING=y
CONFIG_SCSI_SCAN_ASYNC=y
# SCSI Transports
CONFIG_SCSI_SPI_ATTRS=m
CONFIG_SCSI_FC_ATTRS=m
CONFIG_SCSI_ISCSI_ATTRS=m
CONFIG_SCSI_SAS_ATTRS=m
CONFIG_SCSI_SAS_LIBSAS=m
CONFIG_SCSI_SAS_ATA=y
CONFIG_SCSI_SAS_HOST_SMP=y
CONFIG_SCSI_SRP_ATTRS=m
# end of SCSI Transports
CONFIG_SCSI_LOWLEVEL=y
CONFIG_ISCSI_TCP=m
CONFIG_ISCSI_BOOT_SYSFS=m
CONFIG_SCSI_CXGB3_ISCSI=m
CONFIG_SCSI_CXGB4_ISCSI=m
CONFIG_SCSI_BNX2_ISCSI=m
CONFIG_SCSI_BNX2X_FCOE=m
CONFIG_BE2ISCSI=m
CONFIG_SCSI_HPSA=m
CONFIG_SCSI_3W_9XXX=m
CONFIG_SCSI_3W_SAS=m
CONFIG_SCSI_ACARD=m
CONFIG_SCSI_AACRAID=m
CONFIG_SCSI_AIC7XXX=m
CONFIG_SCSI_AIC79XX=m
CONFIG_SCSI_AIC94XX=m
CONFIG_SCSI_MVSAS=m
# CONFIG_SCSI_MVSAS_DEBUG is not set
# CONFIG_SCSI_MVSAS_TASKLET is not set
CONFIG_SCSI_MVUMI=m
CONFIG_SCSI_DPT_I2O=m
CONFIG_SCSI_ADVANSYS=m
CONFIG_SCSI_ARCMSR=m
CONFIG_SCSI_ESAS2R=m
CONFIG_SCSI_MPT3SAS=m
CONFIG_SCSI_MPT2SAS_MAX_SGE=128
CONFIG_SCSI_MPT3SAS_MAX_SGE=128
CONFIG_SCSI_MPT2SAS=m
# CONFIG_SCSI_MPI3MR is not set
CONFIG_SCSI_SMARTPQI=m
CONFIG_SCSI_UFSHCD=m
CONFIG_SCSI_UFSHCD_PCI=m
# CONFIG_SCSI_UFS_DWC_TC_PCI is not set
# CONFIG_SCSI_UFSHCD_PLATFORM is not set
# CONFIG_SCSI_UFS_BSG is not set
# CONFIG_SCSI_UFS_HPB is not set
CONFIG_SCSI_HPTIOP=m
CONFIG_SCSI_BUSLOGIC=m
# CONFIG_SCSI_FLASHPOINT is not set
CONFIG_SCSI_MYRB=m
CONFIG_SCSI_MYRS=m
CONFIG_VMWARE_PVSCSI=m
CONFIG_XEN_SCSI_FRONTEND=m
CONFIG_SCSI_SNIC=m
# CONFIG_SCSI_SNIC_DEBUG_FS is not set
CONFIG_SCSI_DMX3191D=m
# CONFIG_SCSI_FDOMAIN_PCI is not set
CONFIG_SCSI_ISCI=m
CONFIG_SCSI_IPS=m
CONFIG_SCSI_INITIO=m
CONFIG_SCSI_INIA100=m
# CONFIG_SCSI_PPA is not set
# CONFIG_SCSI_IMM is not set
CONFIG_SCSI_STEX=m
CONFIG_SCSI_SYM53C8XX_2=m
CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
CONFIG_SCSI_SYM53C8XX_MMIO=y
CONFIG_SCSI_IPR=m
# CONFIG_SCSI_IPR_TRACE is not set
# CONFIG_SCSI_IPR_DUMP is not set
CONFIG_SCSI_QLOGIC_1280=m
CONFIG_SCSI_QLA_FC=m
CONFIG_SCSI_QLA_ISCSI=m
CONFIG_SCSI_LPFC=m
# CONFIG_SCSI_LPFC_DEBUG_FS is not set
# CONFIG_SCSI_EFCT is not set
CONFIG_SCSI_DC395x=m
CONFIG_SCSI_AM53C974=m
CONFIG_SCSI_WD719X=m
CONFIG_SCSI_DEBUG=m
CONFIG_SCSI_PMCRAID=m
CONFIG_SCSI_PM8001=m
CONFIG_SCSI_BFA_FC=m
CONFIG_SCSI_VIRTIO=m
CONFIG_SCSI_CHELSIO_FCOE=m
CONFIG_SCSI_LOWLEVEL_PCMCIA=y
CONFIG_SCSI_DH=y
CONFIG_SCSI_DH_RDAC=m
CONFIG_SCSI_DH_HP_SW=m
CONFIG_SCSI_DH_EMC=m
CONFIG_SCSI_DH_ALUA=m
# end of SCSI device support
CONFIG_SATA_HOST=y
CONFIG_SATA_ZPODD=y
CONFIG_SATA_PMP=y
CONFIG_SATA_AHCI=m
CONFIG_SATA_MOBILE_LPM_POLICY=3
# CONFIG_SATA_AHCI_PLATFORM is not set
# CONFIG_SATA_INIC162X is not set
CONFIG_SATA_ACARD_AHCI=m
CONFIG_SATA_SIL24=m
CONFIG_SATA_QSTOR=m
CONFIG_SATA_SX4=m
# SATA SFF controllers with BMDMA
# CONFIG_SATA_DWC is not set
CONFIG_SATA_MV=m
CONFIG_SATA_NV=m
CONFIG_SATA_PROMISE=m
CONFIG_SATA_SIL=m
CONFIG_SATA_SIS=m
CONFIG_SATA_SVW=m
CONFIG_SATA_ULI=m
CONFIG_SATA_VIA=m
CONFIG_SATA_VITESSE=m
# CONFIG_PATA_CMD640_PCI is not set
CONFIG_TCM_PSCSI=m
CONFIG_ISCSI_TARGET=m
CONFIG_ISCSI_TARGET_CXGB4=m
CONFIG_ARCNET_COM20020_PCI=m
CONFIG_B44_PCI_AUTOSELECT=y
CONFIG_B44_PCICORE_AUTOSELECT=y
CONFIG_B44_PCI=y
CONFIG_KSZ884X_PCI=m
CONFIG_NE2K_PCI=m
CONFIG_QED_ISCSI=y
# CONFIG_STMMAC_PCI is not set
CONFIG_ATH5K_PCI=y
CONFIG_ATH9K_PCI=y
# CONFIG_ATH9K_PCI_NO_EEPROM is not set
CONFIG_ATH10K_PCI=m
CONFIG_ATH11K_PCI=m
CONFIG_PCI_ATMEL=m
CONFIG_B43_PCI_AUTOSELECT=y
CONFIG_B43_PCICORE_AUTOSELECT=y
CONFIG_B43LEGACY_PCI_AUTOSELECT=y
CONFIG_B43LEGACY_PCICORE_AUTOSELECT=y
CONFIG_BRCMFMAC_PCIE=y
CONFIG_HOSTAP_PCI=m
CONFIG_P54_PCI=m
CONFIG_MWIFIEX_PCIE=m
CONFIG_RT2400PCI=m
CONFIG_RT2500PCI=m
CONFIG_RT61PCI=m
CONFIG_RT2800PCI=m
CONFIG_RT2800PCI_RT33XX=y
CONFIG_RT2800PCI_RT35XX=y
CONFIG_RT2800PCI_RT53XX=y
CONFIG_RT2800PCI_RT3290=y
CONFIG_RT2X00_LIB_PCI=m
CONFIG_RTLWIFI_PCI=m
CONFIG_RTW88_PCI=m
# CONFIG_QTNFMAC_PCIE is not set
CONFIG_PCI200SYN=m
CONFIG_MISDN_HFCPCI=m
CONFIG_SERIO_PCIPS2=m
CONFIG_SERIAL_8250_PCI=y
CONFIG_I2C_DESIGNWARE_PCI=m
CONFIG_SPI_PXA2XX_PCI=m
# PCI GPIO expanders
CONFIG_GPIO_PCI_IDIO_16=m
CONFIG_GPIO_PCIE_IDIO_24=m
# end of PCI GPIO expanders
# PCI-based Watchdog Cards
CONFIG_PCIPCWATCHDOG=m
CONFIG_WDTPCI=m
CONFIG_SSB_PCIHOST_POSSIBLE=y
CONFIG_SSB_PCIHOST=y
CONFIG_SSB_B43_PCI_BRIDGE=y
CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y
CONFIG_SSB_DRIVER_PCICORE=y
CONFIG_BCMA_HOST_PCI_POSSIBLE=y
CONFIG_BCMA_HOST_PCI=y
CONFIG_BCMA_DRIVER_PCI=y
CONFIG_MFD_INTEL_LPSS_PCI=m
CONFIG_MEDIA_PCI_SUPPORT=y
# Media digital TV PCI Adapters
CONFIG_DVB_B2C2_FLEXCOP_PCI=m
# CONFIG_DVB_B2C2_FLEXCOP_PCI_DEBUG is not set
CONFIG_DVB_SMIPCIE=m
CONFIG_TTPCI_EEPROM=m
CONFIG_FB_MB862XX_PCI_GDC=y
CONFIG_SND_PCI=y
CONFIG_SND_CMIPCI=m
CONFIG_SND_YMFPCI=m
# CONFIG_SND_SST_ATOM_HIFI2_PLATFORM_PCI is not set
CONFIG_SND_SOC_SOF_PCI_DEV=m
CONFIG_SND_SOC_SOF_PCI=m
CONFIG_USB_PCI=y
CONFIG_USB_XHCI_PCI=m
# CONFIG_USB_XHCI_PCI_RENESAS is not set
CONFIG_USB_EHCI_PCI=m
CONFIG_USB_OHCI_HCD_PCI=m
# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
# CONFIG_TYPEC_TCPCI is not set
CONFIG_MMC_SDHCI_PCI=m
CONFIG_MMC_REALTEK_PCI=m
CONFIG_MMC_TOSHIBA_PCI=m
CONFIG_MEMSTICK_REALTEK_PCI=m
CONFIG_DW_DMAC_PCI=m
# CONFIG_DW_EDMA_PCIE is not set
CONFIG_UIO_PCI_GENERIC=m
CONFIG_VFIO_PCI_CORE=m
CONFIG_VFIO_PCI_MMAP=y
CONFIG_VFIO_PCI_INTX=y
CONFIG_VFIO_PCI=m
CONFIG_VFIO_PCI_VGA=y
CONFIG_VFIO_PCI_IGD=y
CONFIG_VIRTIO_PCI_LIB=m
CONFIG_VIRTIO_PCI=m
CONFIG_VIRTIO_PCI_LEGACY=y
CONFIG_VHOST_SCSI=m
CONFIG_XEN_PCIDEV_BACKEND=m
CONFIG_XEN_SCSI_BACKEND=m
CONFIG_COMEDI_PCI_DRIVERS=m
CONFIG_COMEDI_8255_PCI=m
CONFIG_COMEDI_ADDI_APCI_1032=m
CONFIG_COMEDI_ADDI_APCI_1500=m
CONFIG_COMEDI_ADDI_APCI_1516=m
CONFIG_COMEDI_ADDI_APCI_1564=m
CONFIG_COMEDI_ADDI_APCI_16XX=m
CONFIG_COMEDI_ADDI_APCI_2032=m
CONFIG_COMEDI_ADDI_APCI_2200=m
CONFIG_COMEDI_ADDI_APCI_3120=m
CONFIG_COMEDI_ADDI_APCI_3501=m
CONFIG_COMEDI_ADDI_APCI_3XXX=m
CONFIG_COMEDI_ADL_PCI6208=m
CONFIG_COMEDI_ADL_PCI7X3X=m
CONFIG_COMEDI_ADL_PCI8164=m
CONFIG_COMEDI_ADL_PCI9111=m
CONFIG_COMEDI_ADL_PCI9118=m
CONFIG_COMEDI_ADV_PCI1710=m
CONFIG_COMEDI_ADV_PCI1720=m
CONFIG_COMEDI_ADV_PCI1723=m
CONFIG_COMEDI_ADV_PCI1724=m
CONFIG_COMEDI_ADV_PCI1760=m
CONFIG_COMEDI_ADV_PCI_DIO=m
CONFIG_COMEDI_AMPLC_DIO200_PCI=m
CONFIG_COMEDI_AMPLC_PC236_PCI=m
CONFIG_COMEDI_AMPLC_PC263_PCI=m
CONFIG_COMEDI_AMPLC_PCI224=m
CONFIG_COMEDI_AMPLC_PCI230=m
CONFIG_COMEDI_CONTEC_PCI_DIO=m
CONFIG_COMEDI_DAS08_PCI=m
CONFIG_COMEDI_DYNA_PCI10XX=m
CONFIG_COMEDI_JR3_PCI=m
CONFIG_COMEDI_CB_PCIDAS64=m
CONFIG_COMEDI_CB_PCIDAS=m
CONFIG_COMEDI_CB_PCIDDA=m
CONFIG_COMEDI_CB_PCIMDAS=m
CONFIG_COMEDI_CB_PCIMDDA=m
CONFIG_COMEDI_NI_LABPC_PCI=m
CONFIG_COMEDI_NI_PCIDIO=m
CONFIG_COMEDI_NI_PCIMIO=m
# CONFIG_INTEL_SCU_PCI is not set
# CONFIG_PWM_LPSS_PCI is not set
CONFIG_INTEL_TH_PCI=m
# CONFIG_NFSD_SCSILAYOUT is not set
CONFIG_GENERIC_PCI_IOMAP=y                          
linux kernel
  • 1 个回答
  • 32 Views
Martin Hope
RandomDice 779
Asked: 2022-07-22 03:00:08 +0000 UTC

如何使用 U-Boot 创建 EXT4 分区?

  • 0

我有一张带 U-Boot 的 SD 卡。记录如下:

 ~ # dd if=uboot-with-spl.bin of=/dev/sdd bs=1024 seek=8

我想在 U-boot 旁边创建一个 ext4 分区,以便我可以通过 bootz 从它启动 zImage。(是的,我走得很艰难,即像 LFS 这样的东西,只适用于 ARM 板)。我自己有zImage,我可以自己提供UART,从头创建一个ramdisk对我来说并不难,我什至会写我自己的init。问题:我如何在 Linux 的地图上创建一个分区,以及如何将内核、ramdisk 以及后来的系统其余部分放在那里?

UPD:尝试了这里的方法,U-Boot 没有启动:https ://linux-sunxi.org/Bootable_SD_card

UPD2:

0andriy,你说的是 ext4 的偏移量。附近没有类似的东西:

lphoto1

在此处输入图像描述

linux boot
  • 1 个回答
  • 75 Views
Martin Hope
RandomDice 779
Asked: 2022-07-20 02:54:21 +0000 UTC

如何创建 FUSE 文件系统?

  • 0

这个问题甚至与特定的编程语言无关。如何创建 FUSE 文件系统?

据我了解,我只需要描述一般适用于文件的系统调用。好吧,粗略地说,一个来自 C 的例子:

struct fuse_operations {
    int open(const char* filename, int mode);
    int close(int fd);
    int lgetattr(const char* filename);
    ...
};

只有我应该[关于]在那里写什么还不清楚。更不用说 FUSE 如何“解释”您的文件系统不仅仅是一个磁盘映像,而是一个存档 (fuse-zip),或者更酷的是,文件位于 RAM 中(tmpfs、ramfs、cramfs、rootfs)。以下是如何使 FUSE 从存档中“解析”文件,甚至更酷,将文件存储在 RAM 中?我应该归因于什么,我应该fuse_operations如何准确地描述这些系统调用???

linux файловая-система
  • 1 个回答
  • 30 Views
Martin Hope
RandomDice 779
Asked: 2022-07-15 21:15:35 +0000 UTC

解析命令行的最佳方法是什么?

  • 6

语言:C++、bash、C。

我需要解析命令行选项。同时,选项不应依赖于位置。也就是说,如果用户输入 key -a,那么程序应该接收到 key,即使它位于 argv[0] 之后,或者直接位于 argv[argc - 1] 中。我不想为此归咎于一堆if-else,但我也有很多这样的选择。您能否提出一个比if-else和更短、更经济的解决方案switch-case?

linux c++
  • 1 个回答
  • 105 Views
Martin Hope
RandomDice 779
Asked: 2022-09-09 04:04:26 +0000 UTC

如何更新 C++ ncurses 中的窗口?

  • 0

Conda 尝试按 KEY_UP 或 KEY_DOWN,我的文字没有改变。wclear()我试图通过并且清除窗口wrefresh()- 无济于事。语言 - C++,系统 - Linux,我使用 ncurses。代码:https ://termbin.com/g0t7 。那么如何更新窗口的内容呢??

UPD:也没有响应回车,嗯

UPD2:改为getch()-wgetch()无用,不响应

UPD3:替换if-else为switch-case并尝试使用getch() = ERR. 不工作。

UPD4:将窗口“带出”循环while True。现在 getch 工作,但我需要更新按钮点击的窗口。试过goto,但它不起作用......新代码:https ://termbin.com/6ias

linux c++
  • 1 个回答
  • 32 Views
Martin Hope
RandomDice 779
Asked: 2022-08-27 05:44:11 +0000 UTC

如何在字节数组中查找字符串?

  • 0

在字节数组中查找字符串。也就是说,它的内容从文件中读取到一个字节数组中,然后在这个数组中搜索一个字符串。通常的 find() 或 strstr() 无济于事,因为文件是二进制文件->即可能有换行符、空字节等。我发现了memmem它,但对我来说,这个选项原来是非-工作 - 它返回SIGSEGV:

#include <stdio.h>
#include <sys/stat.h>
#include <fstream>
#include <string.h>
using namespace std;

int main() {
    struct stat buf;
    stat("binary", &buf);
    const unsigned int fsize = buf.st_size;
    ifstream bins;
    bins.open("binary", ios::in|ios::binary);
    char *cbuf = new char[fsize];
    char ch;
    unsigned int k = 0;
    while(bins.get(ch)) {
        cbuf[k] = ch;
        k++;
    }
    bins.close();
    const void *pos = memmem(cbuf, fsize, "/system", 7);
    const int *ipos = (int *)pos;
    delete[] cbuf;
    printf("%d", *ipos);
    return 0;
}
 ~/work $ g++ -g main.cpp
 ~/work $ ./a.out
Segmentation fault
 ~/work $ gdb ./a.out
gdb > r
Starting program: /home/me/work/a.out

Program received signal SIGSEGV, Segmentation fault.
0x0000005555555dd0 in main () at main.cpp:24
24          printf("%d", *ipos);

而且我需要在字节数组中找到一个字符串,以便让自己知道数组中字符串开头的位置。也就是说,如果搜索词的第一个字符是 439 字节,那么应该返回数字 439。

linux c++
  • 2 个回答
  • 91 Views
Martin Hope
RandomDice 779
Asked: 2022-08-21 03:17:58 +0000 UTC

如何从文件中读取并将读取的部分内容保留在内存中?

  • 0

这样的任务是值得的。有一个大文件,必须逐字符读取。同时,有必要不断地把读到的最后几个字符保存在内存中。

#include <fstream>
#include <vector>
using std::vector, std::ios, std::ifstream;

int main() {
    ifstream fIle;
    fIle.open("myfile.bin", ios::in|ios::binary);
    char ch;
    vector<char> chm(8);
    while(fIle.get(ch)) {
        // и тут я запутался
    }

这是实现这一点的最佳方法吗?读取 8 个字节的块是不可能的!必须严格逐字节读取,同时将最后读取的 8 个字节(包括刚刚读取的字节)保存在内存中......

linux c++
  • 2 个回答
  • 60 Views
Martin Hope
RandomDice 779
Asked: 2022-08-16 18:05:56 +0000 UTC

如何比较三个数字?

  • 0

有3个数字:

unsigned int a;
unsigned int b;
unsigned int c;

它们的值是在程序执行期间设置的。然后你需要比较这些值\u200b\u200bin才能找到最小的,即:

// сравниваем числа
if (smallest == a) {
    ...
} else if (smallest == b) {
    ...
} else if (smallest == c) {
    ...
}

首先想到的是 if / else 包。但是即使是三个号码,这样的一串也会很长,不太方便。更糟糕的是 - 三个数字中的两个可以相等,这很不方便,特别是如果这是两个最小的数字。你能告诉我如何做这样一个简短而有能力的比较吗?如果你将它包装在一个函数中,那就更好了

int num_match() {
   int smallest;
   ...
   return smallest;
}
linux
  • 1 个回答
  • 154 Views
Martin Hope
RandomDice 779
Asked: 2022-08-13 03:16:52 +0000 UTC

我可以将受保护的方法设为私有吗?

  • 0

有这样一种情况:

class Class1 {
    protected:
        virtual void setup();
};

class Class2 : public Class1 {
};

在第一个类中,该方法被setup()声明为protected,也就是说,除了同一个类之外,子类也可以使用它。然后,这是一个虚方法,它将在子类中被覆盖。我可以在二等舱中将其声明为私有吗?

class Class2 : public Class1 {
    private:
        void setup() {
        ...
        }
};
c++ классы
  • 1 个回答
  • 36 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5