Skip to content

Can't get real production example to work #2

@qb-0

Description

@qb-0

I'm trying to hook into a address of a function in a process with the example listed below. Tool.exe crashes with a segfault. I never used minhook so I'm not sure what's wrong. Also how could I still call the original function in hkFooBar?

Tool.exe

import os
from winim import LoadLibraryA

proc foobar(a, b: int): int = a + b

proc main = 
  echo "Address of foobar is ", cast[ByteAddress](foobar) # Address: 4265044
  LoadLibraryA("hookit.dll")

  while true:
    os.sleep(5000)
    echo "Result of foobar: ", foobar(10, 5)

when isMainModule: 
  main()

hookit.dll

import minhook

var toHook = cast[pointer](4265044)

proc hkFooBar(a, b: int): int = a * b

proc mainThread =
  {.gcsafe.}:
    echo "Library load"
    assert createHook(toHook, hkFooBar, nil) == mhOk
    assert enableHook(toHook) == mhOk
    echo "Hook enabled"

when isMainModule:
  var t: Thread[void]
  t.createThread(mainThread)```

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions