[ Assembler ] — начинающим: задаем вопросы

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by !_filin_!, 25 May 2007.

  1. MTV

    MTV New Member

    Joined:
    16 Feb 2011
    Messages:
    180
    Likes Received:
    2
    Reputations:
    0
    Вот код:
    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?
     
  2. becensed

    becensed Member

    Joined:
    2 Dec 2009
    Messages:
    84
    Likes Received:
    24
    Reputations:
    1
    у меня 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
     
  3. MTV

    MTV New Member

    Joined:
    16 Feb 2011
    Messages:
    180
    Likes Received:
    2
    Reputations:
    0
    Все равно не изменяется.
     
  4. becensed

    becensed Member

    Joined:
    2 Dec 2009
    Messages:
    84
    Likes Received:
    24
    Reputations:
    1
    а что должно изменяться?
     
  5. MASM

    MASM New Member

    Joined:
    8 Jun 2011
    Messages:
    22
    Likes Received:
    0
    Reputations:
    0
    Еще вопрос как на MASM перехватить API функции ? На Delphi знаю.
    Может у кого нить случайно есть пример. Вот пример перехвата функции ZwOpenProcess
    на Delphi http://mysystem.ucoz.ru/publ/iack/perekhvat_funkcii_zwopenprocess_na_delphi_7/2-1-0-28
     
  6. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    http://kaimi.ru/2010/08/your-own-injector/
     
    1 person likes this.
  7. MASM

    MASM New Member

    Joined:
    8 Jun 2011
    Messages:
    22
    Likes Received:
    0
    Reputations:
    0
    C первого раза ниче не понял но буду разбираться. Спс
     
  8. MASM

    MASM New Member

    Joined:
    8 Jun 2011
    Messages:
    22
    Likes Received:
    0
    Reputations:
    0
    Я перехватил функцию Send из ws2_32.dll. Работает отлично. Сейчас хочу перехватить
    ZwCreateProcess из ntdll.dll но не знаю прототип функции и какие структуры нужны.
    Может кто нить подскажет ?
     
  9. Sams

    Sams Member

    Joined:
    18 Apr 2009
    Messages:
    247
    Likes Received:
    70
    Reputations:
    17
    MASM,
    http://undocumented.ntinternals.net/UserMode/Undocumented%20Functions/NT%20Objects/Process/NtCreateProcess.html
     
  10. FireFenix

    FireFenix Elder - Старейшина

    Joined:
    3 Jun 2009
    Messages:
    390
    Likes Received:
    115
    Reputations:
    23
    Очередной раз, зализая в PE, сталкиваюсь с полем ForwarderChain в дескрипторе импорта.
    В описание МС сказано, что по дефолту значение -1, но многие линкеры пишут туда 0.
    В гугле описания вообще 0, кроме как то что это некий индекс.

    Какое правильно значение писать в это поле и как/когда оно используется?
     
  11. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Криса Касперски надо читать:
     
  12. FireFenix

    FireFenix Elder - Старейшина

    Joined:
    3 Jun 2009
    Messages:
    390
    Likes Received:
    115
    Reputations:
    23
    Спасибо кеп, но ты ничего нового не написал, что я озвучил в вопросе
     
  13. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    А по-моему тебе стоит научиться читать.
     
  14. Sams

    Sams Member

    Joined:
    18 Apr 2009
    Messages:
    247
    Likes Received:
    70
    Reputations:
    17
    FireFenix,
    http://wasm.ru/article.php?article=green2red02#_Toc100906491
     
  15. FireFenix

    FireFenix Elder - Старейшина

    Joined:
    3 Jun 2009
    Messages:
    390
    Likes Received:
    115
    Reputations:
    23
    Да, читал я васм, мс, криса.
    Толи индекс, то ли адрес, то ли фиг знает что, а как влияет?
    Ясно что связано с импортом, только вот каким боком никто не знает...
     
  16. becensed

    becensed Member

    Joined:
    2 Dec 2009
    Messages:
    84
    Likes Received:
    24
    Reputations:
    1
    Если тебе так не дает покоя этот вопрос, то проведи собственное расследование и поделись с общественностью, чтоб все знали, то это и как влияет, и каким боком.
     
  17. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Тебе уже дважды написали, что загрузчик это поле тупо игнорирует. Или ты собрался делать PE под какие-то компьютеры Alpha, которые потенциально могут это поле юзать?
     
  18. tim-oleksii

    tim-oleksii Member

    Joined:
    14 Mar 2011
    Messages:
    199
    Likes Received:
    10
    Reputations:
    0
    Оставь васм и криса на потом. Ознакомься хотя бы с шестнадцатеричной системой счисления и прямым, обратным и дополнительным кодом.
     
    #1098 tim-oleksii, 9 Aug 2011
    Last edited: 9 Aug 2011
  19. KIR@PRO

    KIR@PRO from Exception

    Joined:
    26 Dec 2007
    Messages:
    826
    Likes Received:
    291
    Reputations:
    359
    кто знает как умножить два 64 разрядных целых беззнаковых числа???? MMX SSE SSE2??? искал долго ничего конкретного не нашел...



    Зарание Благодарю.;)
     
    _________________________
    #1099 KIR@PRO, 9 Aug 2011
    Last edited: 9 Aug 2011
  20. FireFenix

    FireFenix Elder - Старейшина

    Joined:
    3 Jun 2009
    Messages:
    390
    Likes Received:
    115
    Reputations:
    23
    Да причём тут загрузчик?
    Я хотел знать назначение и способ использования этого поля, пусть хоть и юзается на Alpha, MIPS, ARM и других системах