AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题

问题[x86](unix)

Martin Hope
Ole Tange
Asked: 2023-11-05 20:38:40 +0800 CST

为什么“H”/72/0x48 是可执行文件中第二个最常见的字节?

  • 64

我跑了这个:

cat /usr/bin/* |
  perl -ne 'map {$a{$_}++} split//; END{print map { "$a{$_}\t$_\n" } keys %a}' |
  grep --text . | sort -n | plotpipe --log y {1}

并得到这个:

字节值出现的次数

(即使使用对数 y 轴,它看起来仍然是指数的!顶部和底部之间的距离超过 100 倍)

看一下数字:

:
31919597        ^H
32983719        ^B
33943030        ^O
39130281        \213
39893389        $
52237360        \211
53229196        ^A
76884442        \377
100776756       H
746405320       ^@

^@ (NUL) 是可执行文件中最常见的字节,这并不奇怪。\377 (255) 和 ^A (1) 对我来说也具有直观意义。

但是,是什么导致“H”(72)成为可执行文件中第二常见的字节——比 255 和 1 更常见呢?

x86
  • 1 个回答
  • 7277 Views
Martin Hope
CIsForCookies
Asked: 2021-09-06 03:08:14 +0800 CST

dpkg-deb 将我的架构视为 amd64 而不是 x86)64

  • 0

我刚刚创建了一个简单的.deb包(使用本教程)。这是我的控制文件:

Package: bla
Version: 1.0
Architecture: x86_64
Maintainer: bla
Description: bla

ArchitectureI got from uname -m:x86_64但是,dpkg-deb由于_是无效字符而中断,所以我更改为which-工作但在安装阶段中断:

dpkg: error processing archive bla_x86_64.deb (--install):
 package architecture (x86-64) does not match system (amd64)

所以我转而使用amd64作为我的架构,瞧!

现在我只是不明白uname -m和dpkg...之间的架构不匹配

dpkg x86
  • 1 个回答
  • 383 Views
Martin Hope
Mario Carneiro
Asked: 2020-01-29 01:40:06 +0800 CST

将 .bss 部分用作静态堆栈是否安全?

  • 2

(这是在 x86-64 Linux 的上下文中。)

我正在尝试编写一个高可靠性的用户态可执行文件,并且我可以完全控制生成的程序集。我不想依赖自动堆栈分配,所以我想把堆栈放在一个已知的位置。假设我计算出我的程序最多使用 414 字节的堆栈空间(完全正确)。在 .bss 部分分配 414 个字节并将 RSP 指向顶部是否安全?我想确保堆栈管理在任何时候都不会触及该区域之外的字节。

虽然我可以确定我的程序不会在该区域之外写入,但我需要进行一些系统调用(使用syscall指令),并且我认为至少部分内核代码在调用可执行上下文中运行。它会破坏我的堆栈吗?

此外,程序中的任何一点都可能发生中断,“红区”背后的故事似乎表明,中断处理程序可以随意写入 RSP-128 之外的任意大区域,可能会破坏我的数据。我对这种行为有哪些保证?

linux-kernel x86
  • 1 个回答
  • 198 Views
Martin Hope
Bartek Malysz
Asked: 2020-01-15 12:13:49 +0800 CST

适用于 x86 架构的最小现代 Linux 发行版

  • 0

我正在寻找像 Damn Small Linux 或 TinyCore 这样的小型 Linux 发行版。它必须是完整的内核、bash、包管理器和网络,理想情况下没有别的。提到的这两个不适合我的使用,并且 DSL 已经过时了。

它必须能够支持 200 MHz + 和 256 MB Ram x86 架构和无需安装的实时启动,最好能够完全在 RAM 中运行。

有什么建议么?

linux x86
  • 1 个回答
  • 179 Views
Martin Hope
炸鱼薯条德里克
Asked: 2019-02-07 17:17:16 +0800 CST

我应该如何将 32 位参数传递给 x86_64 上的 Linux 系统调用?

  • 1

如果系统调用需要一些 32 位参数,例如uid_t或int(用于文件描述符)unsigned int甚至一些 16 位类型,我如何使用 64 位寄存器传递它们?

在使用指令之前,我是否需要将它们零扩展或符号扩展为 64 位syscall?

如果我__X32_SYSCALL_BIT在 RAX 中使用,原来的 64 位指针类型参数变为 32 位,我仍然需要使用相同的 64 位寄存器来传递参数,在这种情况下我是否需要对地址参数进行零扩展?

linux x86
  • 1 个回答
  • 551 Views
Martin Hope
炸鱼薯条德里克
Asked: 2019-02-07 08:21:48 +0800 CST

mmap 如何与 x32 ABI 配合使用?

  • 1

我在查看 Linux 5.0-rc5 源代码arch/x86/entry/syscalls/syscall_64.tbl,发现 x32 没有单独的系统调用号mmap。

那么内核如何知道我们在用户空间中使用 x32 ABI,所以不给我们超过 4GiB 的映射地址?

或者一般来说,可能返回地址的系统调用如何知道我们正在使用 x32 而不是返回超过 4GiB 的地址?

linux-kernel x86
  • 2 个回答
  • 337 Views
Martin Hope
memoryStream
Asked: 2019-02-02 14:00:23 +0800 CST

yum: gcc 试图在 x86_64 服务器上安装 i686 架构

  • 2

尝试YUM install gcc gcc-g++ make并失败:

Package: glibc-2.17-260.el7.i686 (RHEL_SEC_7)
       Requires: glibc-common = 2.17-260.el7
       Installed: glibc-common-2.17-260.el7_6.3.x86_64 (@anaconda/7.6)
           glibc-common = 2.17-260.el7_6.3
       Available: glibc-common-2.17-55.el7.x86_64 (RHEL_SEC_7)
           glibc-common = 2.17-55.el7
       Available: glibc-common-2.17-55.el7_0.1.x86_64 (RHEL_SEC_7)
           glibc-common = 2.17-55.el7_0.1
       Available: glibc-common-2.17-55.el7_0.3.x86_64 (RHEL_SEC_7)
           glibc-common = 2.17-55.el7_0.3
       Available: glibc-common-2.17-55.el7_0.5.x86_64 (RHEL_SEC_7)
           glibc-common = 2.17-55.el7_0.5
       Available: glibc-common-2.17-78.el7.x86_64 (RHEL_SEC_7)
           glibc-common = 2.17-78.el7
       Available: glibc-common-2.17-105.el7.x86_64 (RHEL_SEC_7)
           glibc-common = 2.17-105.el7
       Available: glibc-common-2.17-106.el7_2.1.x86_64 (RHEL_SEC_7)
           glibc-common = 2.17-106.el7_2.1
       Available: glibc-common-2.17-106.el7_2.4.x86_64 (RHEL_SEC_7)
           glibc-common = 2.17-106.el7_2.4
       Available: glibc-common-2.17-106.el7_2.6.x86_64 (RHEL_SEC_7)
           glibc-common = 2.17-106.el7_2.6
       Available: glibc-common-2.17-106.el7_2.8.x86_64 (RHEL_SEC_7)
           glibc-common = 2.17-106.el7_2.8
       Available: glibc-common-2.17-157.el7.x86_64 (RHEL_SEC_7)
           glibc-common = 2.17-157.el7
       Available: glibc-common-2.17-157.el7_3.1.x86_64 (RHEL_SEC_7)
           glibc-common = 2.17-157.el7_3.1
       Available: glibc-common-2.17-157.el7_3.2.x86_64 (RHEL_SEC_7)
           glibc-common = 2.17-157.el7_3.2
       Available: glibc-common-2.17-157.el7_3.4.x86_64 (RHEL_SEC_7)
           glibc-common = 2.17-157.el7_3.4
       Available: glibc-common-2.17-157.el7_3.5.x86_64 (RHEL_SEC_7)
           glibc-common = 2.17-157.el7_3.5
       Available: glibc-common-2.17-196.el7.x86_64 (RHEL_SEC_7)
           glibc-common = 2.17-196.el7
       Available: glibc-common-2.17-196.el7_4.2.x86_64 (RHEL_SEC_7)
           glibc-common = 2.17-196.el7_4.2
       Available: glibc-common-2.17-222.el7.x86_64 (RHEL_7.6)
           glibc-common = 2.17-222.el7
       Available: glibc-common-2.17-260.el7.x86_64 (RHEL_SEC_7)
           glibc-common = 2.17-260.el7

但是, yum list --showduplicates glibc显示的输出:

Installed Packages
glibc.x86_64                   2.17-260.el7_6.3                   @anaconda/7.6 

并 yum list --showduplicates glibc-common显示:

Installed Packages
glibc-common.x86_64               2.17-260.el7_6.3                @anaconda/7.6 

节目输出的片段yum -v -y install gcc gcc-c++ make:

Package glibc.i686 0:2.17-260.el7 will be installed

为什么 yum 会尝试混合架构?如何强制 yum 仅安装 x86_64 依赖项?

yum x86
  • 1 个回答
  • 2491 Views
Martin Hope
Bertram Gilfoyle
Asked: 2018-12-16 07:51:49 +0800 CST

为什么 Linux 世界使用术语 i386 而不是 x86?

  • 2

我在很多与 Linux 相关的地方都看到了i386而不是x86这个词。据我所知,它们不可互换。x86 是一系列指令集架构,其中 i386 是特定的 x86 处理器。但是为什么 Linux 世界使用术语 i386 而不是 x86 呢?


参考文献:
x86 | 维基百科
英特尔 80386 | 维基百科

linux x86
  • 1 个回答
  • 3602 Views
Martin Hope
Evan Carroll
Asked: 2018-09-25 02:59:35 +0800 CST

不同 32 位仿真模式之间的 GNU Linker 区别?

  • 2

中的 386 和 32 位选项有什么区别ld -V?

  • elf32_x86_64
  • elf_i386
  • i386linux
  • i386pep
  • i386pe

而且,我在哪里可以找到有关这些“仿真模式”的文档

x86 linker
  • 1 个回答
  • 5163 Views
Martin Hope
rhodeo
Asked: 2018-08-10 15:13:27 +0800 CST

x86 Linux 中的物理地址 0 包含什么?

  • 13

我不确定这个问题应该放在这里还是在reverseengineering.stackexchange.com

引用维基百科:

在 8086 处理器中,中断表称为 IVT(中断向量表)。IVT 始终驻留在内存中的同一位置,范围从 0x0000 到 0x03ff,由 256 个四字节实模式远指针(256 × 4 = 1024 字节内存)组成。

这是我在 qemu 监视器中发现的:

(qemu) xp/128xw 0
0000000000000000: 0xf000ff53 0xf000ff53 0xf000e2c3 0xf000ff53
0000000000000010: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
0000000000000020: 0xf000fea5 0xf000e987 0xf000d62c 0xf000d62c
0000000000000030: 0xf000d62c 0xf000d62c 0xf000ef57 0xf000d62c
0000000000000040: 0xc0005526 0xf000f84d 0xf000f841 0xf000e3fe
0000000000000050: 0xf000e739 0xf000f859 0xf000e82e 0xf000efd2
0000000000000060: 0xf000d648 0xf000e6f2 0xf000fe6e 0xf000ff53
0000000000000070: 0xf000ff53 0xf000ff53 0xf0006aa4 0xc0008930
0000000000000080: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
0000000000000090: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
00000000000000a0: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
00000000000000b0: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
00000000000000c0: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
00000000000000d0: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
00000000000000e0: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
00000000000000f0: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
0000000000000100: 0xf000ec59 0xf000ff53 0xf000ff53 0xc0006730
0000000000000110: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
0000000000000120: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
0000000000000130: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
0000000000000140: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
0000000000000150: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
0000000000000160: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
0000000000000170: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
0000000000000180: 0x00000000 0x00000000 0x00000000 0x00000000
0000000000000190: 0x00000000 0x00000000 0x00000000 0xf000ff53
00000000000001a0: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
00000000000001b0: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53
00000000000001c0: 0xf000d611 0xf000ec4e 0xf000ec4e 0xf000ec4e
00000000000001d0: 0xf000d61a 0xf000d623 0xf000d608 0xf000ec4e
00000000000001e0: 0xf000ff53 0x00000000 0xf000ff53 0xf000ff53
00000000000001f0: 0xf000ff53 0xf000ff53 0xf000ff53 0xf000ff53

我不确定如何理解这些价值观。它看起来不像一个中断描述符表(取消引用这些值会给出所有空值)。那么我到底在看什么?

memory x86
  • 3 个回答
  • 2576 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

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

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve