invoke gethostbyname, addr buffer mov eax, [eax+12] ; получаем указатель на элемент h_list в HOSTENT mov eax, [eax] ; получаем указатель на указатель на IP mov eax, [eax] ; получаем указатель на строку IP в сетевом порядке байт Разьясните , кому не лень , что тут происходит ? Указатель на указатель - это как ? И почему mov eax, [eax] дает оба раза разный результат ???
В прямом смысле, например. Код (Text): int a, *b, **c; b = &a; c = &b; В данном случае c - указатель на b, который в свою очередь тоже указатель. Потому что после перовго mov eax, [eax] регистр изменился, и указывает на другой участок памяти.
Блин. Сшная адресная арифметика .... ( Объясните плз, с точки зрения физики и 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 перезаписывается мусором , который берут по адресу, в который(адрес) превращают первый мусор . :-\
В Си такого нет. Есть у тебя регистр, который хранит адрес ячейки памяти, которая в свою очередб хранит адрес другой ячейки памяти. Угу. h_list это как раз указатель на указатель. Чтобы добраться до самого значения, надо дважды его разыминовать.
Фуу .. (тяжело вдыхая и выдыхая ) .. Практически доехал . 2 часов не прошло . Хотя на практике прога всеравно пока отдает один мусор , ну и хрен с ней ... Меня запутало описание структуры в windows.inc Ожидал перед указателем префикса lp . Причем указатель на указатель там видимо потому , что ip может быть несколько . Благодарствую , n0name . P.S.: Кстати. Ты не из Мытищ ? А то есть тут 1 товарищ с таким погонялом.