Глупый заголовок, но ничего лучше не смог придумать Проблема вот в чём: Код (Text): push offset buffer call gethostbyname mov eax,[eax+12] mov eax,[eax] mov eax,[eax] в eax'e ип в таком порядке 1.0.0.127 Собственно - как сделать так чтоб в eax'е было 127.0.0.1 С rol'aми уже часа 2 медитирую и ничего. И даже bswap не помог. Кстати, и функции htons\htonl тоже нафик послали Помогите люди добрые и не очень
Код (Text): push ebx mov ebx, dword [eax] xchg ebx, dword [eax + 12] mov ebx, dword [eax + 4] xchg ebx, dword [eax + 8] pop ebx
Не один не подошёл.. Или могету меня руки кривые? вот код: Код (Text): start proc local buffer1[256]:byte local buffer2[256]:byte sub esp,1000h invoke WSAStartup,00000101h,esp add esp,1000h invoke gethostbyname,addr buffer1 mov eax,[eax+12] mov eax,[eax] mov eax,[eax] ;< сюда ставим код переворота :) mov edi,eax invoke dwtoa,edi,addr buffer2 ; ---- проверка invoke atodw,addr buffer2 invoke htonl,eax invoke inet_ntoa,eax invoke MessageBox,0,eax,eax,0 invoke WSACleanup invoke ExitProcess,0 start endp
не совсем понимаю, что ты делаешь. Ты в buffer1 занес имя хоста перед тем, как вызывать gethostbyname? Второй момент: в eax у тебя будет сам IP. Если надо перевернуть его, тогда bswap. Скажи, какая конечная цель тебе нужна. А то может тебе вовсе и не надо такое делать. Если просто в строку перевести ИП, тогда inet_ntoa и не надо никаких дополнительных извратов
MSoft Мне нужны циферки из invoke dwtoa,edi,addr buffer2, пишу dcc отправилку, а протокол таков: DCC SEND file.exe 2887615812 3445 1626250 ip port size Когда писал dcc принималку, из 2887615812 получал ip с помощью Код (Text): invoke atodw,$CTA0("2887615812") invoke htonl,eax invoke inet_ntoa,eax Теперь вот обратная задачка, из адреса получить эти циферки
Для извращенцев, вот функция, разворачивающая строчку любой длины ))))) Авось кому-то пригодится... Код (Text): StrRev proc lpstr1:DWORD mov edi, lpstr1 mov esi,edi Len: inc esi cmp byte ptr [esi+1],0 jnz Len Rev: mov ah, byte ptr [esi] mov al, byte ptr [edi] mov byte ptr [esi],al mov byte ptr [edi],ah dec esi inc edi cmp esi,edi jg Rev ret StrRev endp
strrev из libc не рулит? Вот мой код переворота строки тогда уж\= Код (Text): ; переворот строки ; edi - начало буфера ; edx - число символов _r: ; цикл реверса буфера mov al, byte [edi+ecx-1] ; загружаем левый байт mov esi, edx sub esi, ecx mov ah, byte [edi+esi] ; загружаем правый байт cmp ecx, esi ; хватит? jna _qq mov byte [edi+ecx-1], ah ; меняем местами mov byte [edi+esi], al loop _r _qq:
Теперь другая более глупая проблемка... После полтора часа перебора комбинаций rol'ов, всё-таки нашёл нужную. Конечно для более быстроты и наглядности перебора я вместо ипа задавал 1.2.3.4 Но когда поставил реальный ип, опять левые циферки появились Код (Text): start proc local buffer2[256]:byte invoke inet_addr,$CTA0("1.2.3.4") rol ax,16 rol eax,8 xchg al,ah rol eax,16 rol ax,16 xchg al,ah rol eax,8 mov edi,eax invoke dwtoa,edi,addr buffer2 ; ---- проверка invoke atodw,addr buffer2 invoke htonl,eax invoke inet_ntoa,eax invoke MessageBox,0,eax,eax,0 invoke ExitProcess,0 start endp
Например, возьмем адрес 1.2.3.4 eax = 0102 0304 меняем местами байты в младшем слове: xchg ah, al eax = 0102 0403 меняем местами младшее и старшее слово: rol eax, 16 eax = 0403 0102 меняем местами байты в младшем слове: xchg ah, al eax = 0403 0201 или юзай bswap ----- В твоем коде rol ax,16 ничего не делает.
Flasher где именно появились левые циферки? ты под отладчиком это дело гонял? или просто запустил, а messagebox'е увидел левые циферки? возьми отладчик и в нем по шагам посмотри, где и что выводится не так!