I want to be able to catch windows exception and do stuff with it (mainly
for hardware break point later).
I created a custom function to add a Vectored Exception Handler using the
windows API call AddVectoredExceptionHandler:
```
func AddVEH(myHandler PVECTORED_EXCEPTION_HANDLER) error {
kernel32 := syscall.NewLazyDLL("kernel32.dll")
addVectoredExceptionHandler :=
kernel32.NewProc("AddVectoredExceptionHandler")
_, _, err := addVectoredExceptionHandler.Call(
uintptr(1),
syscall.NewCallback(func(exceptionInfo *EXCEPTION_POINTERS) uintptr {
return myHandler(exceptionInfo)
}),
)
if err != nil {
fmt.Println("Error Setting the VEH")
fmt.Println(err.Error())
}
return err
}
```
I test it with a custom exception I raise:
```
func myHandler(exceptionInfo *handler.EXCEPTION_POINTERS) uintptr {
println("Exception occurred! ---> Code")
println(exceptionInfo.ExceptionRecord.ExceptionCode)
println("It happends in life, lets continue")
return ^uintptr(0) // EXCEPTION_CONTINUE_EXECUTION = -1
}
func main() {
handler.AddVEH(myHandler)
raiseCustomException() // Just Raises a custom EXCEPTION with
RaiseException winapi and code 0xE0000001
println("Continued")
}
```
As I return with EXCEPTION_CONTINUE_EXECUTION, I expect that
`println("Continued")` will be executed. However, it is not the case at all:
```
Error Setting the VEH
The operation completed successfully.
Exception occurred! ---> Code
3758096385
It happends in life, lets continue
Exception 0xe0000001 0x7eb71d5fb17c 0x1b 0x7ffc54e4b699
PC=0x7ffc54e4b699
runtime.cgocall(0xf1dde0, 0xc000049b30)
runtime/cgocall.go:167 +0x3e fp=0xc00006fe28 sp=0xc00006fdc0
pc=0xf10a7e
syscall.SyscallN(0xc00001e410?, {0xc0000121c0?, 0x0?, 0xf39a00?})
```
As you see the program enter the handler function but never continues,
rather it exit and print the stack trace...
Not sure if it is because of syscall.NewCallback or something else ...
--
You received this message because you are subscribed to the Google Groups
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/golang-nuts/e1f20601-bdb3-4dba-bf3c-dbd7cd42191an%40googlegroups.com.