asm i C++

10 отговора 673 прегледа
#1

asm i C++

nqkoi moje li da mi kaje kakvo pravi asm koda ili o6te po dobre kakuv e ekvivalenta mu v C++ , blagodarq predvaritelno
-----------------------------------------------------------------------------------------------


s = WSASocket( AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, 0 );
bind( s, (LPSOCKADDR)&srv, sizeof( srv ) );
listen( s, 5 );

__asm
{
push ebx
mov ebx, s
}
s = accept( s, NULL, NULL );
__asm
{
push ebx
call DWORD PTR [closesocket]
pop ebx
}

Отговор
в отговор на smile #2

Re: asm i C++

доста извратен начин да не ползваш една временна променлива...

s = WSASocket( AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, 0 );
bind( s, (LPSOCKADDR)&srv, sizeof( srv ) );
listen( s, 5 );

SOCKET s1 = s;
s = accept( s, NULL, NULL );

closesocket(s1);

===

а до колкото разбирам, почва да слуша, приема точно една конекция, и спира да слуша...

Отговор
в отговор на Questor #3

Re: asm i C++

da izvrateno e :)) mersi pomogna mi mnogo

Отговор
в отговор на smile #4

Не е извратено, а изтънчено! *DELETED*

Мнението е изтрито от jcpnx
Отговор
в отговор на Jc{P}nX #5

Незнам дали е извратено или изтънчено!

но asm кода прави това:

int newsock = accept(sock,0,0);
closesocket(sock);

мерси , помогнахте ми много

Отговор
в отговор на Jc{P}nX #6

Re: Не е извратено, а изтънчено!

ами можещ да си подадеш оставката като практикуващ security expert...

направих си труда да потърся в google, и самия автор на exploita пише следното:
[линк]

" i just didnt want to use an extra variable
basically, it stores the server socket in ebx, then once it has accepted a connection, closes the server socket"

така че, ти си практикуващ празноприказкоговоряч(tm) според мен.

Отговор
в отговор на Questor #7

Напълно си прав!

Няма да си подам оставката, а ще продължа да се уча.
Аз обичам да греша, кефя се, чувствам се жив и пулсиращ така...и продължавам да осъзнавам. Обичам да правя грешки, наистина :)

[линк]
Отговор
в отговор на Jc{P}nX #8

Re: Напълно си прав!

чувствам се жив и пулсиращ така...и продължавам да осъзнавам
huh?

Отговор
в отговор на Jc{P}nX #9

Re: Напълно си прав!

lichi si che si lamer ...

Отговор
в отговор на __asm__ #10

Интересно

Интересно е, че тоя явно си е дал зор да погледне кода на accept()

По принцип ebx не е от регистрите, който се запазва задължително във функциите (също както е eax), т.е. след излизане от функцията няма гаранция, че в ebx ще има същата стойност, каквато е имало при влизането.

В началото на accept() обаче има push ebx, така че са му вързани гащите с това. Друг е въпроса, че MS при първия ServicePack могат да променят това без функцията да се държи по-различно, т.е. да променят ebx в тялото на accept(). Тогава със сигурност тоя трик няма да сработи.

Отговор
в отговор на dido #11

Re: Интересно

По принцип ebx не е от регистрите, който се запазва задължително във функциите

Не е вярно това.
Уф що ме карате на стари години да си припомням асм....

In addition, by using EBX, ESI or EDI in inline assembly code, you force the compiler to save and restore those registers in the function prologue and epilogue

---

а като за финал тва е толкова тъпо, та дрънка - не съм гледал, ама сигурно генерирания код от корумпилатора е съшия, ако не и по-добър...

Редактирано от Questor на

Отговор