Page 1 of 1

Methods to see strings at "Accessed addresses by X"

Posted: Sat May 17, 2025 6:41 pm
by J1327

From select list method (v1) -- 5mo ago.
replaces value with string instead. Cons stops update timer (count) yet new records will be added anyway.

Code: Select all

Strings_v1 = registerFormAddNotification(function(form)
    if (form.ClassName == 'TfrmChangedAddresses') then
        createTimer(100, function()
            form.cbDisplayType.Items.add("String")
            form.uptotask = createTimer(form)
            form.uptotask.Interval = 100
            form.uptotask.OnTimer = function() -- timer is synchronized by default. Hurray.
                if form.Changedlist.Selected and isKeyPressed(VK_CONTROL) and isKeyPressed(VK_E) then
                    getMemoryViewForm().DisassemblerView.SelectedAddress =
                        tonumber(form.Changedlist.Selected.Caption, 16)
                    getMemoryViewForm().bringToFront()
                elseif form.cbDisplayType.ItemIndex == 7 then
                    form.Timer1.Enabled = false;
                    for i = 0, form.Changedlist.Items.Count - 1 do
                        form.Changedlist.Items.Item[i].SubItems[0] = readString(form.Changedlist.Items.Item[i].Caption)
                    end
                elseif not form.Timer1.Enabled then
                    form.Timer1.Enabled = true
                end

        end

    end)

end
end)

Right click method (v2) -- 5mo ago.

Code: Select all

local str_isWide
if utf8 then
    str_isWide = function(str)
        for _, codepoint in utf8.codes(str) do
            if codepoint > 127 then
                return true
            end
        end
        return false
    end
end
Strings_v2 = registerFormAddNotification(function(form)
    if (form.ClassName == 'TfrmChangedAddresses') then
        createTimer(100, function()
            form.showasString = createMenuItem(form.Changedlist.PopupMenu)
            form.showasString.caption = "Show as string"
            form.Changedlist.PopupMenu.Items.add(form.showasString)
            form.showasString.OnClick = function(self, sender)
                if not self.Checked then
                    self.Checked = true
                    form.colz = form.Changedlist.Columns.add()
                    form.colz.Width = 255
                    form.colz.Caption = " // String //"
                    for i = 0, form.Changedlist.Items.Count - 1 do
                        form.Changedlist.Items.Item[i].SubItems.add("")
                    end
                else
                    self.Checked = false
                    form.colz.destroy()
                    for i = 0, form.Changedlist.Items.Count - 1 do
                        form.Changedlist.Items.Item[0].SubItems.clear()
                    end
                end
            end
            form.Changedlist.OnInsert = function() -- let timer read string as soon as timer can (set by interval)
                synchronize(function()
                    form.Changedlist.Items.Item[form.Changedlist.Items.Count - 1].SubItems.add("")
                end)
            end
            form.uptotask = createTimer(form)
            form.uptotask.Interval = 100
            form.uptotask.OnTimer = function()
                if form.Changedlist.Selected and isKeyPressed(VK_CONTROL) and isKeyPressed(VK_E) then
                    getMemoryViewForm().DisassemblerView.SelectedAddress =
                        tonumber(form.Changedlist.Selected.Caption, 16)
                    getMemoryViewForm().bringToFront()
                elseif form.showasString.Checked then
                    for i = 0, form.Changedlist.Items.Count - 1 do
                        if form.showasString.Checked then
                            form.Changedlist.Items.Item[i].SubItems[2] = str_isWide and
                                                                             readString(
                                    form.Changedlist.Items.Item[i].Caption) or
                                                                             readString(
                                    form.Changedlist.Items.Item[i].Caption, 255, true)
                        end
                    end
                end
            end
        end)
    end
end)

Register custom string type (v3) -- before post.
has similarity with concept v1. Yet
using registercustomtype with in lua causes problems executing code from lua engine

 ! Message from: J1327

if you have running code with celua-debugger
(defined variables gets replaced inside function -- unstable to use).
I did reported personally this bug, yet am not sure if it is gonna be fixed any time soon.

Code: Select all

Strings_v3W = registerCustomTypeLua("Wide-String", 0x1, function(...)
    local buffer = {...}
    return readString(buffer[#buffer], 255, true)
end, function() end, false, true)
-- Wide_String.destroy()

Strings_v3 = registerCustomTypeLua("String", 0x1, function(...)
    local buffer = {...}
    return readString(buffer[#buffer])
end, function(...) end, false, true)
-- String.destroy()

Code partially owned By Dark-Byte and this persons software Cheat Engine.