Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
Voland-666
3 / 3 / 0
Регистрация: 02.05.2009
Сообщений: 63
1

мониторинг памяти

28.11.2010, 11:05. Просмотров 565. Ответов 6
Метки нет (Все метки)

Всем привет! Пишу программу мониторинга памяти на ассемблере
возникло несколько проблем: 1) размеры связанные с файлом подкачки выводятся как отрицательные числа; 2)с помощью таймера пытаюсь каждую секунду обновлять static'и в диалоговом окне , но получается какая то белеберда - некоторые static'и пропадают, другие обновляются с большой скоростью.

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
.386
.model flat,stdcall
option casemap:none
 
include 4.inc
 
.code
 
start:
 
    invoke GetModuleHandle,NULL
    mov    hInstance,eax
    invoke GetCommandLine
    invoke InitCommonControls
    mov     CommandLine,eax
    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
 
    mov     wc.cbSize,sizeof WNDCLASSEX
    mov     wc.style,CS_HREDRAW or CS_VREDRAW
    mov     wc.lpfnWndProc,offset WndProc
    mov     wc.cbClsExtra,NULL
    mov     wc.cbWndExtra,DLGWINDOWEXTRA
    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 CreateDialogParam,hInstance,IDD_DIALOG,NULL,addr WndProc,NULL
    invoke ShowWindow,hWnd,SW_SHOWNORMAL
    invoke UpdateWindow,hWnd
    invoke SetTimer,hWnd,timer,1000,NULL
    .while TRUE
        invoke GetMessage,addr msg,NULL,0,0
      .BREAK .if !eax
        invoke TranslateMessage,addr msg
        invoke DispatchMessage,addr msg
    .endw
    mov     eax,msg.wParam
    invoke KillTimer,hWnd,timer
    ret
 
WinMain endp
 
WndProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
    LOCAL ps:PAINTSTRUCT
    
    mov     eax,uMsg
    .if eax==WM_INITDIALOG
        push    hWin
        pop     hWnd
             
        invoke print,hWin,uMsg,wParam,lParam
                    
    .elseif eax==WM_COMMAND
        ;mov        eax,wParam
        ;and        eax,0FFFFh
    .elseif eax==WM_TIMER
        .if wParam==timer
            invoke InvalidateRect, hWin,NULL,TRUE
        .endif  
    .elseif eax==WM_PAINT
            invoke BeginPaint,hWin, ADDR ps
                call info
                invoke print,hWin,uMsg,wParam,lParam
            invoke EndPaint,hWin, ADDR ps           
    .elseif eax==WM_CLOSE
        invoke DestroyWindow,hWin
    .elseif uMsg==WM_DESTROY
        invoke PostQuitMessage,NULL
    .else
        invoke DefWindowProc,hWin,uMsg,wParam,lParam
        ret
    .endif
    xor    eax,eax
    ret
 
WndProc endp
 
reform proc
    
    mov text,ebx 
    
    invoke wsprintf,addr text, addr t, ebx
        
    mov ecx,15
    lea edi,text
    
    cycle:
    mov bl,[edi]
    mov [esi],bl
    inc edi
    inc esi
    loop cycle
    ret
 
reform endp
 
info proc 
    
    invoke GlobalMemoryStatus,addr mem
    mov ebx,mem.dwMemoryLoad
    lea esi,msg1
    call reform
    
    mov ebx,mem.dwTotalPhys
    lea esi,msg2
    call reform
 
    mov ebx,mem.dwAvailPhys
    lea esi,msg3
    call reform
    
    mov ebx,mem.dwTotalPageFile
    lea esi,msg4
    call reform
 
    mov ebx,mem.dwAvailPageFile
    lea esi,msg5
    call reform
    
    mov ebx,mem.dwTotalVirtual
    lea esi,msg6
    call reform
 
    mov ebx,mem.dwAvailVirtual
    lea esi,msg7
    call reform 
    ret
 
info endp
 
print proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
        call info
            
        invoke CreateWindowEx,WS_EX_CLIENTEDGE, ADDR namest1,NULL,WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or ES_AUTOHSCROLL,185,9,160,20,hWin,static1,hInstance,NULL
        mov  hwndstatic1,eax
        invoke SetWindowText,hwndstatic1,ADDR msg1  
        
        invoke CreateWindowEx,WS_EX_CLIENTEDGE, ADDR namest2,NULL,WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or ES_AUTOHSCROLL,185,39,160,20,hWin,static2,hInstance,NULL
        mov  hwndstatic2,eax
        invoke SetWindowText,hwndstatic2,ADDR msg2  
        
        invoke CreateWindowEx,WS_EX_CLIENTEDGE, ADDR namest3,NULL,WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or ES_AUTOHSCROLL,185,69,160,20,hWin,static3,hInstance,NULL
        mov  hwndstatic3,eax
        invoke SetWindowText,hwndstatic3,ADDR msg3
        
        invoke CreateWindowEx,WS_EX_CLIENTEDGE, ADDR namest4,NULL,WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or ES_AUTOHSCROLL,185,99,160,20,hWin,static4,hInstance,NULL
        mov  hwndstatic4,eax
        invoke SetWindowText,hwndstatic4,ADDR msg4
        
        invoke CreateWindowEx,WS_EX_CLIENTEDGE, ADDR namest5,NULL,WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or ES_AUTOHSCROLL,185,129,160,20,hWin,static5,hInstance,NULL
        mov  hwndstatic5,eax
        invoke SetWindowText,hwndstatic5,ADDR msg5  
        
        invoke CreateWindowEx,WS_EX_CLIENTEDGE, ADDR namest6,NULL,WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or ES_AUTOHSCROLL,185,159,160,20,hWin,static6,hInstance,NULL
        mov  hwndstatic6,eax
        invoke SetWindowText,hwndstatic6,ADDR msg6  
        
        
        invoke CreateWindowEx,WS_EX_CLIENTEDGE, ADDR namest7,NULL,WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or ES_AUTOHSCROLL,185,189,160,20,hWin,static7,hInstance,NULL
        mov  hwndstatic7,eax
        invoke SetWindowText,hwndstatic7,ADDR msg7
    
    ret
 
print endp
 
end start
в архиве весь проект
0
Вложения
Тип файла: rar 4.rar (29.2 Кб, 15 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.11.2010, 11:05
Ответы с готовыми решениями:

На какую область памяти указывает адрес недоступной памяти
Здравствуйте! Написал программу, выводит (из PSP) сегментный адрес первого...

Написать программу, определяющую количество байтов памяти с ненулевыми значениями для первых 256 Кб физической памяти в реальном режиме работы Intel 8
Доброе время суток, моя задача похоже на задачу из этой темы...

В поле дампа памяти вывести на экран содержимое данной памяти [bx+di]
Имеется функция IDIV word ptr . Но предварительно мы записываем значение в...

Мониторинг использования памяти
Подскажите, пожалуйста! Есть некая программа в VB6. Можно ли средствами VB6...

Мониторинг загружености процессора и памяти
Подозреваю что моя программа загружает процессор на 100%. Нужен...

6
Goodwin98
2522 / 818 / 10
Регистрация: 31.05.2009
Сообщений: 1,672
28.11.2010, 11:54 2
Цитата Сообщение от Voland-666 Посмотреть сообщение
с помощью таймера пытаюсь каждую секунду обновлять static'и в диалоговом окне , но получается какая то белеберда - некоторые static'и пропадают, другие обновляются с большой скоростью.
Вы их каждую секунду не обновляете, а создаете заново.
Цитата Сообщение от Voland-666 Посмотреть сообщение
размеры связанные с файлом подкачки выводятся как отрицательные числа;
попробуйте изменить
Assembler
1
t db "%d",0
на
Assembler
1
t db "%u",0
Т.е. использовать беззнаковые числа
1
Voland-666
3 / 3 / 0
Регистрация: 02.05.2009
Сообщений: 63
28.11.2010, 12:40  [ТС] 3
спасибо, подправил код, все проблемы исчезли.
появилась новая - первые два static не заполняются(а остальные заполняются и обновляются)

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
.386
.model flat,stdcall
option casemap:none
 
include 4.inc
 
.code
 
start:
 
    invoke GetModuleHandle,NULL
    mov    hInstance,eax
    invoke GetCommandLine
    invoke InitCommonControls
    mov     CommandLine,eax
    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
 
    mov     wc.cbSize,sizeof WNDCLASSEX
    mov     wc.style,CS_HREDRAW or CS_VREDRAW
    mov     wc.lpfnWndProc,offset WndProc
    mov     wc.cbClsExtra,NULL
    mov     wc.cbWndExtra,DLGWINDOWEXTRA
    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 CreateDialogParam,hInstance,IDD_DIALOG,NULL,addr WndProc,NULL
    invoke ShowWindow,hWnd,SW_SHOWNORMAL
    invoke UpdateWindow,hWnd
    invoke SetTimer,hWnd,timer,1000,NULL
    .while TRUE
        invoke GetMessage,addr msg,NULL,0,0
      .BREAK .if !eax
        invoke TranslateMessage,addr msg
        invoke DispatchMessage,addr msg
    .endw
    mov     eax,msg.wParam
    invoke KillTimer,hWnd,timer
    ret
 
WinMain endp
 
WndProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
    LOCAL ps:PAINTSTRUCT
    LOCAL rect:RECT
    
;------rectangle for repaint-----   
    mov ebx,20
    mov rect.top,ebx    
    mov ebx,180
    mov rect.left,ebx   
    mov ebx,280
    mov rect.bottom,ebx 
    mov ebx,350
    mov rect.right,ebx
 
;----------main---------------- 
    mov     eax,uMsg
    .if eax==WM_INITDIALOG
        push    hWin
        pop     hWnd
        
        invoke CreateWindowEx,WS_EX_CLIENTEDGE, ADDR namest1,NULL,WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or ES_AUTOHSCROLL,185,9,160,20,hWin,static1,hInstance,NULL
        mov  hwndstatic1,eax
        
        invoke CreateWindowEx,WS_EX_CLIENTEDGE, ADDR namest2,NULL,WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or ES_AUTOHSCROLL,185,39,160,20,hWin,static2,hInstance,NULL
        mov  hwndstatic2,eax
        
        invoke CreateWindowEx,WS_EX_CLIENTEDGE, ADDR namest3,NULL,WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or ES_AUTOHSCROLL,185,69,160,20,hWin,static3,hInstance,NULL
        mov  hwndstatic3,eax
        
        invoke CreateWindowEx,WS_EX_CLIENTEDGE, ADDR namest4,NULL,WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or ES_AUTOHSCROLL,185,99,160,20,hWin,static4,hInstance,NULL
        mov  hwndstatic4,eax
        
        invoke CreateWindowEx,WS_EX_CLIENTEDGE, ADDR namest5,NULL,WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or ES_AUTOHSCROLL,185,129,160,20,hWin,static5,hInstance,NULL
        mov  hwndstatic5,eax
        
        invoke CreateWindowEx,WS_EX_CLIENTEDGE, ADDR namest6,NULL,WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or ES_AUTOHSCROLL,185,159,160,20,hWin,static6,hInstance,NULL
        mov  hwndstatic6,eax
        
        invoke CreateWindowEx,WS_EX_CLIENTEDGE, ADDR namest7,NULL,WS_CHILD or WS_VISIBLE or WS_BORDER or ES_LEFT or ES_AUTOHSCROLL,185,189,160,20,hWin,static7,hInstance,NULL
        mov  hwndstatic7,eax
             
        call print                  
    .elseif eax==WM_COMMAND
        ;mov        eax,wParam
        ;and        eax,0FFFFh
    .elseif eax==WM_TIMER
        .if wParam==timer
            invoke InvalidateRect, hWin,addr rect,TRUE
        .endif  
    .elseif eax==WM_PAINT
            invoke BeginPaint,hWin, ADDR ps
                call print
            invoke EndPaint,hWin, ADDR ps           
    .elseif eax==WM_CLOSE
        invoke DestroyWindow,hWin
    .elseif uMsg==WM_DESTROY
        invoke PostQuitMessage,NULL
    .else
        invoke DefWindowProc,hWin,uMsg,wParam,lParam
        ret
    .endif
    xor    eax,eax
    ret
 
WndProc endp
 
reform proc
    
    mov text,ebx 
    
    invoke wsprintf,addr text, addr t, ebx
        
    mov ecx,15
    lea edi,text
    
    cycle:
    mov bl,[edi]
    mov [esi],bl
    inc edi
    inc esi
    loop cycle
    ret
 
reform endp
 
info proc 
    
    invoke GlobalMemoryStatus,addr mem
    mov ebx,mem.dwMemoryLoad
    lea esi,msg1
    call reform
    
    mov ebx,mem.dwTotalPhys
    lea esi,msg2
    call reform
 
    mov ebx,mem.dwAvailPhys
    lea esi,msg3
    call reform
    
    mov ebx,mem.dwTotalPageFile
    lea esi,msg4
    call reform
 
    mov ebx,mem.dwAvailPageFile
    lea esi,msg5
    call reform
    
    mov ebx,mem.dwTotalVirtual
    lea esi,msg6
    call reform
 
    mov ebx,mem.dwAvailVirtual
    lea esi,msg7
    call reform 
    ret
 
info endp
 
print proc 
        call info
                    
        invoke SetWindowText,hwndstatic1,ADDR msg1  
        
        invoke SetWindowText,hwndstatic2,ADDR msg2  
        
        invoke SetWindowText,hwndstatic3,ADDR msg3
        
        invoke SetWindowText,hwndstatic4,ADDR msg4
        
        invoke SetWindowText,hwndstatic5,ADDR msg5  
        
        invoke SetWindowText,hwndstatic6,ADDR msg6  
        
        invoke SetWindowText,hwndstatic7,ADDR msg7  
    ret
 
print endp
 
end start
0
Goodwin98
2522 / 818 / 10
Регистрация: 31.05.2009
Сообщений: 1,672
28.11.2010, 14:07 4
Смотрите ошибку около перевода числа в строку. Там у вас хендл статика затирается строкой. И кстати не забывайте пользоваться отладчиком.
0
Voland-666
3 / 3 / 0
Регистрация: 02.05.2009
Сообщений: 63
28.11.2010, 19:37  [ТС] 5
а как это исправить?
0
Goodwin98
2522 / 818 / 10
Регистрация: 31.05.2009
Сообщений: 1,672
28.11.2010, 20:25 6
>_<
Assembler
1
2
3
        mov text,ebx 
        
        invoke wsprintf,addr text, addr t, ebx
Зачем вы сохраняете число, я не понимаю, но я вполне понимаю, что text НЕ должен иметь размер в 4 байта (DWORD), а должен поместить в себя всю строку.
1
Voland-666
3 / 3 / 0
Регистрация: 02.05.2009
Сообщений: 63
28.11.2010, 20:54  [ТС] 7
переписал процедуру, и объявил строку text как text db 50 dup(0)
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
reform proc
    
    invoke wsprintf,addr text, addr t, ebx
        
    mov ecx,15
    lea edi,text
    
    cycle:
    mov bl,[edi]
    mov [esi],bl
    inc edi
    inc esi
    loop cycle
    ret
 
reform endp
ОГРОМНОЕ спасибо за помощь=)
0
28.11.2010, 20:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.11.2010, 20:54

Мониторинг оперативной памяти - Delphi XE7
Доброго времени суток! У меня такая проблема, в интернете наткнулся на статью,...

Как лучше всего осуществлять мониторинг памяти?
Господа, не подскажите ли (навеяно предыдущим вопросом ) - как наилучшим...

Мониторинг объёма памяти с использованием команды TASKLIST
Всем, доброго времени суток. Есть задача удаленно, через терминал, мониторить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru