получить смещение и адрес сегмента строки - PullRequest
1 голос
/ 09 июня 2011


Я хочу напечатать смещение и адрес сегмента, используя программу на 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 и распечатать его.Есть ли у них какой-либо способ сделать это * Пожалуйста, ответьте на него *

1 Ответ

2 голосов
/ 27 августа 2012

Сегменты и смещения - это устаревшие функции до появления защищенного режима на чипах x86.

Получив защищенный режим, они начали использовать селекторы , чтобы уйти от того факта, что адреса памяти теперь виртуальные, а не физические. И в настоящее время они обычно используют плоскую модель, у которой очень мало селекторов, каждый с большим (а иногда и одинаковым) резервным блоком памяти.

Способ получения адреса переменной в C - с помощью оператора &. Например:

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

выводит Address is 0xbfe8232c в моей системе.

Поскольку язык C не поддерживает напрямую этот устаревший сегмент / смещение, он был оставлен для реализации и сильно зависел от используемой модели памяти. Например, некоторые компиляторы предоставляют функции, такие как getDS(), для предоставления вам регистра сегмента данных, другие вынуждены прибегать к встроенной сборке.

В зависимости от модели (крошечная, маленькая, средняя, ​​большая и т. Д.), Существуют различные способы ее решения, ни один из которых я не буду здесь подробно описывать, поскольку они бесполезны для подавляющего большинства разработчики вокруг в настоящее время: -)

Один пример обручей, через которые нам пришлось прыгать, можно найти в статье 10-битного руководства по компиляции 80x86 Алексея Фрунзе , в которой подробно описывается, как все процессы сегментации работают в реальных условиях. режим и различные модели памяти, используемые для его поддержки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...