Search code examples
c++assemblymasmmsdnmasm32

Listing all running applications MASM32 Assembly


Good day! I've been trying to list all the currently running applications and write it on a text file using masm. I'm new with assembly but is using MSDN as my reference. So far, I know how to use CreateFile, WriteFile, ReadFile and others but I don't get how Process32First works.

I'm trying to convert the code in this link to MASM, (https://msdn.microsoft.com/en-us/library/windows/desktop/ms686701(v=vs.85).aspx) but with no luck, I can't get any output.

I will really appreciate any help! Thank you! Have a nice day.

include \masm32\include\masm32rt.inc

.data
    pe32 PROCESSENTRY32 <>
    errorCreateTool db "ERROR: CreateToolhelp32Snapshot", 0
    errorPF db "ERROR: Process32First", 0
    errorOP db "ERROR: OpenProcess", 0

    yesMsg db "proceed", 0

.data?
    dwPriorityClass dd ?
    hProcessSnap HANDLE ?
    hProcess HANDLE ?

.code

_start:

    push 0
    push TH32CS_SNAPPROCESS
    call CreateToolhelp32Snapshot

    mov hProcessSnap, eax

    cmp hProcessSnap, INVALID_HANDLE_VALUE
    je _errorCT 

    mov pe32.dwSize, sizeof PROCESSENTRY32

    push offset pe32
    push hProcessSnap
    call Process32FirstW

    cmp eax, ERROR_NO_MORE_FILES
    je _errorPF

    push offset pe32.szExeFile
    call StdOut

    mov dwPriorityClass, 0

    push offset pe32.th32ProcessID
    push FALSE
    push PROCESS_ALL_ACCESS
    call OpenProcess

    cmp eax, 00H                        ;if I comment this out, the code will proceed 
    je _errorOpen

    push offset pe32.th32ProcessID      ;but this doesn't have any value and doesn't print out
    call StdOut
    push offset yesMsg                  ;while this prints out on the console
    call StdOut

    jmp _done

_errorOpen:
    push offset errorOP
    call StdOut
    jmp _done

_errorPF:
    push offset errorPF
    call StdOut
    jmp _done

_errorCT:
    push offset errorCreateTool
    call StdOut

_done:    
    push 0
    call ExitProcess

end _start

Solution

  • I have experienced using that function. All I have to do is updata my kernel32.inc and kernel32p.inc as you have suggested. After doing those things, I run the makelibs.bat in the masm32 folder and it works from there.