Cheat Engine Forum Index Cheat Engine
The Official Site of Cheat Engine
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 


notepad.exe + getProcessMemoryInfo

 
Post new topic   Reply to topic    Cheat Engine Forum Index -> Cheat Engine Lua Scripting
View previous topic :: View next topic  
Author Message
xxhehe
Expert Cheater
Reputation: 0

Joined: 11 Mar 2015
Posts: 154

PostPosted: Sun Sep 01, 2024 10:54 pm    Post subject: notepad.exe + getProcessMemoryInfo Reply with quote

Code:
-- Function to open the specified process (notepad.exe) and get its memory info
function getNotepadMemoryInfo()
    -- Specify the process name (notepad.exe)
    local processName = "notepad.exe"

    -- Find the process ID of notepad.exe
    local pid = nil
    local processList = getProcessList()
    for pID, pName in pairs(processList) do
        if string.lower(pName) == string.lower(processName) then
            pid = pID
            break
        end
    end

    if pid == nil then
        print("Notepad process not found")
        return
    end

    -- Open the notepad process
    openProcess(pid)

    -- Allocate memory for the PROCESS_MEMORY_COUNTERS structure
    local pmc = allocateMemory(40)  -- The structure is 40 bytes (on a 32-bit system)
    if not pmc then
        print("Failed to allocate memory")
        return
    end
    writeInteger(pmc, 40)           -- Set the cb field to the size of the structure

    -- Get the address of GetProcessMemoryInfo API from kernel32.dll
    local kernel32_base = getAddress("kernel32.dll")
    if not kernel32_base then
        print("Failed to get kernel32.dll base address")
        return
    end

    -- Get the GetProcessMemoryInfo function address
    local GetProcessMemoryInfo = getAddress("K32GetProcessMemoryInfo", kernel32_base)
    if not GetProcessMemoryInfo then
        GetProcessMemoryInfo = getAddress("GetProcessMemoryInfo", kernel32_base)
    end

    if not GetProcessMemoryInfo then
        print("Failed to find GetProcessMemoryInfo function")
        return
    end

    -- Debug output: Print address of GetProcessMemoryInfo
    print("GetProcessMemoryInfo address: " .. string.format("0x%X", GetProcessMemoryInfo))

    -- Call the API
    local result = executeCode(GetProcessMemoryInfo, getOpenedProcessHandle(), pmc, 40)
   
    -- Check if result is valid before proceeding
    if result == nil or result == 0 then
        print("Failed to execute GetProcessMemoryInfo")
        freeMemory(pmc)  -- Clean up memory allocation
        return
    end
   
    -- Debug output: Print result of executeCode
    print("Result of executeCode: " .. tostring(result))

    -- Read the values from the PROCESS_MEMORY_COUNTERS structure
    local PageFaultCount = readInteger(pmc + 4)
    local PeakWorkingSetSize = readQword(pmc + 8)
    local WorkingSetSize = readQword(pmc + 16)
    local PagefileUsage = readQword(pmc + 32)
    local PeakPagefileUsage = readQword(pmc + 24)

    print("Page Fault Count: " .. PageFaultCount)
    print("Peak Working Set Size: " .. PeakWorkingSetSize)
    print("Working Set Size: " .. WorkingSetSize)
    print("Pagefile Usage: " .. PagefileUsage)
    print("Peak Pagefile Usage: " .. PeakPagefileUsage)

    -- Clean up: Ensure memory is properly released
    freeMemory(pmc)
end

-- Call the function to get notepad memory information
getNotepadMemoryInfo()


GetProcessMemoryInfo address: 0x7FFFD553B950
Failed to execute GetProcessMemoryInfo
错误:[string "-- Function to open the specified process (no..."]:59: attempt to call a nil value (global 'freeMemory')
Back to top
View user's profile Send private message
Dark Byte
Site Admin
Reputation: 470

Joined: 09 May 2003
Posts: 25807
Location: The netherlands

PostPosted: Mon Sep 02, 2024 1:10 am    Post subject: Reply with quote

freeMemory doesn't exist. try deAlloc instead
_________________
Do not ask me about online cheats. I don't know any and wont help finding them.

Like my help? Join me on Patreon so i can keep helping
Back to top
View user's profile Send private message MSN Messenger
xxhehe
Expert Cheater
Reputation: 0

Joined: 11 Mar 2015
Posts: 154

PostPosted: Mon Sep 02, 2024 4:36 am    Post subject: Reply with quote

Dark Byte wrote:
freeMemory doesn't exist. try deAlloc instead

Code:

 -- Get the address of GetProcessMemoryInfo API from kernel32.dll
    local kernel32_base = getAddress("kernel32.dll")
    if not kernel32_base then
        print("Failed to get kernel32.dll base address")
        deAlloc(pmc)
        return
    end

    -- Get the GetProcessMemoryInfo function address
    local GetProcessMemoryInfo = getAddress("K32GetProcessMemoryInfo", kernel32_base)
    if not GetProcessMemoryInfo then
        GetProcessMemoryInfo = getAddress("GetProcessMemoryInfo", kernel32_base)
    end

    if not GetProcessMemoryInfo then
        print("Failed to find GetProcessMemoryInfo function")
        deAlloc(pmc)
        return
    end

    -- Debug output: Print address of GetProcessMemoryInfo
    print("GetProcessMemoryInfo address: " .. string.format("0x%X", GetProcessMemoryInfo))

    -- Call the API
    local result = executeCode(GetProcessMemoryInfo, getOpenedProcessHandle(), pmc, 40)
   
    -- Check if result is valid before proceeding
    if result == nil or result == 0 then
        print("Failed to execute GetProcessMemoryInfo")
        deAlloc(pmc)  -- Clean up memory allocation
        return
    end
   
    -- Debug output: Print result of executeCode
    print("Result of executeCode: " .. tostring(result))

    -- Read the values from the PROCESS_MEMORY_COUNTERS structure
    local PageFaultCount = readInteger(pmc + 4)
    local PeakWorkingSetSize = readQword(pmc + 8)
    local WorkingSetSize = readQword(pmc + 16)
    local PagefileUsage = readQword(pmc + 32)
    local PeakPagefileUsage = readQword(pmc + 24)

    print("Page Fault Count: " .. PageFaultCount)
    print("Peak Working Set Size: " .. PeakWorkingSetSize)
    print("Working Set Size: " .. WorkingSetSize)
    print("Pagefile Usage: " .. PagefileUsage)
    print("Peak Pagefile Usage: " .. PeakPagefileUsage)

    -- Clean up: Ensure memory is properly released
    deAlloc(pmc)
end

-- Call the function to get the current process memory information
getCurrentProcessMemoryInfo()



Modified but still invalid.It looks like the program is crashing when trying to execute GetProcessMemoryInfo. This may be due to incorrect parameters or a problem with how executeCode is being used.
Please ask if enumMemoryRegions() can get the result of getProcessMemoryInfo():Retrieve and display memory information
Back to top
View user's profile Send private message
Dark Byte
Site Admin
Reputation: 470

Joined: 09 May 2003
Posts: 25807
Location: The netherlands

PostPosted: Mon Sep 02, 2024 11:48 am    Post subject: Reply with quote

you may want to look into ExecuteCodeEx if you intend on using parameters
_________________
Do not ask me about online cheats. I don't know any and wont help finding them.

Like my help? Join me on Patreon so i can keep helping
Back to top
View user's profile Send private message MSN Messenger
Display posts from previous:   
Post new topic   Reply to topic    Cheat Engine Forum Index -> Cheat Engine Lua Scripting All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


Powered by phpBB © 2001, 2005 phpBB Group

CE Wiki   IRC (#CEF)   Twitter
Third party websites