Поиск:

Ответ в темуСоздание новой темы Создание опроса
> адресация 
V
    Опции темы
MAKCim
Дата 22.11.2006, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 2
Всего: 207



проясните ситуацию
есть простой код
Код

int main() {
    int a = 5,
         *b = &a;

    *b = 6;

    return 0;
}

и его asm представление
Код

.file    "a.c"
    .text
.globl main
    .type    main, @function
main:
...
    movl    $5, -12(%ebp)
    leal    -12(%ebp), %eax
    movl    %eax, -8(%ebp)
    movl    -8(%ebp), %eax
    movl    $6, (%eax)
...
    ret
    .size    main, .-main
    .ident    "GCC: (GNU) 4.1.0"
    .section    .note.GNU-stack,"",@progbits

что за адрес записывается в %eax в инструкции?
Код

leal    -12(%ebp), %eax

вроде как эффективный, т. е смещение внутри стека
но если так, каким тогда образом отрабатывает инструкция?
Код

movl    $6, (%eax)

если в %eax смещение, то какой тогда сегментный регистр используется для идентификации дескриптора в LDT?
т. к программа естественно работает, получается что %ss, что не логично потому как если изменить программу таким образом
Код

int a = 5;
int main() {
    int* b = &a;

    *b = 6;

    return 0;
}

то меняются лишь 2 строчки
вместо
Код

leal    -12(%ebp), %eax
movl    %eax, -8(%ebp)

Код

movl    $a,  -8(%ebp)

и получаем все то же косвенное обращение через %eax но в данном случае уже к переменной в сегменте данных
отсюда делаем вывод, что в leal в первом варианте и в movl во втором берется не смещение, а линейный адрес (база в соответствующем дескрипторе + смещение). Мои рассуждения верны?

Это сообщение отредактировал(а) MAKCim - 22.11.2006, 10:31


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
MAKCim
Дата 22.11.2006, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 2
Всего: 207



никто не знает?


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
dumb
Дата 23.11.2006, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: нет
Всего: 158



тонкости уже выпали из головы, но одно можно сказать точно: 
Цитата(MAKCim @  22.11.2006,  10:30 Найти цитируемый пост)
линейный адрес (база в соответствующем дескрипторе + смещение)

никого не интересует, и, мало того, в eax просто не влезет smile
PM MAIL   Вверх
MAKCim
Дата 23.11.2006, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 2
Всего: 207



Цитата

в eax просто не влезет

что значит не влезет? 32-ую адресацию никто не отменял


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
MAKCim
Дата 23.11.2006, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 2
Всего: 207



по совету SergeCpp посмотрел через gdb регистры, никакого линейного адреса и не видно
т. е в
Код

leal -12(%%ebp), %%eax

берется значение EBP-12, т. е смещение
ничего не понимаю  smile 

ps. вопрос принципиальный

Это сообщение отредактировал(а) MAKCim - 23.11.2006, 16:35


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
SergeCpp
Дата 23.11.2006, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


 
**


Профиль
Группа: Участник
Сообщений: 955
Регистрация: 8.8.2005
Где: At Home

Репутация: 1
Всего: 124



PM MAIL WWW ICQ   Вверх
MAKCim
Дата 23.11.2006, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 2
Всего: 207



спасибо все за участие, вопрос решен


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Google
  Дата 20.5.2019, 04:16 (ссылка)  





  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для Linux/Unix"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для Linux/Unix | Следующая тема »


 




[ Время генерации скрипта: 0.1510 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.