![]() |
Модераторы: Poseidon |
![]() ![]() ![]() |
|
a1b2 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 17.4.2007 Репутация: нет Всего: нет |
Здравствуйте все!Помогите пожалуйста.. тут такое дело :
нужно написать программу, которая выводит значения адреса сегмента ее кода, начала данных из кучи и стека. Никак не могу разобраться(( |
|||
|
||||
dizzy1984 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 675 Регистрация: 15.2.2007 Репутация: 10 Всего: 25 |
Привет.
Как там дела со вложенными структурами? ![]() Вообщем я не на 100% уверен, что это то, что тебе нужно, но я по-крайней мере постараюсь объяснить написанное. Это код для borland c++ 3.1 (угадал?)
Что он делает. Первая строка выводит значение сегмента кода. Он хранится в регистре cs. Далее сегмент стека, регистр ss. Не совсем понятно, нужен именно сегмент? Начало данных в хипе. Можно получить указатель на них с помощью heapwalk. У указателя можно взять сегмент, получится сегмент первого блока хипа. Нужно было это??? Это сообщение отредактировал(а) dizzy1984 - 1.5.2007, 13:17 |
|||
|
||||
Жука |
|
||||
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 21.3.2007 Репутация: нет Всего: нет |
И тебе привет!Со вложенными структурами все просто замечательно-сл\дала еще на прошлой неделе
![]() А что такое
и
У a1b2 трафик кончился, так что я пока за нее) Это сообщение отредактировал(а) Жука - 1.5.2007, 13:57 |
||||
|
|||||
dizzy1984 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 675 Регистрация: 15.2.2007 Репутация: 10 Всего: 25 |
Тогда лучше подойти к преподавателю и попросить объяснить. По поводу того что было в 1-м посте. Логически программу для ms-dos можно разделить на 3 части : 1. Часть, содержащая данные. 2. Стек. 3. Часть, содержащая код. 1 содержит глобальные постоянные и переменные. 2 содержит постоянные и переменные функций. 3 содержит процессорные инстркции,т.е сам код программы. Существуют динамические данные, они распологаются вне программы. Идут не последовательно, а блоками. Адресация в ms-dos идет как сегмент:смещение. Любой адрес представлен этими 2-мя числами(2 байта каждое). К моменту когда программа получает управление в регистры СS и SS уже загружены адреса соответствующих сегментов(Code Segment и Stack Segment). Есть предопределенные переменные _DS, _СS, _SS и т.д. Они получают значения этих регистров. Вот я и вывел 1. Адрес сегмента кода. 2. Адрес сегмента стэка. 3. Адрес сегмента первого блока в куче. По поводу 2-го. Обычно чтобы посмотреть описание некоторой функции я подвожу к ней курсор и нажимаю ctrl+F1 Это переменная типа heapinfo, она нужна функции
В справке сказано, что если выставить поле ptr стрктуры heapinfo в NULL, то оно получит адрес первого блока кучи(хипа). В справке сказано, что эта функция гулает по хипу, выдавая на каждом шаге прогулки адрес блока, где она остановилась передохнуть. Так вначале она выдаст адрес первого блока, после второго вызова второго - и т.д. |
|||
|
||||
Jolia |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 59 Регистрация: 12.3.2007 Репутация: нет Всего: нет |
Больше чем БОЛЬШОЕ спасибо)))
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Центр помощи" | |
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Центр помощи | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |