gpt4 book ai didi

c - 获取字符串的偏移量和段地址

转载 作者:太空宇宙 更新时间:2023-11-04 03:05:09 24 4
gpt4 key购买 nike


我想用 C 程序打印偏移量和段地址

示例:-

char st[4096]="Stack Over Flow\0";
char st1[4096]="Knowledge beyond boundaries";
void main (void)
{
}

""Stack Over Flow\0"
"Knowledge beyond boundaries"

这是两个字符串,我想用c程序计算这些字符串的偏移量和段地址并打印出来。他们有办法做到这一点吗 *请回答*

最佳答案

段和偏移量是保护模式出现在 x86 芯片之前的过时功能。

一旦获得保护模式,他们就开始使用选择器 来摆脱内存地址现在是虚拟地址而不是物理地址这一事实。现在他们通常使用平面模型,选择器很少,每个选择器都有一个大的(有时是相同的)后备内存块。

在 C 中获取变量的地址 的方法是使用 & 运算符。例如:

#include <stdio.h>
int main (void) {
int xyzzy = 42;
printf ("Address is %p\n", &xyzzy);
return 0;
}

在我的系统上输出 Address is 0xbfe8232c

由于 C 语言不直接支持这种过时的段/偏移量,因此它留给了实现,并且在很大程度上取决于所使用的内存模型。例如,一些编译器提供像 getDS() 这样的函数来为您提供数据段寄存器,而其他编译器则不得不求助于内联汇编。

根据模型(微型、小型、中型、大型等),有多种方法可以解决这个问题,我不会在这里详细说明,因为它们对绝大多数人来说都是无用的现在的开发人员:-)

可以在 80x86 16-bit Compiling How-to, by Alexei A. Frounze 中找到我们必须跳过的障碍的一个例子。 ,一篇详细介绍所有分段内容如何在实模式下工作以及用于支持它的各种内存模型的文章。

关于c - 获取字符串的偏移量和段地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6289121/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com