问题标签 [data-segment]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
798 浏览

c - 汇编:从 C 调用或作为独立程序创建时的数据段

我对此感到困惑;我不认为这两种情况应该有任何区别,程序最终成为 exe 文件。如果您认为不同,请提供帮助....


让我澄清一下我的问题:当我创建“独立”汇编程序和从C程序调用汇编例程时,数据段定义或处理是否存在差异?

在这两种情况下,谁来定义日期段的位置或大小?这是编译器还是操作系统?以及在这两种情况下数据段的值是如何确定的?

0 投票
4 回答
1093 浏览

x86 - 静态存储(主要是数据段)会导致分段错误吗?

static存储在编译时决定。但是,考虑一下我们在函数中有很多延迟初始化的场景:

我在这里讨论的不是编码实践,而是技术方面。由于执行了许多其他功能 ,因此将在数据段中引入这些变量foo()static

编译器在为数据段分配空间时也会考虑到延迟初始化。如果“否”,那么它会在代码执行时在运行时导致分段错误吗?static(当方法中有大量数据时更可能发生template)。

0 投票
1 回答
422 浏览

assembly - TurboShell/TurboAsm 中的“Var2 DW Var1”是什么意思?

为什么下面的代码可以完美编译?

“Var2 Dw Var1”这一行是什么意思?我认为只有立即值可以跟在类型定义之后。

0 投票
1 回答
261 浏览

c - bss 段的用处是什么?

我知道 bss 段包含未初始化的变量,这些变量将被赋予 0 作为初始值,但为什么我们不只使用数据段来存储它们呢?

我读到它加快了执行速度,因为 os 加载器通过调用 memset 一次初始化所有这些变量,但是,我不太相信,因为加载器也可以调用 memset 来在数据段中初始化它们!

0 投票
4 回答
5212 浏览

c - C中的bss段

在“关于 Unix 中的 bss 段和数据段”问题的答案之一中,我看到了关于 bss 的解释如下:

Bss 很特别:.bss 对象在对象文件中不占用任何空间,并且通过将所有未专门初始化的符号组合在一起,可以轻松地将它们一次清零。

但是当我在目标文件上使用 size 时,从代码中生成:

我有以下

并看到基于全局范围的未初始化数据成员的 bss 增长。那么任何人都可以证明上述声明的合理性吗?

0 投票
1 回答
2370 浏览

assembly - 如何使用 x86 程序集从数据段中读取数据?

我使用 nasm32、x86 汇编语言。我想从数据段中读取一些数字。

此代码仅返回

20

我想 DATA1 53h (= 83 (decimal)) 值会返回。(ASCII字符)

但奇怪的数字是返回。发生了什么?我不明白这个结果。

以及如何修复此代码?

0 投票
1 回答
1716 浏览

assembly - 如何更改数据段?我究竟做错了什么?

我正在开发一个 32 位操作系统,并开发了一个可以正常工作的 ELF 加载程序。现在我没有启用分页(我计划稍后,但现在我只是试图加载内核模块)并且我试图在启动时执行模块。基本上,由于此时多任务处理还没有完全实现,我只想加载每个模块,调用 init(它将安装中断处理程序并设置模块的用途)然后退出并执行下一个。它可以工作,但我不能用 C 程序中的指针做任何事情(因为它仍然认为它正在使用内核数据段)。所以基本上我想做的是创建一个新的数据段,指向 RAM 中的模块 .data 段。我通过在 GDT 中设置条目号 6 来做到这一点。

setEntry 方法工作得很好,看起来像

同样两者都可以 100% 工作,当我更改数据段选择器时会出现我遇到的问题。我在汇编中执行此操作,ELF 入口点存储在 EAX 中。

这将导致我的内核恐慌,给 CPU 异常 0x6,无效的操作码。我的 C 程序的源代码只是一个将文本复制到视频 RAM 的 hello world 程序(没什么可看的。)。有谁知道我做错了什么?我对 GDT 和段选择器的整个概念很陌生............而且我现在不能启用分页或多任务处理,我真的不想解释为什么......

0 投票
1 回答
164 浏览

compiler-construction - 编译器构建中的数据段

我正在为我自己定义的语言开发一个编译器,我已经生成了3 个地址代码,现在我要开发一个可以运行该 3 个地址代码的虚拟机。但为此我需要数据段(我可以在其中存储所有变量值)。我的语言中有两种数据类型(int 和 char)。
请给我一个提示,我如何构造一个数据段,我可以在其中存储我的所有变量(int 和 char 两者)值
感谢阅读我的问题

0 投票
1 回答
1612 浏览

c++ - 将向量存储在 DLL 数据段中

信息

以下警告:
LINK : warning LNK4039: section '.SHARED' specified with /SECTION option does not exist
每当我尝试将向量存储在 C++ 中动态链接库的数据段中时,总会发生。

例如:

但是,如果我尝试存储一个简单的变量,编译时不会出现警告。像这样:

我不是绝对肯定的,但我相信警告是由于没有初始化向量引起的?如果是这样,我们如何初始化将存储在数据段中的向量?

我还有一个问题,将向量存储在 DLL 中的数据段中是不是一个糟糕的主意?

我的目标

我正在尝试在 DLL 中共享向量的内容,该 DLL 将被加载到几个不同的进程中。

像这样:

0 投票
2 回答
282 浏览

linux - 为什么linux在异常处理程序的序言中将数据段设置为__USER_DS

我正在尝试阅读 Linux 源代码(2.6.11)

在异常处理程序中,在 entry.s,error_code:

我不知道为什么在这里加载用户数据段。由于它应该进入在内核模式下运行的异常处理程序代码,因此选择器应该是__KERNEL_DS。

我检查了其他版本的代码,他们在这个地方也专门做同样的事情。