minhook icon indicating copy to clipboard operation
minhook copied to clipboard

Can't get real production example to work

Open qb-0 opened this issue 4 years ago • 1 comments

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)```

qb-0 avatar Jan 09 '21 12:01 qb-0

I also get a segfault when calling a 'hooked' function when it has been injected in a process using thread.

4zv4l avatar Feb 08 '23 16:02 4zv4l