• XSS.stack #1 – первый литературный журнал от юзеров форума

неизвестаня ошибка!!!

Статус
Закрыто для дальнейших ответов.

xqwerx

RAM
Пользователь
Регистрация
07.01.2006
Сообщения
137
Реакции
0
Прозьба асм кодерам, посоветовать...
Код:
.386
.model  flat, stdcall
option  casemap:none
 
	include windows.inc
	include user32.inc
	include kernel32.inc
	include masm32.inc
	include comctl32.inc
	include gdi32.inc
	include advapi32.inc

	includelib user32.lib
	includelib kernel32.lib
	includelib masm32.lib
	includelib gdi32.lib
	includelib comctl32.lib
	includelib advapi32.lib
	includelib shlwapi.lib
	includelib shell32.lib
	includelib comdlg32.lib

.const
	IDD_DIALOG1	equ	1

	IDM_EXIT        equ  101
	IDM_BUTTON1	equ	102

	IDC_EXIT	equ	201
	IDC_BUTTON1	equ	202

.data
szSuccess	db "Hello Word",0
info  	db "info",0

.data?
Hkey  dd ?
hInstance	dd ?

.code
DlgProc PROC hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
	.IF uMsg==WM_INITDIALOG
  invoke  LoadIcon, hInstance, 1
                invoke  SendMessage, hWnd, WM_SETICON, 1, eax
	.ELSEIF uMsg==WM_CLOSE
  invoke SendMessage,hWnd,WM_COMMAND,IDM_EXIT,0
	.ELSEIF uMsg == WM_COMMAND
        mov eax,wParam
           .IF lParam==0
               .IF ax==IDM_EXIT
                    invoke EndDialog, hWnd,NULL
  .ELSEIF ax==IDM_BUTTON1
  	invoke MessageBoxA ,0,ADDR szSuccess,ADDR info, MB_ICONINFORMATION  	
               .ENDIF
           .ELSE
               mov edx,wParam
               shr edx,16
               .if dx==BN_CLICKED
                	.IF ax==IDC_EXIT
                          	invoke SendMessage,hWnd,WM_COMMAND,IDM_EXIT,0
  	.ELSEIF ax==IDC_BUTTON1
    invoke SendMessage,hWnd,WM_COMMAND,IDM_BUTTON1,0
                   .ENDIF
               .ENDIF
           .ENDIF
       .ENDIF
	xor     eax, eax
        ret
DlgProc ENDP

start:
        invoke GetModuleHandle, NULL
      	mov    hInstance,eax
        invoke DialogBoxParam, hInstance, IDD_DIALOG1 ,NULL, addr DlgProc, NULL
	invoke ExitProcess,eax

end start
Где же ошибка, у меня на winXP sp2 не хочет запускаться приложение откомпиленное, но у соседа и других друзей все рулит!

файл ресурсов таков
Код:
#define IDD_DIALOG1	1
#define IDM_EXIT        101
#define IDC_EXIT	201
#define IDC_BUTTON1	202

1 ICON "mainicon.ico"
1 24 "manifest.txt"

IDD_DIALOG1 DIALOG 43, 37, 237, 98
EXSTYLE WS_EX_DLGMODALFRAME | WS_EX_APPWINDOW
STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX
CAPTION "Asm Dialog form"
FONT 8, "MS Sans Serif"
{
 CONTROL "Exit", IDC_EXIT, "BUTTON", BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 184, 4, 50, 14
 CONTROL "Start", IDC_BUTTON1, "button", BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 184, 20, 50, 14, 0
 
}
 
Че-то не могу ничего найти необычного на глаз.

Прикольнуло - нафига столько либ импорта подключать и masm32.lib нафига те?
они конечно вреда не нанесут, но зачем лишние движения? вполне достаточно kernel32.lib и user32.lib.

В пакете масм32 есть прикольная утилитка, которая поможет определить длл, которая экспортирует нужную функцию - liblist.exe.

а что значит - "не хочет запускать"? поконкретнее...
 
Компилит без ошибок. при запуске файла - чуть повисит в памяти и отрубается, графическое окно - функцией DialogBoxParam не создается, функция возвращает 0xFFFFFFFF - т.е. ошибку!

Masm32 - переустанавливал, версия 9.0
Пробывал откомпиленное приложение на других компах - тоже самое!

Единственное что заметил, если убрать из файла ресурсов:
Код:
CONTROL "Exit", IDC_EXIT, "BUTTON", BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 184, 4, 50, 14  
CONTROL "Start", IDC_BUTTON1, "button", BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 184, 20, 50, 14, 0

Компилится и запускается нормально, также работает если пристегнуть не CONTROL ,а MENU какое-небудь.
Непонимаю что не так!

P.S. за liblist.exe - респект
 
Я думаю все прояснит GetLastError после DialogBoxParam и посмотреть что он возвращает в eax. По коду ошибки потом определи ее текстовое описание.

Скомпили, проверил - все работает. Единственное, что сделал не так это убрал вот это:
1 ICON "mainicon.ico"
1 24 "manifest.txt"
 
Dude03 - ок спасибо, что откликнулся!!!

Уж и не знаю что было. Помогло вот что:
Код:
start:         
	invoke GetModuleHandle, NULL        	
         mov    hInstance,eax
    	
         mov     iccex.dwICC, ICC_WIN95_CLASSES          	
         mov     iccex.dwSize, sizeof INITCOMMONCONTROLSEX 
         invoke  InitCommonControlsEx, addr iccex 

         invoke DialogBoxParam, hInstance, IDD_DIALOG1 ,0, ADDR DlgProc,0
  	invoke ExitProcess,eax
 end start

InitCommonControlsEx - помогла правильно инициализировать и отрисовать в XP контролы...

P.S. если убрать манифест 1 24 "manifest.txt" - тоже все рулит даже и без InitCommonControlsEx - вот как бывает!!!
 
Хм... Если верить Iczelion'у (и дизассемблеру), вызов InitCommonControls не обязателен, достаточно ее присутствия в таблице импорта - это просто заглушка. Другое дело InitCommonControlsEx, однако ее все равно не имеет смысла юзать, если не инициализировать INITCOMMONCONTROLSEX
 
Хм... Если верить Iczelion'у (и дизассемблеру), вызов InitCommonControls не обязателен, достаточно ее присутствия в таблице импорта - это просто заглушка. Другое дело InitCommonControlsEx, однако ее все равно не имеет смысла юзать, если не инициализировать INITCOMMONCONTROLSEX
:lol2: а как по твоему будет "добавлена в раздел импорта" comctl32.dll, если в коде нет ниодного вызова функций из этой библиотека, если не вызывать InitCommonControls(или какую-нибудь другую функцию из этой библиотеки)?
P.S. если убрать манифест 1 24 "manifest.txt" - тоже все рулит даже и без InitCommonControlsEx - вот как бывает!!!
Гыг, никогда не работал с манифестами, поэтому и не знал, что они требуют comctl32.dll.
 
а как по твоему будет "добавлена в раздел импорта" comctl32.dll, если в коде нет ниодного вызова функций из этой библиотека, если не вызывать InitCommonControls(или какую-нибудь другую функцию из этой библиотеки)?
Тю... хотя бы так:
Код:
virtual
        call        [InitCommonControls]
end   virtual
 
Хммм, ты точно сами в одной теме?=) Мы про masm=) ты мб про fasm :)
 
... InitCommonControlsEx, однако ее все равно не имеет смысла юзать, если не инициализировать INITCOMMONCONTROLSEX

Да прога нормально запускается и отрисовывается без InitCommonControlsEx и инициализации INITCOMMONCONTROLSEX , но отображение "контролов" старое как в win98, а я использую манифеста XP для отображения в стиле XP (болеее плавном и красивом), а это почему-то требует InitCommonControlsEx или просто будет "добавлена в раздел импорта" comctl32.dll ...

P.S. ХЗ что именно помогло!
 
это однозначно масм
А я о чем=)
я говорю о virtual & end virtual - это fasm. Я так думаю. Посмотрим, что отпишет Mescalito.
 
я говорю о virtual & end virtual - это fasm. Я так думаю. Посмотрим, что отпишет Mescalito
Ага, fasm. Им пользуюсь - на нем написал автоматом. Честно говоря, даже и не помню, можно ли что-то подобное в masm'е делать
 
Ок - всем спасибо, что обратили внимание на прозьбу и помогли советами.
Проблема исчерпана! :D
 
Статус
Закрыто для дальнейших ответов.
Верх