小编Aru*_*mar的帖子

静态和动态链接对起始地址的影响

我有一个简单的 C 程序。我跑:

$ gcc Q1.c -Wall -save-temps -o Q1
Run Code Online (Sandbox Code Playgroud)

然后我检查生成的可执行文件:

$  objdump -f Q1
Q1:     file format elf32-i386
architecture: i386, flags 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
start address 0x080483b0
Run Code Online (Sandbox Code Playgroud)

然后我用静态链接编译它:

$ gcc Q1.c -Wall -save-temps -static -o Q1
Run Code Online (Sandbox Code Playgroud)

并再次检查文件:

$ objdump -f Q1
Q1:     file format elf32-i386
architecture: i386, flags 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
start address 0x08048e08
Run Code Online (Sandbox Code Playgroud)

静态链接和动态链接对程序的起始地址有什么影响?起始地址是 的地址main(),对吗?

c gcc dynamic-linking static-linking

8
推荐指数
1
解决办法
1330
查看次数

UNIX/Linux 中的默认字长

我正在检查我的 C 程序的预处理输出,碰巧查看了头文件 wordsize.h

它位于 /usr/include/i386-linux-gnu/bits/wordsize.h

该文件只包含一个宏

#define __WORDSIZE   32
Run Code Online (Sandbox Code Playgroud)

我的问题是,字长是由安装的编译器决定的,还是与我安装的操作系统(32 位或 64 位)有关,还是与我的硬件配置有关?机器。

我是 Linux 下的开发新手。

osx programming c cpu-architecture

7
推荐指数
2
解决办法
4125
查看次数

我可以在多个 Linux 发行版之间共享 /usr/local 吗?

我尝试了 Ubuntu 12.04,根据我的理解,我做了以下分区:

  • 2GB 交换(我有 2GB 的内存)
  • 1GB /boot,因为我将安装不同的内核版本(我正在开始内核开发)
  • 35GB /var
  • 40GB /usr/local
  • 407GB /home
  • 15GB /(根)

现在我想在 Ubuntu 12.04 旁边安装 OpenSUSE 12.2。我可以在两个操作系统之间共享/var/usr/local吗?我知道它们是具有不同软件包的两个不同发行版,但是有什么方法可以共享磁盘空间吗?这样两个操作系统都可以/usr/local在同一个分区或类似的分区中拥有自己的操作系统?

linux dual-boot directory-structure

6
推荐指数
1
解决办法
2540
查看次数

Kill 命令的解码标志

我在 Linux shell Scripting 的书上看到了这个命令

$ kill -HUP 1234 >killout.txt 2>killerr.txt
Run Code Online (Sandbox Code Playgroud)

我知道命令的作用,但我无法理解标志-HUP

linux shell kill signals shell-script

6
推荐指数
1
解决办法
3320
查看次数

文件头的部分

我正在研究我的 C 程序,我是 Linux/UNIX 开发的新手,正在四处看看。

我创建了一个简单的 Hello world C 程序,并正在检查编译过程。

我试图读取最终可执行文件的文件头并得到输出如下

$ objdump -f my_output
file format elf32-i386
architecture: i386, flags 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
start address 0x08048320**
Run Code Online (Sandbox Code Playgroud)

我了解 elf32-i386 部分,但我不太确定标题的其他部分。

D_PAGED与需求分页有某种关系吗?是什么 EXEC_P, HAS_SYSMS意思?是起始地址,程序的逻辑地址main()

c executable elf

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

重新排列分区以安装第二个 Linux 发行版

我是 Linux 新手,刚刚对分区表有了一些模糊的想法。这里准确地说是:

Model: ATA ST3500418AS (scsi)
Disk /dev/sda: 500GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type      File system  Flags
 1      1049kB  1001MB  1000MB  primary   ext4         boot
 2      1001MB  3002MB  2001MB  primary
 3      3002MB  18.0GB  15.0GB  primary   ext4
 4      18.0GB  500GB   482GB   extended
 5      18.0GB  53.0GB  35.0GB  logical   ext4
 6      53.0GB  93.0GB  40.0GB  logical   ext4
 7      93.0GB  500GB   407GB   logical   ext4

$ uname -r -v
3.2.0-41-generic-pae #66-Ubuntu SMP Thu Apr 25 03:50:20 UTC 2013

$ …
Run Code Online (Sandbox Code Playgroud)

linux partition

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

更改默认安装目录?

有没有办法更改安装应用程序的目录?我的意思 是,只要它们在PATH变量中,/usr/bin我就可以更改设置以将它们安装在/usr/local/bin或类似的地方吗?

目前使用 Ubuntu 14.04 64 位。

如果解决方案取决于包管理器,是否有任何通用方法?我应该针对哪个配置文件?

software-installation package-management application

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

GDB 中的硬件断点 +QEMU 缺少 start_kernel

我正在尝试使用 GDB 调试在 QEMU 上运行的内核。

内核已使用以下选项编译:

CONFIG_DEBUG_INFO=y
CONFIG_GDB_SCRIPTS=y
Run Code Online (Sandbox Code Playgroud)

我使用以下命令在 qemu 中启动内核:

qemu-system-x86_64 -s -S -kernel arch/x86_64/boot/bzImage
Run Code Online (Sandbox Code Playgroud)

在一个单独的终端中,我从相同的路径启动 GDB 并按顺序发出这些命令:

 gdb ./vmlinux
(gdb) target remote localhost:1234
(gdb) hbreak start_kernel
(gdb) c
Run Code Online (Sandbox Code Playgroud)

我没有提供 rootfs,因为到目前为止我对完整的工作系统不感兴趣,只对内核感兴趣。我还尝试了 hbreak/break 的组合。

内核只是启动并达到内核恐慌,因为无法找到 rootfs……预期。我希望它在 start_kernel 处停止,然后逐步执行代码。

观察:如果我设置一个立即断点,它会工作并停止,但不会在 start_kernel / startup_64 / main

qemu 是否有可能没有调用所有这些函数,或者它是否以某种方式被屏蔽了?

Kernel: 4.13.4 
GDB: GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.3) 7.7.1
GCC: gcc (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4    
system: ubuntu 14.04 LTS
Run Code Online (Sandbox Code Playgroud)

注意:这个完全相同的过程适用于内核 3.2.93,但不适用于 4.13.4,所以我想需要更多的配置。我无法在网上找到为内核 4.0 及更高版本启用此调试程序的资源,因此到目前为止我正在继续使用 3.2,欢迎任何和所有输入。

kernel gdb qemu

4
推荐指数
1
解决办法
2794
查看次数