问题标签 [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.
c - 汇编:从 C 调用或作为独立程序创建时的数据段
我对此感到困惑;我不认为这两种情况应该有任何区别,程序最终成为 exe 文件。如果您认为不同,请提供帮助....
让我澄清一下我的问题:当我创建“独立”汇编程序和从C程序调用汇编例程时,数据段定义或处理是否存在差异?
在这两种情况下,谁来定义日期段的位置或大小?这是编译器还是操作系统?以及在这两种情况下数据段的值是如何确定的?
x86 - 静态存储(主要是数据段)会导致分段错误吗?
static
存储在编译时决定。但是,考虑一下我们在函数中有很多延迟初始化的场景:
我在这里讨论的不是编码实践,而是技术方面。由于执行了许多其他功能 ,因此将在数据段中引入这些变量foo()
。static
编译器在为数据段分配空间时也会考虑到延迟初始化。如果“否”,那么它会在代码执行时在运行时导致分段错误吗?static
(当方法中有大量数据时更可能发生template
)。
assembly - TurboShell/TurboAsm 中的“Var2 DW Var1”是什么意思?
为什么下面的代码可以完美编译?
“Var2 Dw Var1”这一行是什么意思?我认为只有立即值可以跟在类型定义之后。
c - bss 段的用处是什么?
我知道 bss 段包含未初始化的变量,这些变量将被赋予 0 作为初始值,但为什么我们不只使用数据段来存储它们呢?
我读到它加快了执行速度,因为 os 加载器通过调用 memset 一次初始化所有这些变量,但是,我不太相信,因为加载器也可以调用 memset 来在数据段中初始化它们!
c - C中的bss段
在“关于 Unix 中的 bss 段和数据段”问题的答案之一中,我看到了关于 bss 的解释如下:
Bss 很特别:.bss 对象在对象文件中不占用任何空间,并且通过将所有未专门初始化的符号组合在一起,可以轻松地将它们一次清零。
但是当我在目标文件上使用 size 时,从代码中生成:
我有以下
并看到基于全局范围的未初始化数据成员的 bss 增长。那么任何人都可以证明上述声明的合理性吗?
assembly - 如何使用 x86 程序集从数据段中读取数据?
我使用 nasm32、x86 汇编语言。我想从数据段中读取一些数字。
此代码仅返回
20
我想 DATA1 53h (= 83 (decimal)) 值会返回。(ASCII字符)
但奇怪的数字是返回。发生了什么?我不明白这个结果。
以及如何修复此代码?
assembly - 如何更改数据段?我究竟做错了什么?
我正在开发一个 32 位操作系统,并开发了一个可以正常工作的 ELF 加载程序。现在我没有启用分页(我计划稍后,但现在我只是试图加载内核模块)并且我试图在启动时执行模块。基本上,由于此时多任务处理还没有完全实现,我只想加载每个模块,调用 init(它将安装中断处理程序并设置模块的用途)然后退出并执行下一个。它可以工作,但我不能用 C 程序中的指针做任何事情(因为它仍然认为它正在使用内核数据段)。所以基本上我想做的是创建一个新的数据段,指向 RAM 中的模块 .data 段。我通过在 GDT 中设置条目号 6 来做到这一点。
setEntry 方法工作得很好,看起来像
同样两者都可以 100% 工作,当我更改数据段选择器时会出现我遇到的问题。我在汇编中执行此操作,ELF 入口点存储在 EAX 中。
这将导致我的内核恐慌,给 CPU 异常 0x6,无效的操作码。我的 C 程序的源代码只是一个将文本复制到视频 RAM 的 hello world 程序(没什么可看的。)。有谁知道我做错了什么?我对 GDT 和段选择器的整个概念很陌生............而且我现在不能启用分页或多任务处理,我真的不想解释为什么......
compiler-construction - 编译器构建中的数据段
我正在为我自己定义的语言开发一个编译器,我已经生成了3 个地址代码,现在我要开发一个可以运行该 3 个地址代码的虚拟机。但为此我需要数据段(我可以在其中存储所有变量值)。我的语言中有两种数据类型(int 和 char)。
请给我一个提示,我如何构造一个数据段,我可以在其中存储我的所有变量(int 和 char 两者)值
感谢阅读我的问题
c++ - 将向量存储在 DLL 数据段中
信息
以下警告:
LINK : warning LNK4039: section '.SHARED' specified with /SECTION option does not exist
每当我尝试将向量存储在 C++ 中动态链接库的数据段中时,总会发生。
例如:
但是,如果我尝试存储一个简单的变量,编译时不会出现警告。像这样:
我不是绝对肯定的,但我相信警告是由于没有初始化向量引起的?如果是这样,我们如何初始化将存储在数据段中的向量?
我还有一个问题,将向量存储在 DLL 中的数据段中是不是一个糟糕的主意?
我的目标
我正在尝试在 DLL 中共享向量的内容,该 DLL 将被加载到几个不同的进程中。
像这样:
linux - 为什么linux在异常处理程序的序言中将数据段设置为__USER_DS
我正在尝试阅读 Linux 源代码(2.6.11)
在异常处理程序中,在 entry.s,error_code:
我不知道为什么在这里加载用户数据段。由于它应该进入在内核模式下运行的异常处理程序代码,因此选择器应该是__KERNEL_DS。
我检查了其他版本的代码,他们在这个地方也专门做同样的事情。