Вопрос по статье Socket vs Socket , DirectOra

Тема в разделе "WASM.BEGINNERS", создана пользователем Hmm, 26 дек 2006.

  1. Hmm

    Hmm New Member

    Публикаций:
    0
    Регистрация:
    22 ноя 2006
    Сообщения:
    162
    invoke gethostbyname, addr buffer
    mov eax, [eax+12] ; получаем указатель на элемент h_list в HOSTENT
    mov eax, [eax] ; получаем
    указатель на указатель на IP
    mov eax, [eax] ; получаем указатель на строку IP в сетевом порядке байт

    Разьясните , кому не лень , что тут происходит ? Указатель на указатель - это как ? И почему
    mov eax, [eax] дает оба раза разный результат ???
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    В прямом смысле, например.
    Код (Text):
    1. int a, *b, **c;
    2. b = &a;
    3. c = &b;
    В данном случае c - указатель на b, который в свою очередь тоже указатель.
    Потому что после перовго mov eax, [eax] регистр изменился, и указывает на другой участок памяти.
     
  3. Hmm

    Hmm New Member

    Публикаций:
    0
    Регистрация:
    22 ноя 2006
    Сообщения:
    162
    Блин. Сшная адресная арифметика .... :dntknw:(
    Объясните плз, с точки зрения физики и asm'a . Вот есть у меня регистр , ячейка памяти , есть ее адрес . Где там может хранится указатель на указатель ?
    Про то что в C оно есть я помню . Там еще есть виртуальные функции , классы , полиморфизм , наследование ...
    Я лично все это так понимаю :
    mov eax, [eax+12] В eax записывается dword из памяти находящийся по адресу eax+12 . Те элемент h_list ( ip адрес) структуры hostent.
    Далее
    mov eax, [eax]
    mov eax, [eax]
    1) eax перезаписывается мусором , который берут по адресу [h_list] .
    2) eax перезаписывается мусором , который берут по адресу, в который(адрес) превращают первый мусор .
    :-\
     
  4. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    В Си такого нет.
    Есть у тебя регистр, который хранит адрес ячейки памяти, которая в свою очередб хранит адрес другой ячейки памяти.
    Угу. h_list это как раз указатель на указатель. Чтобы добраться до самого значения, надо дважды его разыминовать.
     
  5. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    Hmm
    В таких вещах отладчик очень хорошо помогает.
     
  6. Hmm

    Hmm New Member

    Публикаций:
    0
    Регистрация:
    22 ноя 2006
    Сообщения:
    162
    Фуу .. (тяжело вдыхая и выдыхая ) ..
    Практически доехал . 2 часов не прошло . Хотя на практике прога всеравно пока отдает один мусор , ну и хрен с ней ...
    Меня запутало описание структуры в windows.inc
    Ожидал перед указателем префикса lp .
    Причем указатель на указатель там видимо потому , что ip может быть несколько .
    Благодарствую , n0name .
    P.S.: Кстати. Ты не из Мытищ ? А то есть тут 1 товарищ с таким погонялом.
     
  7. Hmm

    Hmm New Member

    Публикаций:
    0
    Регистрация:
    22 ноя 2006
    Сообщения:
    162
    2asd: Надо попробовать .
     
  8. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    нет.
    угу.