Как получить список процессов?

Тема в разделе "WASM.ASSEMBLER", создана пользователем 777user777, 1 фев 2012.

  1. 777user777

    777user777 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2010
    Сообщения:
    109
    Как можно на асме получить список процессов? пробовал с помощью Process32First и Process32Next,но выходит ошибка
    Код (Text):
    1. main.asm(701) : error A2006: undefined symbol : Process32First
    2. main.asm(711) : error A2006: undefined symbol : Process32Next
     
  2. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.576
    Видимо, у вас новый масм? В таком случае пропишите вручную
    Process32First PROTO :lol: WORD,:lol: WORD
     
  3. 777user777

    777user777 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2010
    Сообщения:
    109
    теперь выходит это:
    Код (Text):
    1. main.obj : error LNK2001: unresolved external symbol _Process32First@8
     
  4. Incidence

    Incidence New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2011
    Сообщения:
    236
    Адрес:
    Kiev, UA
    А почему не EnumProcesses() ?
     
  5. 777user777

    777user777 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2010
    Сообщения:
    109
    она же вроде только id процессов получает?
     
  6. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    да lib нет у Вас.
     
  7. 777user777

    777user777 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2010
    Сообщения:
    109
    какой именно? у меня все lib есть
     
  8. pashe4ka13

    pashe4ka13 New Member

    Публикаций:
    0
    Регистрация:
    4 окт 2010
    Сообщения:
    263
    способов получить список очень много, я как то так делал подобие таскменеджера, вот часть кода с выводом процессов поочередно в MessageBox
    Код (Text):
    1. format PE GUI 4.0
    2. entry start
    3. include 'G:\fasm\INCLUDE\win32a.inc'
    4. include 'G:\FASM\INCLUDE\MACRO\STRUCT.INC'
    5. macro   assign  reg, struct
    6. {
    7.     virtual at reg
    8.         .#reg struct
    9.     end virtual
    10. }
    11. section '.data' data readable writeable
    12. struct CLIENT_ID
    13.     UniqueProcess                  dd    ?
    14.     UniqueThread                   dd    ?
    15. ends
    16. struct SYSTEM_THREADS
    17.     KernelTime                       db      8 dup(?)
    18.     UserTime                         db      8 dup(?)
    19.     CreateTime                      db      8 dup(?)
    20.     WaitTime                         dd  ?          
    21.     StartAddress                    dd  ?
    22.     ClientId                    CLIENT_ID       <>
    23.     Priority                            dd   ?
    24.     BasePriority                      dd   ?
    25.     ContextSwitchCount          dd  ?
    26.     State                              dd  ?
    27.     WaitReason                      dd  ?
    28. ends
    29. struct UNICODE_STRING
    30.     Len                     dw ?
    31.     MaximumLength     dw ?
    32.     Buffer                  dw ?
    33. ends
    34. struct VM_COUNTERS
    35.     PeakVirtualSize                          dw    ?    ; SIZE_T
    36.     VirtualSize                                dw    ?    ; SIZE_T
    37.     PageFaultCount                         dw    ?
    38.     PeakWorkingSetSize                   dw    ?    ; SIZE_T
    39.     WorkingSetSize                         dw    ?    ; SIZE_T
    40.     QuotaPeakPagedPoolUsage          dw    ?    ; SIZE_T
    41.     QuotaPagedPoolUsage                dw    ?    ; SIZE_T
    42.     QuotaPeakNonPagedPoolUsage     dw    ?    ; SIZE_T
    43.     QuotaNonPagedPoolUsage           dw    ?    ; SIZE_T
    44.     PagefileUsage                           dw    ?    ; SIZE_T
    45.     PeakPagefileUsage                     dw    ?    ; SIZE_T
    46. ends
    47. struct SYSTEM_PROCESS_INFORMATION
    48.     NextEntryDelta              dd  ?
    49.     ThreadCount                 dd  ?
    50.     Reserved1                    dd  6 dup (?)
    51.     CreateTime                   db      8 dup(?)
    52.     UserTime                      db      8 dup(?)
    53.     KernelTime                    db      8 dup(?)
    54.     ProcessName                 UNICODE_STRING  <>
    55.     BasePriority                   dd   ?
    56.     ProcessId                     dd  ?
    57.     InheritedFromProcessId   dd  ?
    58.     HandleCount                 dd  ?
    59.     Reserved2                    dd  2 dup (?)
    60.     VmCounters                  VM_COUNTERS <>
    61. ;IO_COUNTERS IoCounters; // Windows 2000 only
    62.     Threads                     SYSTEM_THREADS  <>
    63. ends
    64. razmer dd ?
    65. section '.code' code readable executable
    66. start:
    67. invoke NtQuerySystemInformation,5,0,0,razmer
    68. invoke GlobalAlloc,0h or 40h,razmer
    69. mov esi,eax
    70. assign esi,SYSTEM_PROCESS_INFORMATION
    71. invoke NtQuerySystemInformation,5,esi,razmer,0
    72.     @@:
    73.        invoke MessageBoxW,0,[.esi.ProcessName+4],[.esi.ProcessName+4],0
    74.        mov eax,[esi]
    75.        mov ebx,[.esi.NextEntryDelta]
    76.        add esi,ebx
    77.        cmp ebx,0
    78.        jnz @B
    79. ret
    80. section '.idata' import data readable writeable
    81.   library kernel32,'kernel32.dll',\
    82.           user32,'user32.dll',\
    83.           gdi32,'gdi32.dll',\
    84.           ntdll,'ntdll.dll'
    85.  
    86.   include 'G:\FASM\INCLUDE\api\kernel32.inc'
    87.   include 'G:\FASM\INCLUDE\api\user32.inc'
    88.   include 'G:\FASM\\INCLUDE\api\gdi32.inc'
    89.   import ntdll,\
    90.          NtQuerySystemInformation,'NtQuerySystemInformation'
     
  9. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.576
    777user777
    Берите тогда инклуд и либу от старого масма (могу залить) или же пишите

    Process32FirstW
    Process32NextW
     
  10. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    include kernel32.inc
    includelib kernel32.lib
     
  11. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.576
    K10
    поменяли в 11 масме все. если раньше было
    Код (Text):
    1. Process32First PROTO :DWORD,:DWORD
    2. Process32FirstW PROTO :DWORD,:DWORD
    То теперь
    Код (Text):
    1. Process32FirstW PROTO STDCALL :DWORD,:DWORD
    2. IFDEF __UNICODE__
    3.   Process32First equ <Process32FirstW>
    4. ENDIF
     
  12. 777user777

    777user777 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2010
    Сообщения:
    109
    я уже с этим разобрался,просто подключил стврый kernel32.lib. чтобы не создавать новую тему,спрошу здесь:
    как получить список ключей в реестре? пробовал RegEnumKeyEx,но он выводит всего один ключ.
     
  13. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    777user777
    Увеличивать в цикле индекс и перечислять подключи, пока не вернет ERROR_NO_MORE_ITEMS.
     
  14. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    M0rg0t
    Т.е. все на юникоде там сейчас?
     
  15. 777user777

    777user777 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2010
    Сообщения:
    109
    именно так и делаю,но выходит только первый ключ.
     
  16. TrashGen

    TrashGen ТрещГен

    Публикаций:
    0
    Регистрация:
    15 мар 2011
    Сообщения:
    1.186
    Адрес:
    подполье
    >>именно так и делаю,но выходит только первый ключ.
    Сталобыть не именно так делаете. Откройте наконец для себя отладчик и будет вам счастье не путаться в десяти сроках кодеса
     
  17. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.576
    K10
    Не все, но от большинства функций прототипы лишь юникодные. + имеется специальный макрос Юникоде, при котором принудительно все вызываемые функи (вида MessageBox) будут с W.