funchook
funchook copied to clipboard
usage on macOS arm64
Hello,
I am interested in getting this fully working on arm64 macOS.
I saw the issues with it mentioned earlier here:
- https://github.com/kubo/funchook/issues/40
I am building it on my machine with the following procedure:
CC=gcc-13 CXX=g++-13 cmake -G Ninja -DFUNCHOOK_DISASM=capstone -DCMAKE_BUILD_TYPE=Release -DFUNCHOOK_BUILD_TESTS=0 ..
ninja
Out of the box, it fails with this error:
/code/funchook/src/prehook-arm64-gas.S:4:2: error: unknown directive
.type funchook_hook_caller_asm, %function
^
I was indeed able to build the main library, but I had to make some changes to the assembly:
diff --git a/src/prehook-arm64-gas.S b/src/prehook-arm64-gas.S
index de39edb..dbdb717 100644
--- a/src/prehook-arm64-gas.S
+++ b/src/prehook-arm64-gas.S
@@ -1,8 +1,8 @@
.arch armv8-a
.text
- .globl funchook_hook_caller_asm
- .type funchook_hook_caller_asm, %function
-funchook_hook_caller_asm:
+ .globl _funchook_hook_caller_asm
+ ; .type _funchook_hook_caller_asm, %function
+_funchook_hook_caller_asm:
.cfi_startproc
// save frame pointer (x29) and link register (x30).
stp x29, x30, [sp, -0xe0]!
@@ -46,7 +46,7 @@ funchook_hook_caller_asm:
// 2nd arg: frame pointer
mov x1, x29
// call funchook_hook_caller
- bl funchook_hook_caller
+ bl _funchook_hook_caller
mov x9, x0
// restore registers
ldp x0, x1, [sp, 0x10]
This is needed to get it to link for macOS. It seems like the supported syntax for macOS arm64 assembler is different from standard arm64 GAS syntax, so we may have to add an additional file with these changes?
I believe it should be possible to get build with tests working too, I will try that.