Вот код: Code: .386 .model flat,stdcall option casemap:none include C:\masm32\include\windows.inc include C:\masm32\include\user32.inc include C:\masm32\include\kernel32.inc include C:\masm32\include\gdi32.inc include C:\masm32\include\comdlg32.inc include C:\masm32\include\shell32.inc include C:\masm32\include\wsock32.inc includelib C:\masm32\lib\wsock32.lib includelib C:\masm32\lib\user32.lib includelib C:\masm32\lib\kernel32.lib includelib C:\masm32\lib\gdi32.lib includelib C:\masm32\lib\comdlg32.lib includelib C:\masm32\lib\shell32.lib WinMain proto :DWORD,:DWORD,:DWORD,:DWORD RGB macro red,green,blue xor eax,eax mov ah,blue shl eax,8 mov ah,green mov al,red endm szText MACRO Name,Text:VARARG LOCAL lbl jmp lbl Name db Text,0 lbl: ENDM .const memo1ID equ 1 edit2ID equ 3 edit1ID equ 2 button1ID equ 1 .data? hFontN HWND ? hwndmemo1 HWND ? hwndedit2 HWND ? hwndedit1 HWND ? hwndbutton1 HWND ? hInstance HINSTANCE ? CommandLine LPSTR ? .data FontName db "MS Sans Serif",0 lf LOGFONT <> Textmemo1 db "'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''",0 Textedit2 db '//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////',0 Textedit1 db 0,0 Textbutton1 db "SEND",0 ;_______________ ClassName db "MASM Builder",0 BtnClName db "button",0 StatClName db "static",0 EditClName db "edit",0 LboxClName db "listbox",0 CboxClName db "combobox",0 ReditClName db "richedit",0 RichEditLib db "riched32.dll",0 Caption db "Form",0 ;_______________ wsadata WSADATA <> mCaption db "Error! Suxx!", 0 mText1 db "Error WSAStartUp", 0 mText2 db "Error Connect", 0 mText3 db "Error Send", 0 hSock DWORD ? hSock2 dd ? sin sockaddr_in <> sPort DWORD 5555 sIP db '255.255.255.255',0 ; .code start: invoke GetModuleHandle,NULL mov hInstance,eax invoke GetCommandLine invoke WinMain,hInstance,NULL,CommandLine,SW_SHOWDEFAULT invoke ExitProcess,eax WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD LOCAL wc :WNDCLASSEX LOCAL msg :MSG LOCAL hwnd :HWND mov wc.cbSize,SIZEOF WNDCLASSEX mov wc.style,CS_BYTEALIGNCLIENT mov wc.lpfnWndProc,offset WndProc mov wc.cbClsExtra,NULL mov wc.cbWndExtra,NULL push hInst pop wc.hInstance mov wc.hbrBackground,COLOR_BTNFACE+1 mov wc.lpszClassName,OFFSET ClassName invoke LoadIcon,NULL,IDI_APPLICATION mov wc.hIcon,eax mov wc.hIconSm,eax invoke LoadCursor,NULL,IDC_ARROW mov wc.hCursor,eax invoke RegisterClassEx,addr wc invoke CreateWindowEx,0,ADDR ClassName,ADDR Caption,WS_SYSMENU or WS_MINIMIZEBOX,603,334,565,302,0,0,hInst,0 mov hwnd,eax INVOKE ShowWindow,hwnd,SW_SHOWNORMAL INVOKE UpdateWindow,hwnd .WHILE TRUE invoke GetMessage,ADDR msg,0,0,0 .BREAK .IF (!eax) invoke TranslateMessage,ADDR msg invoke DispatchMessage,ADDR msg .ENDW mov eax,msg.wParam ret WinMain endp WndProc proc hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM .IF uMsg == WM_DESTROY invoke PostQuitMessage,NULL .ELSEIF uMsg == WM_CREATE invoke lstrcpy,addr lf.lfFaceName,addr FontName mov lf.lfHeight,-11 mov lf.lfWeight,500 invoke CreateFontIndirect,addr lf mov hFontN,eax invoke CreateWindowEx,WS_EX_CLIENTEDGE,ADDR EditClName,ADDR Textmemo1,WS_CHILD or ES_LEFT or ES_AUTOHSCROLL or WS_VISIBLE,0,64,561,209,hWnd,memo1ID,hInstance,0 mov hwndmemo1,eax invoke SendMessage,hwndmemo1,WM_SETFONT,hFontN,1 invoke CreateWindowEx,WS_EX_CLIENTEDGE,ADDR EditClName,ADDR Textedit2,WS_CHILD or ES_LEFT or ES_AUTOHSCROLL or WS_VISIBLE,96,32,457,21,hWnd,edit2ID,hInstance,0 mov hwndedit2,eax invoke SendMessage,hwndedit2,WM_SETFONT,hFontN,1 invoke CreateWindowEx,WS_EX_CLIENTEDGE,ADDR EditClName,ADDR sIP,WS_CHILD or ES_LEFT or ES_AUTOHSCROLL or WS_VISIBLE,96,8,121,21,hWnd,edit1ID,hInstance,0 mov hwndedit1,eax invoke SendMessage,hwndedit1,WM_SETFONT,hFontN,1 invoke CreateWindowEx,0,ADDR BtnClName,ADDR Textbutton1,WS_CHILD or BS_DEFPUSHBUTTON or WS_VISIBLE,8,8,75,49,hWnd,button1ID,hInstance,0 mov hwndbutton1,eax invoke SendMessage,hwndbutton1,WM_SETFONT,hFontN,1 invoke CreateWindowEx,WS_EX_CLIENTEDGE,ADDR EditClName,ADDR sIP,WS_CHILD or ES_LEFT or ES_AUTOHSCROLL or WS_VISIBLE,96,8,121,21,hWnd,edit1ID,hInstance,0 .ELSEIF uMsg == WM_COMMAND mov eax,wParam .IF lParam != 0 .IF ax == button1ID shr eax,16 .IF ax == BN_CLICKED invoke GetWindowText,hwndedit2,addr Textedit2,150 invoke GetWindowText,hwndedit1,addr sIP,15 invoke WSAStartup, 101h, ADDR wsadata .if eax!=NULL invoke MessageBoxA, 0, ADDR mText1, ADDR mCaption, 0 jmp Quit .endif invoke socket, AF_INET, SOCK_STREAM, 0 .if eax==INVALID_SOCKET invoke WSAGetLastError jmp Quit .endif mov hSock, eax invoke htons, sPort mov sin.sin_port, ax invoke inet_addr, ADDR sIP mov sin.sin_addr, eax mov sin.sin_family, AF_INET mov sin.sin_zero,8 invoke connect, hSock, ADDR sin, sizeof sin .if eax==SOCKET_ERROR invoke MessageBoxA, 0, ADDR mText2, ADDR mCaption, 0 jmp Quit .endif mov hSock2, eax invoke send, hSock, ADDR Textedit2, sizeof Textedit2,MSG_DONTROUTE .if eax==SOCKET_ERROR invoke MessageBoxA, 0, ADDR mText3, ADDR mCaption, 0 jmp Quit .endif .if byte ptr Textedit2=="*" invoke recv,hSock,addr Textmemo1,1024,0 invoke SetWindowText,hwndmemo1,addr Textmemo1 jmp Quit .endif Quit: invoke closesocket, hSock invoke WSACleanup .ENDIF; .ENDIF; .ENDIF; .ELSE invoke DefWindowProc,hWnd,uMsg,wParam,lParam ret .ENDIF xor eax,eax ret WndProc endp end start Почему не получается вывести в memo?
у меня ml.exe ругнулся на эту строку: Code: ;Textmemo1 db "'''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''",0 Я заменил ее на Code: Textmemo1 db 256 dup("'"),0 p.s. Memo я так и не увидал. У тебя два эдитбокса. Мемо - это эдитбокс с ES_MULTILINE, т.е. Code: invoke CreateWindowEx,WS_EX_CLIENTEDGE,ADDR EditClName,ADDR Textmemo1,[B][U][COLOR=Green]ES_MULTILINE[/COLOR][/U][/B] or WS_CHILD or ES_LEFT or ES_AUTOHSCROLL or WS_VISIBLE,0,64,561,209,hWnd,memo1ID,hInstance,0
Еще вопрос как на MASM перехватить API функции ? На Delphi знаю. Может у кого нить случайно есть пример. Вот пример перехвата функции ZwOpenProcess на Delphi http://mysystem.ucoz.ru/publ/iack/perekhvat_funkcii_zwopenprocess_na_delphi_7/2-1-0-28
Я перехватил функцию Send из ws2_32.dll. Работает отлично. Сейчас хочу перехватить ZwCreateProcess из ntdll.dll но не знаю прототип функции и какие структуры нужны. Может кто нить подскажет ?
MASM, http://undocumented.ntinternals.net/UserMode/Undocumented%20Functions/NT%20Objects/Process/NtCreateProcess.html
Очередной раз, зализая в PE, сталкиваюсь с полем ForwarderChain в дескрипторе импорта. В описание МС сказано, что по дефолту значение -1, но многие линкеры пишут туда 0. В гугле описания вообще 0, кроме как то что это некий индекс. Какое правильно значение писать в это поле и как/когда оно используется?
Да, читал я васм, мс, криса. Толи индекс, то ли адрес, то ли фиг знает что, а как влияет? Ясно что связано с импортом, только вот каким боком никто не знает...
Если тебе так не дает покоя этот вопрос, то проведи собственное расследование и поделись с общественностью, чтоб все знали, то это и как влияет, и каким боком.
Тебе уже дважды написали, что загрузчик это поле тупо игнорирует. Или ты собрался делать PE под какие-то компьютеры Alpha, которые потенциально могут это поле юзать?
Оставь васм и криса на потом. Ознакомься хотя бы с шестнадцатеричной системой счисления и прямым, обратным и дополнительным кодом.
кто знает как умножить два 64 разрядных целых беззнаковых числа???? MMX SSE SSE2??? искал долго ничего конкретного не нашел... Зарание Благодарю.
Да причём тут загрузчик? Я хотел знать назначение и способ использования этого поля, пусть хоть и юзается на Alpha, MIPS, ARM и других системах